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

时间:2013-07-02 04:37:43

标签: c++ c sqrt

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

实现相同的功能
pow(x,0.5);

sqrt(x)的{​​{1}}有何不同。是否存在具有sqrt功能的特定原因?

3 个答案:

答案 0 :(得分:11)

我为您测试了sqrt(x)pow(x,0.5)

的效果

1

for(int i=0;i<100000000;i++) 
    pow(double(i),0.5);

2

for(int i=0;i<100000000;i++)
    sqrt(double(i));  

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

答案 1 :(得分:5)

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

但就计算结果的算法而言,sqrt特定于一件事,而pow则是通用的。

所以你可以(正确地)假设为sqrt编写一个比编写泛型pow函数更快的函数。

答案 2 :(得分:5)

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

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

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