来自math.log(Python 3)的错误答案

时间:2019-03-18 13:24:03

标签: python math

今天,我使用math.log()函数将4913的对数设为给定的底数17。答案是3,但是当我运行下面的代码时,我得到了2.9999999999999996。

1)是因为math.log(x, b)的计算是log(x) / log(b)吗?

2)是否有解决方案来获得正确答案3?

import math
print(math.log(4913,17))

2 个答案:

答案 0 :(得分:3)

您可以使用gmpy2库:

import gmpy2

print(gmpy2.iroot(4913, 3))
# (mpz(17), True)

print(gmpy2.iroot(4913 + 1, 3))
# (mpz(17), False)

它告诉您结果以及结果是否正确。

还可以查看Log precision in pythonIs floating point math broken?

答案 1 :(得分:2)

  1. 是的,https://docs.microsoft.com/en-us/powershell/module/storage/format-volume?view=win10-ps如此明确地说。
  2. 另一种解决方案是使用“十进制”库中的Decimal类:

    import math
    from decimal import Decimal, getcontext
    getcontext().prec = 6
    Decimal(math.log(4913))/Decimal(math.log(17))