在64位架构上不能使用Python中的128位浮点数

Mat*_*ias 10 python numpy 128-bit

我通过我的python终端(在Enthought Canopy IDE中)检查了指针的大小

import ctypes
print (ctypes.sizeof(ctypes.c_voidp) * 8)
Run Code Online (Sandbox Code Playgroud)

我有一个64位的架构,并且工作numpy.float64得很好.但我不能用np.float128

np.array([1,1,1],dtype=np.float128)
Run Code Online (Sandbox Code Playgroud)

要么

np.float128(1)
Run Code Online (Sandbox Code Playgroud)

结果是:

AttributeError: 'module' object has no attribute 'float128'
Run Code Online (Sandbox Code Playgroud)

我正在运行以下版本:

sys.version_info(major=2, minor=7, micro=6, releaselevel='final', serial=0)
Run Code Online (Sandbox Code Playgroud)

sha*_*kde 5

更新:从评论来看,在 64 位系统上使用 128 位浮点数似乎毫无意义。

\n\n

anaconda我正在64 位 Ubuntu 14.04 系统上使用\nsys.version_info(major=2, minor=7, micro=9, releaselevel=\'final\', serial=0)

\n\n

128 位浮点数工作正常:

\n\n
import numpy\na = numpy.float128(3)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这可能是一个分配问题。尝试:

\n\n\n\n

编辑:\n从评论中更新:

\n\n
\n

不是我的反对票,但这篇文章并没有真正回答“为什么我的机器上不存在 np.float128”隐含的问题。真正的答案是\n这是特定于平台的:float128存在于某些平台上,但\n不存在于其他平台上,而在它确实存在的平台上,它几乎\n肯定只是80位x87扩展精度类型,已填充到 128\n 位。\xe2\x80\x93 马克·狄金森

\n
\n

  • 几乎可以肯定这不是 128 位浮点数,至少不是 IEEE 754 二进制 128 格式意义上的浮点数。它是一个带有 48 位填充的 80 位浮点数。 (3认同)
  • 尝试执行“numpy.float128(1) + numpy.float128(2**-64) - numpy.float128(1)”。我怀疑您会得到“0.0”的答案,表明“float128”类型包含的精度不超过 64 位。 (3认同)
  • @CharlieParker:不是我的反对票,但这篇文章并没有真正回答“为什么我的机器上不存在 np.float128”隐含的问题。真正的答案是,这是特定于平台的:`float128`存在于某些平台上,但不存在于其他平台上,并且在它确实存在的平台上,它几乎肯定只是 80 位 x87 扩展精度类型,填充到 128 位。 (3认同)
  • @CharlieParker:因为浮点意味着浮点(二进制)!移动点的能力允许在很宽的范围内表示值,但不会神奇地提供额外的精度。请参阅任何[许多](https://docs.python.org/3/tutorial/floatingpoint.html)[floating-point](http://floating-point-gui.de)指南以获取更多信息。这些评论并不是真正适合讨论的地方...... (3认同)