2015-04-23 32 views
6

我通過不能在64位架構在Python中使用128位浮點

import ctypes 
print (ctypes.sizeof(ctypes.c_voidp) * 8) 

我有一個64位架構,並與numpy.float64工作就是檢查指針的大小在我的Python終端(在Enthought冠IDE) 精細。但我不能使用?

np.array([1,1,1],dtype=np.float128) 

np.float128(1) 

結果:

AttributeError: 'module' object has no attribute 'float128' 

我運行以下版本:

sys.version_info(major=2, minor=7, micro=6, releaselevel='final', serial=0) 
+1

你可以添加完整的命令,讓你這個錯誤?我嘗試在我的電腦上使用np.float128,並且它工作正常 – CoMartel

+1

@Matthias:除非您有非常不尋常的平臺(例如IBM大型機),否則NumPy幾乎肯定不會讓您訪問真正的128位浮點數。在某些平臺上,NumPy支持1985版IEEE 754標準中定義的x87 80位浮點格式,在某些平臺上,該格式報告爲「float128」(而在其他平臺上則報告爲'float96')。但是所有這一切都是因爲你有一個80位格式的48位(或16位)填充。 –

+0

@PadraicCunningham'np.longdouble'導致'np.float64' – Matthias

回答

0

更新:從評論,似乎毫無意義的甚至在64位系統上有128位浮點數。

我是一個64位的Ubuntu 14.04系統上使用anacondasys.version_info(major=2, minor=7, micro=9, releaselevel='final', serial=0)

和128位浮點做工精細:

import numpy 
a = numpy.float128(3) 

這可能是一個分配問題。嘗試:

編輯:從意見 更新:

不是我的失望,但這篇文章並沒有真正回答「爲什麼d沒有 np.float128存在於我的機器上「隱含的問題。真正的答案是 ,這是平臺特定的:在某些平臺上存在float128,但在其他平臺上存在,但在其他平臺上存在它幾乎爲 ,肯定只是80位x87擴展精度類型,填充爲128 位。 - 馬克迪金森

+1

這幾乎可以肯定*不是128位浮點數,至少不是IEEE 754 binary128格式。這是一個具有48位填充的80位浮點數。 –

+0

參考顛簸用戶手冊 - 在某些平臺上,它會很高興地讓你聲明一個浮點數256.其內部實現需要檢查 – shaunakde

+2

嘗試做'numpy.float128(1)+ numpy.float128(2 ** - 64) - numpy.float128(1)'。我懷疑你會得到'0.0'的答案,表明'float128'類型包含不超過64位的精度。 –