我需要多次计算浮点数的平方。(到 10^8 的数量级)
哪个更好(因为时间是一个巨大的限制):
pdt=pow(num,2);
OR
pdt=num*num
或者他们真的一样吗?
编辑:在相当大的输入上检查两种样式时,我的处理器给出了相互矛盾的结果。
我需要多次计算浮点数的平方。(到 10^8 的数量级)
哪个更好(因为时间是一个巨大的限制):
pdt=pow(num,2);
OR
pdt=num*num
或者他们真的一样吗?
编辑:在相当大的输入上检查两种样式时,我的处理器给出了相互矛盾的结果。
num*num
将至少与pow(num, 2)
任何非反常的 C/C++ 实现一样快,因为没有pow
至少一个浮点乘法或更耗时的操作就没有实现。
使用没有优化 num * num 的 gcc 会更快,因为pow
会导致函数调用。在-O2
它们输出相同的 asm 时(对于 x86):
float numpow(float x){
return pow(x, 2);
}
float mulpow(float x){
return x*x;
}
compiled with g++ -S -O2 -c
__Z6numpowf:
Leh_func_begin1:
pushq %rbp
Ltmp0:
movq %rsp, %rbp
Ltmp1:
mulss %xmm0, %xmm0
popq %rbp
ret
Leh_func_end1:
...
__Z6mulpowf:
Leh_func_begin2:
pushq %rbp
Ltmp2:
movq %rsp, %rbp
Ltmp3:
mulss %xmm0, %xmm0
popq %rbp
ret