pow的效率(num,2)?

时间:2013-03-11 22:58:36

标签: c++ math loops floating-point

我需要多次计算浮点数的平方。(大约10 ^ 8)

哪个更好(因为时间是一个很大的限制因素):

 pdt=pow(num,2);

      OR

 pdt=num*num

或者他们真的一样吗?

编辑:在相当大的输入上检查两种样式时,我的处理器产生了相反的结果。

2 个答案:

答案 0 :(得分:10)

在任何非反常的C / C ++实现中,

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