Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取Python长双字面值?_Python_Numpy_Long Double - Fatal编程技术网

如何获取Python长双字面值?

如何获取Python长双字面值?,python,numpy,long-double,Python,Numpy,Long Double,如何获取Python长双字面值?我试过了 numpy.longdouble(1e309) 及 但它们都只返回inf。正确的方法是什么 [EDIT]下面的答案是,在某些平台中,长双精度被视为双精度。我的系统不是这样的。为了证明这一点,我尝试了: np.longdouble(2.0)**1029 在我的系统上(Mac OS 10.11)。它回来了 5.7526180315594109047e+309 [EDIT2]正如建议的那样,我只是尝试了一下 np.finfo(np.longdouble

如何获取Python长双字面值?我试过了

numpy.longdouble(1e309)

但它们都只返回
inf
。正确的方法是什么

[EDIT]下面的答案是,在某些平台中,长双精度被视为双精度。我的系统不是这样的。为了证明这一点,我尝试了:

np.longdouble(2.0)**1029
在我的系统上(Mac OS 10.11)。它回来了

5.7526180315594109047e+309
[EDIT2]正如建议的那样,我只是尝试了一下

 np.finfo(np.longdouble)

 finfo(resolution=1e-18, 
       min=-1.18973149536e+4932, 
       max=1.18973149536e+4932, 
       dtype=float128)

在我的操作系统上。请注意,我的numpy版本是1.10.1。

在某些平台上,
长双精度
双精度
基本相同。发件人:

NPY_Longdoull

特定于平台的浮点数的枚举值 点类型,至少与NPY_DOUBLE一样大,但在 许多平台

有时长双精度浮点值是80位浮点值(但不是很多人所期望的128位浮点值)。 你可向以下机构查询:

numpy.finfo(numpy.longdouble)
请考虑以下答案:

  • 您也可以尝试以下方法:

    n = numpy.longdouble(1e300) * 1e9
    
    版本2现在可以使用(numpy 1.19.1,机器:x86-64):

    >np.longdouble('1e309')
    1e+309
    
    另一个没有

    >np.longdouble(1e309)
    inf
    
    这不起作用,因为1e309首先由python解释器解释,它将其转换为64位浮点数(因为它不知道更好的数字),然后发送给numpy。您必须以字符串文字的形式为numpy提供数字,以便它有机会处理数字本身


    ^x86-64基本上是指运行Windows、MacOS或Linux的任何个人计算机。我相信它应该适用于所有这些设备,因为据我所知,x86-64都有x87浮点单元,本机支持80位浮点。

    即使是
    numpy.longdouble
    的问题实际上是扩展精度。不过,感谢您的帮助。然而,这个问题仍然没有解决。为什么不直接使用numpy.longdouble(10.0)**309?当我检查
    numpy.finfo(numpy.longdouble)
    时,我如何从结果中判断我是使用80位还是128位浮点?似乎它与此线程有些重复:您使用的是哪个numpy版本?看起来是2015年8月28日,所以最新版本的NumPy应该有修复程序。我目前没有访问1.10安装的权限进行检查。@user2357112numpyversion1.10.1。
    n = numpy.longdouble(1e300) * 1e9