2016-04-08 29 views
5

如何獲得Python長雙字面值?我曾嘗試與如何獲得Python長雙字面值?

numpy.longdouble(1e309) 

numpy.longdouble("1e309") 

但他們兩人只是返回inf。什麼是正確的方式來做到這一點?

[編輯]下面的答案表示long double在某些平臺中被視爲double。我的系統並非如此。爲了表明這一點,我嘗試過:

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) 
我的OS

。有關信息,我的numpy版本是1.10.1。

+0

似乎它有點重複此線程:http://stackoverflow.com/questions/18536820/numpy-longdouble-arithmetic-does-not-seem-to-be-in-long-double-with-conversion –

+0

什麼NumPy版本你在嗎?它看起來像2015年8月28日這個[可能已經修復](https://github.com/numpy/numpy/issues/4381),所以最新版本的NumPy應該有修復。我目前無法訪問1.10安裝程序進行檢查。 – user2357112

+0

@ user2357112 numpy版本1.10.1。 – zell

回答

1

在某些平臺上long doubledouble一樣重要。從numpy documentation

NPY_LONGDOUBLE

爲特定平臺浮動 點類型,是至少作爲NPY_DOUBLE一樣大的枚舉值,但在 許多平臺大。

有時long double是80位浮點數(但不是128位,正如許多人所期望的那樣)。 您可以檢查:

numpy.finfo(numpy.longdouble) 

考慮下面的答案,以及:

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

你也可以試試這個:

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

即使'numpy.longdouble'確實是擴展精度,問題仍然存在(http://ideone.com/tY5wJn)。 – user2357112

+0

感謝您的幫助。但問題仍未解決。 – zell

+0

爲什麼不只是使用numpy。longdouble(10.0)**309? –