Longdouble(1e3000) 变为 inf:我能做什么?

Longdouble(1e3000) becomes inf: What can I do?

(网络中的大多数其他相关问题都涉及 C 的 longdouble 和 python 之间的转换。这个问题是不同的。)

我不明白为什么我不能像这样在 python 中正确获得 longdouble:

In [72]: import numpy as np

In [73]: np.longdouble(1e3000)
Out[73]: inf

看来我需要让我的 python 控制台知道 1e3000 是 longdouble 而不是 double。我该怎么做

Python 没有 "long doubles"。通过使用科学记数法,您正在创建一个浮点数。那些不能代表 1e3000,所以你得到 inf。如果你使用整数,你也许可以做你需要的:10**3000.

问题在于,通过使用像 ...(1e3000) 这样的表达式,Python 解析器必须首先计算括号内的内容,并将结果传递给函数调用。 Long double 不是本机类型,因此,括号内的值为 inf - 传递给 longdouble 构造函数。字符串版本失败的事实可能被认为是 NumPy 中的错误 - 它表明字符串在内部被转换为 Python 浮点数(在 C 中是 "float64" 或 "double"),可能使用普通的 Python float 构造函数。

解决方法是首先构建 long double 对象,其值与 Python 浮点数兼容,然后将其相乘以获得所需的值。如果您需要使用多个值来执行此操作,请使用 NumPy 数组而不是单个值:

>>> x = np.longdouble(10)
>>> x
10.0
>>> x **= 3000
>>> x
9.9999999999999999999e+2999