【发布时间】:2014-07-25 16:09:32
【问题描述】:
大多数语言在其标准库中都带有一个幂函数。例如,在 C 中,“math.h”提供了
double pow(double a, double b);
我将假设几乎所有语言的结果都是近似的。也就是说:调用 pow 的结果不一定是最接近精确解的双精度数,也不是精确版本的四舍五入。我的这个假设基于这样一个事实,即这样做需要昂贵的区间算术。
1) 这个假设正确吗?
如果它确实是正确的,也许没关系。毕竟,也许最大误差在双打范围内是已知的……但也许这不是因为有很多双打可以测试。
2) 是已知 pow 函数相对误差的绝对(与参数无关)界限
如果不是……那么也许我们可以为了一致性而放弃准确性。即使结果是近似的并且界限不明确,也许至少我们可以确定该函数将始终在各种实现中为相同的输入返回相同的结果。也许还有一个标准近似的 pow 函数?
3) 任何语言中是否有一个标准的幂函数,它具有精确的语义并保证在不同的库版本或编译器版本之间保持一致?
编辑: 显然,(1)被称为“制表者的困境”http://www.cs.berkeley.edu/~wkahan/LOG10HAF.TXT
【问题讨论】:
标签: floating-accuracy floating-point-precision