Math.log大数字的错误结果[重复]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

math.log2math.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

我错过了什么或它的一些错误?

python-3.x algorithm math
2个回答
0
投票

实际答案大约是72.0000000000000000000003。

绝对误差小于该范围内的浮点误差,你得到了最接近floating point approximationlog2(72),计算机可以存储64位浮点数。

如果要检查整数是否精确为2,那么可以检查它的最左边是否为1。

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

0
投票

你错过了math.log给你IEEE floating point最多52位精度。

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

© www.soinside.com 2019 - 2024. All rights reserved.