2017-10-05 95 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 –

相關問題