可能重复: Python中的不准确对数
为什么math.log10(x)和math.log(x,10)的结果不同?
In [1]: from math import *
In [2]: log10(1000)
Out[2]: 3.0
In [3]: log(1000,10)
Out[3]: 2.9999999999999996发布于 2013-01-29 07:05:01
math.log10和math.log(x, 10)采用不同的算法,前者通常更精确。实际上,这是一个已知的问题(Issue6765):math.log,log10不一致。
可以这样认为:log10(x)有一个固定的基,因此它可以直接用一些数学近似公式(例如Taylor级数)来计算,而log(x, 10)则来自一个更一般的双变量公式,该公式可以由log(x) / log(10)间接计算(至少log(10)的精度会影响商的精度)。因此,前一种方法更快、更准确,这是很自然的,考虑到它利用了已知的对数基数(即10),这是合理的。
发布于 2013-01-29 07:03:09
这是一个已知的bug:http://bugs.python.org/issue3724
似乎logX(y)总是比等价的日志(Y,X)更精确。
发布于 2013-01-29 07:56:53
正如其他人所指出的,log(1000, 10)是在内部作为log(1000) / log(10)计算的。这一点可以从经验上加以证实:
In [3]: math.log(1000, 10) == math.log(1000) / math.log(10)
Out[3]: True
In [4]: math.log10(1000) == math.log(1000) / math.log(10)
Out[4]: Falselog(1000)和log(10)的结果都不能表示为float,因此最终的结果也是不准确的。
https://stackoverflow.com/questions/14577310
复制相似问题