Разница есть, но она зависит от компилятора. Сначала на vs2003 (c ++) я не получил существенной разницы для двойных типов (64-битная с плавающей точкой). Однако, выполнив тесты снова на vs2010, я обнаружил огромную разницу, в 4 раза быстрее для умножений. Отслеживая это, кажется, что vs2003 и vs2010 генерируют разные коды fpu.
На Pentium 4, 2,8 ГГц, по сравнению с 2003:
- Умножение: 8.09
- Отдел: 7,97
На Xeon W3530, версия 2003:
- Умножение: 4,68
- Разделение: 4,64
На Xeon W3530, версия 2010:
- Умножение: 5,33
- Разделение: 21,05
Кажется, что в vs2003 деление в цикле (таким образом, делитель использовался несколько раз) было переведено в умножение с обратным. На vs2010 эта оптимизация больше не применяется (я полагаю, потому что между этими двумя методами есть немного разные результаты). Также обратите внимание, что процессор выполняет деления быстрее, как только ваш числитель станет 0.0. Я не знаю точного алгоритма, встроенного в чип, но, возможно, он зависит от числа.
Редактировать 18-03-2013: наблюдение за 2010