2015-04-23 34 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位的精度。 –