长双倍

我知道各种数据types的大小可以根据我所在的系统而改变。 我使用XP 32位,并在C ++中使用sizeof()运算符,似乎long double是12个字节,double是8。

但是,大多数主要来源指出,long double是8个字节,因此范围与double相同。

我怎么有12个字节? 如果long double确实是12个字节,那么这个扩展的范围也不是? 或者,只有当长度超过了double的范围时才使用长签名(编译器数字),因此超出了8个字节?

谢谢。

引用维基百科 :

在x86体系结构上,大多数编译器都实现了long double,因为该硬件支持的80位扩展精度types(有时以12或16字节存储以维护数据结构。

编译器也可以使用长双精度来实现128位四精度格式,目前这个格式是用软件实现的。

换句话说,是的,一个long double 可能能够存储比double更大的数值范围。 但完全取决于编译器。

数字的标准字节大小是所有平台上保证的最小大小。 在某些系统上它们可能更大,但它们永远不会变小。

至于我的编程新手体验提示:

  • 使用周期性的标准化浮点数[-1.0,+ 1.0]

  • 分别用double或long double保持标准化值

  • 归一化引入噪声=小误差=高频率variables值

  • 不时地用中值保持归一化并保持数据分类是有用的(原始数据顺序可以保存为置换vector)