今天,我使用 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中的日志精度,并且浮点数学损坏了吗?
- 是的,文档很明确地说。
-
另一个解决方案是从"十进制"库中使用小数类:
import math from decimal import Decimal, getcontext getcontext().prec = 6 Decimal(math.log(4913))/Decimal(math.log(17))