ТЕХНИКА ОПТИМИЗАЦИИ ПРОГРАММ

       

Деление


Деление – очень "дорогостоящая" операция, даже на старших моделях процессоров Intel Pentium занимающая до сорока и более тактов. Кошмар! К счастью процесс деления поддается оптимизации.

Если делитель кратен степени двойки, то инструкцию деления можно заменить более быстродействующей инструкцией битового сдвига, выполняющейся всего за один такт. А что делать, если делитель отличен от степени двойки (как чаще всего и бывает)? Тогда имеет смысл заменить деление умножением, - ведь операция умножения выполняется намного быстрее, в среднем укладываясь в четыре такта, что на порядок шустрее! Существует множество формул подобных преобразований, вот, например, одна (самая популярная из них): , где N – разрядность числа. Если делить – константа, то операция деления выполняется всего за пять тактов – два в степени N – константное выражение, вычисляемое на этапе компиляции, выражение вычисляется битовым сдвигом за один такт, еще четыре такта расходуется на умножение, итого, в сумме выходит пять.

К сожалению, компиляторы Borland C++ и WATCOM не настолько "умны", чтобы заменять деление умножением – на это способен один лишь Microsoft Visual C++, за что честь ему и хвала! Битовые же сдвиги используют все три рассматриваемых компилятора.



Содержание раздела