Python 3.x Math.log大数字的错误结果

Python 3.x Math.log大数字的错误结果,python-3.x,algorithm,math,Python 3.x,Algorithm,Math,math.log2和math.log对一些高数值给出了错误的结果,通过在线py解释器和本地机器进行了测试 >>>print(2**72) >>>4722366482869645213696 #Correct >>>math.log2(4722366482869645213697) >>>72.0 #Wrong >>>math.log(4722366482869645213697,2) >

math.log2
math.log
对一些高数值给出了错误的结果,通过在线py解释器和本地机器进行了测试

>>>print(2**72)  

>>>4722366482869645213696 #Correct

>>>math.log2(4722366482869645213697)

>>>72.0 #Wrong

>>>math.log(4722366482869645213697,2)

>>>72.0 #Wrong

>>>math.log2(39614081257132168796771975174)

>>>95.0 #Wrong

>>>print(2**95)

>>>39614081257132168796771975168 #Correct

我遗漏了什么还是它的一些错误?

您遗漏了
math.log
为您提供的最大精度为52位


您的答案在表述范围内是正确的。

实际答案约为72.00000000000000003

如果绝对误差小于该范围内的浮点误差,则得到计算机可以存储的最接近的64位浮点值

如果您想检查一个整数是否是2的精确幂,那么您可以检查是否只有它最左边的位是1

if 1 << (x.bit_length() - 1) == x:
    print("x is a power of 2")

如果1为什么72.0“错误”?你想要什么样的浮点数?嘿。72.0建议它与2**72相同,而不是,它应该返回类似于71.xxxxxxxx的值。你的问题是检查一个整数是否是2的幂。下次你提问时,包括你问题的背景以及你想解决的问题。同时,请看我的答案。以及如何将decimal与math.log一起使用?默认情况下,它返回一个浮点结果。您将找到该问题的答案。虽然,你真的需要这样的精度吗?我找不到任何适合我的例子的东西,我需要很好地告诉你,在这样高的数字上,数字是否是2的幂,所以我想我需要这样的精度。你的输入总是整数吗?对于整数,只需检查最左边的位是否为1。我在回答中加了这个,非常聪明,谢谢!