Рубрики

ВОРОТА | GATE-CS-2006 | Вопрос 60

Рассмотрим следующий сегмент кода C.

for (i = 0, i<n; i++)

{

    for (j=0; j<n; j++)

    {

        if (i%2)

        {

            x += (4*j + 5*i);

            y += (7 + 4*j);

        }

    }

}

Что из следующего является ложным?
(A) Код содержит цикл инвариантное вычисление
(B) В этом коде есть область исключения общего подвыражения
(C) В этом коде есть область снижения прочности
(D) В этом коде есть область устранения мертвого кода

Ответ: (D)
Пояснение: Вопрос спрашивает о ложном утверждении


4*j is common subexpression elimination so B is true.

5*i can be moved out of inner loop so can be i%2. 
Means, A is true as we have loop invariant computation.

Next, 4*j as well as 5*i can be replaced with a = - 4;
before j loop then a = a + 4; where 4*j is computed,
likewise for 5*i. C is true as there is scope of strength 
reduction. 

By choice elimination, we have D.

Тест на этот вопрос

Рекомендуемые посты:

ВОРОТА | GATE-CS-2006 | Вопрос 60

0.00 (0%) 0 votes