2017-10-05 3 views
0

Ich benutze numpy unter python 2.7 und dachte daran, zu verwenden, um eine große Zahl wie 2e315 darzustellen. Es wird jedoch als inf behandelt, obwohl es kleiner ist als die maximal zulässige Darstellung, die nahe bei 1e4932 liegt.Warum Nummer unter Maximum für float128 in numpy wird als inf behandelt?

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 

Im vorherigen Beispiel wurde bei pythonanywhere.com mit python 2.7 und numpy 1.8.1 getestet, den folgenden Eigenschaften:

$ 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 

ich auch das obige Beispiel unter meiner lokalen 64-Bit-Maschine getestet, aber erhielt Fehler AttributeError: 'module' object has no attribute 'float128' und ich habe numpy 1.8.0 dort.

Was fehlt mir? Welche Architektur sollte ich haben, um unter Python zu haben? Gibt es einen Workaround, um so große Zahlen nicht als inf darzustellen, sondern sie so zu belassen, wie ich sie eingabe?

Antwort

2

Das ist, weil 2E315 gets bewertet vor es geben wird und 2E315 wertet zu schweben (‚inf‘):

>>> 2E315 
inf 

Bis dahin ist es zu spät ist. Glücklicherweise übernimmt der Konstruktor einen String:

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

Also, nur um Ihnen zu zeigen, funktioniert es:

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

Dies gilt auch für mich auf Python arbeitet 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

testen Sie diese unter 'Python 2.7'? Weil ich unterschiedliche Ergebnisse bekomme. Für 'np.float128 ('2e315')' Ich erhalte immer noch 'inf' als Ergebnis. –

+0

Auch meine numpy Version ist ''1.8.1'' –

+0

@ CedricZoppolo ja, das funktioniert für mich auf Python2 –

Verwandte Themen