我想知道为什么 C/c++ 中有 sqrt() 函数,因为我们可以使用
pow(x,0.5);
有什么sqrt(x)
不同pow(x,0.5)
。具有 sqrt 功能是否有特定原因?
我为您进行了测试以检查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 秒。所以性能要好很多。正如其他人已经提到的那样,可读性是其他原因。
我记得在某处读到 sqrt() 是 IEEE 规范保证正确舍入的特殊情况。我会查找它以找到来源。它也应该快一点,因为它只需要处理一个案例。
即使它们相同,为常用函数提供内置别名也很不错!
编辑:根据 IEEE-754,pow() 函数和 sqrt() 都应该被实现,使得舍入值是最接近实际值的可能浮点表示。但是, sqrt() 应该仍然更快。
当然,如果你只考虑数学等价...
但是就计算结果的算法而言,sqrt
它是特定于一件事的,pow
而是通用的。
因此,您可以(正确地)假设编写一个sqrt
比编写通用pow
函数更快的函数是可能的。