python - math.log 的错误输出
问题描述
我正在尝试计算最接近的 2^n 到一个非常大的数字(<=10^19)
我曾尝试使用 math.log(number,2)。但这对于非常大的数字给出了错误的结果。我应该如何在不使用其他库的情况下做到这一点?
a = 9843649374639837463 # a is any num between 1 and 10^9
number = int(math.log(a,2))
解决方案
大整数输入被转换为精度有限的浮点数,因此丢失了一些输入精度。此外,math.log2()可能比math.log()更准确,因为它针对基数 2 进行了微调。
有一个int方法将是准确的,bit_length():
>>> a = 9843649374639837463
>>> a.bit_length()
64
>>> bin(a)
'0b1000100010011011101010101111001111001100111001110101000100010111'
请注意,浮点日志非常接近但不准确:
>>> a = 9843649374639837463
>>> 2.0 ** math.log2(a)
9.843649374639845e+18
>>> abs(a - 2.0 ** math.log2(a))
8192.0
推荐阅读
- sql - 我的 Group BY 语句 00904.00000 - "%s: invalid identifier" 中出现以下错误,我该如何解决?
- java - 弹簧执行器/健康对 JSON 的 XML 响应
- azure - 使用 Powershell 修改 Azure 路由表
- python - 编写一个函数,打印日照 >= 6 小时的天数
- c# - 如何将字符串类名作为类传递或处理
- python - 使用 unstack() 时将数据帧值应用于数据帧
- python - 如何使用 forloop 生成相同的字符串?
- c# - 如何公开公开控件的属性?
- javascript - React Native 中的 Ref 值始终未定义
- linux - 查找:从脚本文件运行时缺少“-exec”的参数