2016-04-08 11 views
5

Come ottenere un doppio letterale Python lungo? Ho provato conCome ottenere un doppio letterale Python lungo?

numpy.longdouble(1e309) 

e

numpy.longdouble("1e309") 

ma entrambi solo tornare inf. Quale sarebbe il modo giusto per farlo?

[EDIT] Una risposta sotto dice che il doppio lungo è considerato doppio in alcune piattaforme. Non è il caso sul mio sistema. Per dimostrarlo, ho provato:

np.longdouble(2.0)**1029 

sul mio sistema (Mac OS 10.11). Esso restituisce

5.7526180315594109047e+309 

[EDIT2] Come suggerito, ho appena provato

np.finfo(np.longdouble) 

che dà

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

sul mio sistema operativo. Per informazioni, la mia versione numpy è 1.10.1.

+0

Sembra che sia un po 'duplicato di questo thread: http://stackoverflow.com/questions/18536820/numpy-longdouble-arithmetic-does-not-seem-to-be-in-long-double-with-conversion –

+0

Cosa La versione NumPy sei? Sembra che questo [potrebbe essere stato risolto] (https://github.com/numpy/numpy/issues/4381) il 28 agosto 2015, quindi l'ultima versione di NumPy dovrebbe avere la correzione. Non ho accesso a un'installazione 1.10 da verificare al momento. – user2357112

+0

@ user2357112 versione numpy 1.10.1. – zell

risposta

1

Su alcune piattaforme long double è essenziale come double. Da numpy documentation:

NPY_LONGDOUBLE

Il valore di enumerazione per un flottante punto specifico della piattaforma che è almeno grande quanto NPY_DOUBLE, ma più grande sulla molte piattaforme.

A volte il doppio lungo è un float a 80 bit (ma non a 128 bit, come molti si aspetterebbero). Si può verificare con:

numpy.finfo(numpy.longdouble) 

Considerate le seguenti risposte così:

  1. https://stackoverflow.com/a/25481654/2370124
  2. https://stackoverflow.com/a/18537604/2370124

Si può anche provare questo:

n = numpy.longdouble(1e300) * 1e9 
+0

Il problema [si presenta ancora] (http://ideone.com/tY5wJn) anche se 'numpy.longdouble' è davvero una precisione estesa, comunque. – user2357112

+0

Grazie per il vostro aiuto. Il problema rimane irrisolto, tuttavia. – zell

+0

Perché non usare solo numpy.long double (10,0) ** 309? –