我需要多次计算浮点数的平方。(大约10 ^ 8)
哪个更好(因为时间是一个很大的限制因素):
pdt=pow(num,2);
OR
pdt=num*num
或者他们真的一样吗?
编辑:在相当大的输入上检查两种样式时,我的处理器产生了相反的结果。
答案 0 :(得分:10)
num*num
至少与pow(num, 2)
一样快,因为没有至少一个浮点乘法或pow
没有实现更耗时的操作。
答案 1 :(得分:6)
使用没有选择的gcc num * num更快,因为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