2017-10-05 33 views
0

我正在使用numpypython 2.7下,并且想到使用以代表像2e315这样的大数字。然而它被认为是inf,尽管它小于允许的最大表示,接近1e4932。为什么数字低于numpy中float128的最大值被视为inf?

In [1]: import numpy as np 
In [2]: np.finfo(np.float128) 
Out[2]: finfo(resolution=1e-18, min=-1.18973149536e+4932, max=1.18973149536e+4932, dtype=float128) 
In [3]: np.float128(2E315) 
Out[3]: inf 

前面的例子在pythonanywhere.com测试与python 2.7numpy 1.8.1其具有以下特性:

$ uname -a 
Linux harry-liveconsole4 4.4.0-83-generiC#106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 

我还测试了上面的例子在我的本地64位的机器,但遇到错误AttributeError: 'module' object has no attribute 'float128'和我有numpy 1.8.0那里。

我错过了什么?我应该有什么架构才能在python下有? 有没有一种解决方法来代表这样的大数字,而不是inf,但是让我们输入它们呢?

回答

2

这是因为2E315获取的评估之前它被传递给和2E315评估浮(“INF”):

>>> 2E315 
inf 

到那时为时已晚。值得庆幸的是,构造函数接受一个字符串:

>>> import numpy as np 
>>> np.float128('2e315') 
2e+315 
>>> 

所以,只是为了告诉你它的工作原理:

>>> x = np.float128('2e315') 
>>> x 
2e+315 
>>> x // np.float128('1e312') 
2000.0 

这也为我工作在Python的2:

>>> import sys, numpy 
>>> numpy.__version__ 
'1.11.3' 
>>> sys.version_info 
sys.version_info(major=2, minor=7, micro=13, releaselevel='final', serial=0) 
>>> numpy.float128('2e315') 
2e+315 
>>> numpy.float128('2e315')/numpy.float128('1e312') 
2000.0000000000000001 
+0

您测试此在'python 2.7'下?因为我得到不同的结果。对于'np.float128('2e315')'我仍然得到'inf'结果。 –

+0

也是我的numpy版本是''1.8.1'' –

+0

@CedricZoppolo是的,这对Python2 –

相关问题