1

我需要多次计算浮点数的平方。(到 10^8 的数量级)

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

 pdt=pow(num,2);

      OR

 pdt=num*num

或者他们真的一样吗?

编辑:在相当大的输入上检查两种样式时,我的处理器给出了相互矛盾的结果。

4

2 回答 2

10

num*num将至少与pow(num, 2)任何非反常的 C/C++ 实现一样快,因为没有pow至少一个浮点乘法或更耗时的操作就没有实现。

于 2013-03-11T23:02:40.473 回答
6

使用没有优化 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
于 2013-03-11T23:05:26.407 回答