我想知道为什么在C / c ++中有sqrt()函数,因为我们可以使用
实现相同的功能pow(x,0.5);
sqrt(x)
的{{1}}有何不同。是否存在具有sqrt功能的特定原因?
答案 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()仍然应该更快。