Python 数学模块对数函数

pyl*_*ver 5 python math ieee-754

可能的重复:
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
Run Code Online (Sandbox Code Playgroud)

Bdl*_*oul 5

这是一个已知的错误:http : //bugs.python.org/issue3724

似乎 logX(y) 总是比等效的 log(Y, X) 更精确。


Hui*_*eng 4

math.log10math.log(x, 10)使用不同的算法,前者通常更准确。实际上,这是一个已知问题(Issue6765):math.log, log10 inconsistency

人们可能会这样想:log10(x)有一个固定的基数,因此可以通过一些数学近似公式(例如泰勒级数)直接计算出来,而log(x, 10)来自一个具有两个变量的更一般的公式,可以通过log(x) / log(10)(至少log(10) 的精度会影响商的精度)。因此,很自然地,前一种方法更快、更准确,考虑到它利用了预先已知的对数底(即 10),这是合理的。