为啥numpy的float128只有63位尾数? [复制]
Posted
技术标签:
【中文标题】为啥numpy的float128只有63位尾数? [复制]【英文标题】: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 是的,阅读文档确实有帮助...愿意回答吗? 另见以前的答案***.com/a/17023995/175320。你不是第一个对此感到困惑的人。 【参考方案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总是除了次正规数)。以上是关于为啥numpy的float128只有63位尾数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章