11

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

pow(x,0.5);

有什么sqrt(x)不同pow(x,0.5)。具有 sqrt 功能是否有特定原因?

4

3 回答 3

17

我为您进行了测试以检查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 秒。所以性能要好很多。正如其他人已经提到的那样,可读性是其他原因。

于 2013-07-02T04:56:45.043 回答
6

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

即使它们相同,为常用函数提供内置别名也很不错!

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

于 2013-07-02T04:44:28.230 回答
5

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

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

因此,您可以(正确地)假设编写一个sqrt比编写通用pow函数更快的函数是可能的。

于 2013-07-02T04:43:02.557 回答