2

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

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

In [72]: import numpy as np

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

看来我需要让我的 python 控制台知道 1e3000 是 longdouble 而不是 double。我怎样才能做到这一点

4

2 回答 2

6

问题在于,通过使用类似 的表达式...(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
于 2015-05-24T02:58:15.763 回答
1

Python没有“长双打”。通过使用科学记数法,您正在制作一个浮点文字。那些不能代表 1e3000,所以你得到 inf。如果你使用整数,你也许可以做你需要的:10**3000。

于 2015-05-24T02:43:28.397 回答