我想知道为什么在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秒钟在我的电脑上.因此性能更好.正如其他人已经提到的可读性是另一个原因.
当然,如果你只考虑数学等价......
但是在计算结果的算法方面,sqrt特定于一件事而非pow通用.
所以你可以(正确地)假设编写一个sqrt比写通用pow函数更快的函数是可能的.
我记得在某处读过sqrt()是一个特殊情况,IEEE规范保证可以正确舍入.我会仔细查找来源.它也应该快一点,因为它只需要处理一个案例.
即使它们是相同的,也可以为常用功能提供内置别名!
编辑:根据IEEE-754,pow()函数和sqrt()都应该被实现,使得舍入值是与实际值最接近的可能浮点表示.但是,sqrt()应该仍然更快.
| 归档时间: |
|
| 查看次数: |
10863 次 |
| 最近记录: |