这个问题在这里已有答案:
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
我错过了什么或它的一些错误?
实际答案大约是72.0000000000000000000003。
绝对误差小于该范围内的浮点误差,你得到了最接近floating point approximation的log2(72)
,计算机可以存储64位浮点数。
如果要检查整数是否精确为2,那么可以检查它的最左边是否为1。
if 1 << (x.bit_length() - 1) == x:
print("x is a power of 2")
你错过了math.log
给你IEEE floating point最多52位精度。
您的答案在表示范围内是正确的。