sqrt(x)和pow(x,0.5)之间的差异

Ale*_*lex 8 c c++ sqrt

我想知道为什么在C/c ++中有sqrt()函数,因为我们可以实现相同的使用

pow(x,0.5);
Run Code Online (Sandbox Code Playgroud)

怎么会sqrt(x)有所不同pow(x,0.5).有sqrt功能的具体原因是什么?

ban*_*run 12

我跑的测试,为您检查的性能sqrt(x)pow(x,0.5)

1.

for(int i=0;i<100000000;i++) 
    pow(double(i),0.5);
Run Code Online (Sandbox Code Playgroud)

2.

for(int i=0;i<100000000;i++)
    sqrt(double(i));  
Run Code Online (Sandbox Code Playgroud)

第一个花了大约20秒,第二个花了大约2秒钟在我的电脑上.因此性能更好.正如其他人已经提到的可读性是另一个原因.


pad*_*ddy 5

当然,如果你只考虑数学等价......

但是在计算结果的算法方面,sqrt特定于一件事而非pow通用.

所以你可以(正确地)假设编写一个sqrt比写通用pow函数更快的函数是可能的.


vro*_*del 5

我记得在某处读过sqrt()是一个特殊情况,IEEE规范保证可以正确舍入.我会仔细查找来源.它也应该快一点,因为它只需要处理一个案例.

即使它们是相同的,也可以为常用功能提供内置别名!

编辑:根据IEEE-754,pow()函数和sqrt()都应该被实现,使得舍入值是与实际值最接近的可能浮点表示.但是,sqrt()应该仍然更快.