我需要多次计算浮标的平方。( 10^8)
哪个更好(因为时间是一个巨大的限制):
pdt=pow(num,2);
OR
pdt=num*num还是他们真的一样?
编辑:在相当大的输入上检查这两种样式时,我的处理器给出了矛盾的结果.
发布于 2013-03-11 23:02:40
在任何非反常的C/C++实现上,num*num将至少与pow(num, 2)一样快,因为没有至少一个浮点乘法或更耗时的操作,pow的实现就没有了。
发布于 2013-03-11 23:05:26
使用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
rethttps://stackoverflow.com/questions/15350262
复制相似问题