(网络上的大多数其他相关问题都涉及 C 的 longdouble 和 python 之间的转换。这个问题是不同的。)
我不明白为什么我不能像这样在 python 中正确获得 longdouble:
In [72]: import numpy as np
In [73]: np.longdouble(1e3000)
Out[73]: inf
看来我需要让我的 python 控制台知道 1e3000 是 longdouble 而不是 double。我怎样才能做到这一点
(网络上的大多数其他相关问题都涉及 C 的 longdouble 和 python 之间的转换。这个问题是不同的。)
我不明白为什么我不能像这样在 python 中正确获得 longdouble:
In [72]: import numpy as np
In [73]: np.longdouble(1e3000)
Out[73]: inf
看来我需要让我的 python 控制台知道 1e3000 是 longdouble 而不是 double。我怎样才能做到这一点
问题在于,通过使用类似 的表达式...(1e3000)
,Python 解析器必须首先计算括号内的内容,然后将结果传递给函数调用。Long double 不是本机类型,因此,括号内的值是inf
- 传递给 longdouble 构造函数。字符串版本失败的事实可能被认为是 NumPy 中的错误 - 它表明字符串在内部转换为 Python 浮点数(在 C 中是“float64”或“double”),可能使用普通的 Python 浮点构造函数。
解决方法是首先构建 long double 对象,其值与 Python 浮点数兼容,然后将其相乘以获得所需的值。如果您需要对多个值执行此操作,请使用 NumPy 数组而不是单个值:
>>> x = np.longdouble(10)
>>> x
10.0
>>> x **= 3000
>>> x
9.9999999999999999999e+2999
Python没有“长双打”。通过使用科学记数法,您正在制作一个浮点文字。那些不能代表 1e3000,所以你得到 inf。如果你使用整数,你也许可以做你需要的:10**3000。