5

重複の可能性:
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
4

3 に答える 3

5

これは既知のバグです: http://bugs.python.org/issue3724

logX(y) は、同等の log(Y, X) よりも常に正確であるようです。

于 2013-01-29T07:03:09.570 に答える
4

math.log10math.log(x, 10)は異なるアルゴリズムを使用しており、通常は前者の方が正確です。実際には、既知の問題 (Issue6765): math.log, log10 inconsistencyです。

次のように考えることができます:log10(x)固定ベースを持っているため、いくつかの数学的近似式 (テイラー級数など) によって直接計算できますがlog(x, 10)log(x) / log(10)(少なくともlog(10) の精度は商の精度に影響します)。したがって、前者の方法の方が高速で正確であることは当然であり、既知の対数底 (つまり 10) を利用することを考えると妥当です。

于 2013-01-29T07:05:01.990 に答える
2

他の人が指摘しているように、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]: False

どちらの結果もlog(1000)としてlog(10)表すことができないfloatため、最終結果も不正確です。

于 2013-01-29T07:56:53.710 に答える