今天,我使用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))
答案 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 python和Is floating point math broken?。
答案 1 :(得分:2)
另一种解决方案是使用“十进制”库中的Decimal类:
import math
from decimal import Decimal, getcontext
getcontext().prec = 6
Decimal(math.log(4913))/Decimal(math.log(17))