长双倍
我知道各种数据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)