Math.log的错误答案(Python 3)



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

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

2)是否有任何解决方案可以获取正确的答案3?

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

您可以使用gmpy2库:

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

告诉您结果以及是否准确。

还可以查看python中的日志精度,并且浮点数学损坏了吗?

  1. 是的,文档很明确地说。
  2. 另一个解决方案是从"十进制"库中使用小数类:

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

最新更新