【问题标题】:Why does numpy's float128 only have 63 bits mantissa? [duplicate]为什么numpy的float128只有63位尾数? [复制]
【发布时间】:2019-03-11 06:52:24
【问题描述】:

我确定这是一个愚蠢的问题,但我真的很困惑:

>>> import numpy as np
>>> 
>>> f1, f2, f64 = map(np.float128, (1, 2, -64))
>>> f1 + f2**f64 == f1
True

或者更直接:

>>> np.finfo(np.float128).nmant
63

指数似乎有 15 位,那么这些缺失的位在哪里?

【问题讨论】:

  • @juanpa.arrivillaga 这应该是我想说的答案。
  • @juanpa.arrivillaga 是的,阅读文档确实有帮助...愿意回答吗?
  • 另见以前的答案stackoverflow.com/a/17023995/175320。你不是第一个对此感到困惑的人。

标签: python numpy floating-point


【解决方案1】:

阅读the docs

np.longdouble 填充为系统默认值; np.float96 和 np.float128 是为需要特定填充的用户提供的。尽管 在名称中,np.float96 和 np.float128 仅提供同样多的名称 精度为 np.longdouble,即大多数 x86 机器上的 80 位和 标准 Windows 版本中的 64 位。

所以看起来它不会真正使用所有这些位。我想,如果我们在 x86 架构上假设 80 位(我也有),它不会考虑丢失的两位,15 + 63 = 78。

【讨论】:

  • 1 位用于符号,1 位可能用于尾数中最显着的 1(通常)(在“常规”IEEE754 binary32 和 binary64 类型中不存在,因为它隐含 1总是除了次正规数)。
猜你喜欢
  • 2019-04-30
  • 1970-01-01
  • 2016-04-12
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多