谁能解释C ++ / Python中log2的不准确性?

时间:2015-02-20 09:05:22

标签: c++ python-2.7 math

我知道当x足够大时log2(x)精度失败,对于大多数语言,其形式为2 ^ n-1,除了R和Matlab可能。任何具体原因?

编辑1:x是一个大约10 ^ 15及以上的整数

2 个答案:

答案 0 :(得分:2)

x足够大时(对于IEEE双倍大约4.5E15,我认为),2 ^ n-1是不可表示的。

答案 1 :(得分:2)

这是一般浮点(IEEE 754)不精确问题,与日志功能关系不大。在某些时候,不能再用浮点数表示一个差值,因为设置尾数中的下一位会增加一个可能远大于数字的数量。考虑这个例子:

int main() {
    double d = 4.5E15;
    while(d != d + 1){++d;} //should always be true: d != d + 1
    cout << d;
    return 0;
}

你可能会期望它无限运行,但是这会立即返回并在我的平台上打印4.5E15,很可能也会在你的平台上打印。