несъвършенство 2

Името на операнда се използва за обозначаване на различни обекти на различни места в програмата, когато предишното срещане на името вече не е необходимо и следващото е в сила. Този подход спестява памет в машинния код, където няма начин да се посочи еквивалентността на имената на два операнда. Двусмисленото използване на имена на операнди обаче води до лошо разбиране на програмата, точно както в английския език използването на термини, чието значение трябва да се извлича от контекста, затруднява разбирането.

Пример е версия (8), тъй като операндът R първо се въвежда за представяне на сумата и след това на квадрата. В оригиналната си форма версия (8) е:

V´L = (N1 + N2) log2 (h1 + h2) ´

версия
= (5+6)log2(4+3)´
несъвършенство
= 7,7

Подобрявайки тази версия чрез премахване на двусмислената употреба на R, получаваме:

откъдето: V´L = (N1 + N2) log2 (h1 + h2) ´

подизрази
= (5+6)log2(4+4)´
log2
= 11.0

Тук отново подобреният резултат от 11.0 е по-близък до теоретичния 11.6, отколкото за версията с двусмислено използване. Версии (3) и (13) също съдържат това несъвършенство.

Несъвършенство 3. Синонимни операнди.

Точно обратното на неяснотата при именуване на операнда е да се зададат две различни имена за един и същи обект. Ако две или повече променливи се използват по такъв начин, че техните стойности винаги трябва да бъдат еднакви, тогава синонимните операнди са несъвършени. Това несъответствие съдържа версия (4) в оригиналната й форма:

защото Т1 и Т2 трябва да съвпадат. В такъв случай:

V´L = (N1 + N2) log2 (h1 + h2) ´

подизрази
= (8+9)log2(4+5)´
log2 log2
= 15,0

Подобрена версия (4) чрез премахване на синонимаоперанд T2, получаваме:

В резултат на това имаме:

V´L = (N1 + N2) log2 (h1 + h2) ´

версия
= (5+6)log2(4+4)´
log2 log2
= 11,0

В допълнение към версия (4), пример за използване на синонимни операнди е версия (14).

Несъвършенство 4. Общи подизрази.

В случаите, когато определена комбинация от изразни термини трябва да се използва повече от веднъж, обикновено й се дава ново име и след това се препраща към нея. При отклонение от това правило програмата съдържа общи подизрази. Фазата на оптимизация в компилатора може да е в състояние да елиминира общи подизрази, но ако не го направи, се извършват ненужни изчисления.

Таблица 7.1. версия (2) съдържа два екземпляра на израза (P + Q):

V´L = (N1 + N2) log2 (h1 + h2) ´

log2 log2
= (6+5)log2(4+3)´
подизрази
= 9,3

Подобрявайки версия (2) чрез елиминиране на общи подизрази, получаваме:

V´L = (N1 + N2) log2 (h1 + h2) ´

log2
= (5+6)log2(4+4)´
подизрази
= 11,0

В допълнение към разглежданата версия, общите подизрази съдържат и версии (7) и (12).