我在想为什么C / C ++中有sqrt()函数,因为我们可以使用
pow(x,0.5);
sqrt(x)和pow(x,0.5)有什么不同?为什么会有sqrt函数?
我为你运行了一个测试以检查sqrt(x)
和pow(x,0.5)
的性能。
1.
我为你运行了一个测试以检查sqrt(x)
和pow(x,0.5)
的性能。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秒。因此性能更好。正如其他人已经提到的,易读性是另一个原因。
我记得在某个地方看到过,sqrt()是一个特殊情况,根据IEEE规范保证四舍五入正确。我会查找源头来确认一下。它应该会更快,因为它只需要处理一个情况。
即使它们是相同的,也很好有一个内置的别名用于常用函数!
编辑:根据IEEE-754,pow()函数和sqrt()函数都应该被实现为将四舍五入值作为最接近真实值的浮点表示。然而,sqrt()仍然应该更快。
当然,如果你只考虑数学上的等价性...
但是从计算结果的算法角度来看,sqrt
是特定于一件事情的,而 pow
是通用的。
因此,你可以(正确地)假设编写 sqrt
函数比编写通用的 pow
函数更快。
pow()
,sqrt(x)
可以提高可读性。 - GeekFactory