是否有超过IEEE 754双精度数的标准功率函数?

时间:2014-06-04 20:35:51

标签: floating-accuracy floating-point-precision

大多数语言在其标准库中都带有电源功能。例如,在C中," math.h"提供

double pow(double a, double b);

我将假设在几乎所有语言中,结果都是近似值。也就是说:调用pow的结果不一定是最接近精确解的两倍,也不是精确版本的四舍五入。我基于这样的假设,即这样做需要昂贵的区间运算。

1)这个假设是否正确?

如果它确实是正确的,也许它并不重要。毕竟,也许在双打范围内已知最大误差......但也许不是因为有许多双打可以测试。

2)绝对(参数无关)是否与已知的pow函数的相对误差有关

如果不是......好吧,也许我们可以放弃准确性以保持一致性。即使结果是近似的并且边界不清楚,也许至少我们可以确定该函数将始终为各种实现中的相同输入返回相同的结果。也许甚至还有标准近似的pow功能?

3)是否有任何语言的标准幂函数具有精确的语义,并且保证在不同的库版本或编译器版本中保持一致?

编辑: 显然,(1)被称为桌面制造者的困境" http://www.cs.berkeley.edu/~wkahan/LOG10HAF.TXT

1 个答案:

答案 0 :(得分:0)

不同的语言和框架对超越函数的准确性提供了不同的保证,因为在许多平台上,产生几乎正确结果的函数比保证结果在正确结果的0.51LSB范围内的函数要快得多。一个只能精确到50位的函数通常比实现52位精度需要两倍长的函数更有用,特别是如果一个应用程序除了前15位左右之外都会抛出所有这些(常见的)在图形代码中。)

值得注意的是,某些语言对整数和浮点指数具有单独的幂函数。具有整数指数的许多幂函数可以接受负基数而没有抱怨,并且一些在指数为零时无条件地返回1,即使基数是NaN或+/-无穷大,而接受浮点指数的幂函数将经常返回在后一种情况下,NaN。