【问题标题】:Is there a way to compute accurately a float power to base 2 in Python? [duplicate]有没有办法在 Python 中准确计算以 2 为底的浮点幂? [复制]
【发布时间】:2021-01-06 17:16:07
【问题描述】:

我使用 log 来获得以 2 为底的一个非常大的数字,我希望能够通过反转函数 (2**x) 来检索该数字。然而 math.pow(2,x) 正在大幅截断答案。请注意,x 是 100000.00000001 范围内的一个非常大的幂。原号码必须全部找回。

【问题讨论】:

  • 您能否将此作为一个运行示例,但会失去准确性?
  • 100000.00000001 只是显示的估计值。全精度打印f"{100000.00000001:.53g}"100000.000000009997165761888027191162109375math.pow(2, 100000.00000001) 在我的机器上给出“溢出错误:数学范围错误”。
  • 在范围内,我的意思是沿着这些路线,而不是那个数字。
  • GMP(参见gmpy2)和mpmath 是高精度数学的几个选项。 Python 对浮点数使用本机双精度类型,看起来您的操作会溢出这些浮点数。这些其他库可以提供帮助。

标签: python logging base exponential


【解决方案1】:

math.pow 使用浮点运算。

2 提高一次幂相当于将1 左移那么多位,因此您可以使用<< 运算符。

x = 1000
result = 1 << x
print(result)

【讨论】:

  • 在这种情况下,您必须使用浮点数,而您会受到其局限性的困扰。
  • 您是否尝试过使用Decimal 库?
  • 不,我还没有。我拒绝接受这是不可能的。我的意思是我已经加载了大量的数据并且我计算了它的日志来获得能量,我只需要反转操作。就像你告诉我 4 + 1 = 5 但 5 - 1 是不可能的。我删除了评论,因为我在示例的整数部分添加了一些额外的数字。你能给我一个使用十进制库的例子吗?
  • 这是一个类比:假设您使用的是 8 位有符号整数。 127 + 1 不存在。浮点数也会发生同样的事情:它的精度有限,所以有些数字不存在。
  • 二进制浮点甚至不能准确地表示1/10。这就像用十进制表示1/31/7,它是一个重复的分数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
  • 1970-01-01
  • 2012-05-18
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多