Возможный дубликат:
Деление с плавающей точкой против умножения с плавающей точкой
Недавно я написал программу, которая рассчитывает, сколько времени занимает мой компьютер
рассчитать реальные умножения, деления и сложения.
для этого я использовал функции QueryPerformanceFrequency и QueryPerformanceCounter
для того, чтобы получить временные интервалы.
я проверил свою программу, используя 6000000 итераций: 6000000 умножений, делений и сумм (с переменными числами) и получаю следующие результаты:
O.S = Windows Vista (TM) Home Premium, 32-bit (Service Pack 2)
Processor = Intel Core (TM)2 Quad CPU Q8200
Processor Freq = 2.33 GHz
Compiler = Visual C++ Express Editionnº iterations time in micro seconds
6000000 x real mult + assignment -> 15685.024214 us
6000000 x real div + assignment -> 51737.441490 us
6000000 x real sum + assignment -> 15448.471803 us
6000000 x real assignment -> 12987.614348 us
nº iterations time in micro seconds
6000000 x real mults -> 2697.409866 us
6000000 x real divs -> 38749.827143 us
6000000 x real sums -> 2460.857455 us
1 Iteration time in nano seconds
real mult -> 0.449568 ns
real div -> 6.458305 ns
real sum -> 0.410143 ns
Возможно ли, что деление в шесть раз медленнее, чем умножение, и
сложение практически равно, чем умножение (~ 0,42 нс)?
Да, это. Если вы когда-либо делали деление вручную, то вы знаете, что оно включает в себя множество подопераций.
Что касается сложения и умножения примерно одинаковой скорости: они больше связаны с настройкой операндов и сохранением результата, чем с фактическим вычислением. Вы могли бы получить больше различий между ними, компилируя, используя инструкции SSE для сложения и умножения (на x86).
С современным процессором, умножения примерно одинаковы по скорости.
На Intel Sandy Bridge умножение с использованием SSE занимает 4/3 времени добавления. Но с учетом ILP, когда несколько инструкций могут обрабатываться одновременно, они фактически занимают одинаковое количество времени. На одном и том же процессоре с ILP деления одинарной точности занимают в 7-14 раз больше времени!
Источник: Таблицы инструкций Агнера Фога. Много очень хорошего чтения на его сайте.