浮点格式会受big-endian和little endian的影响吗?

Tho*_*son 13 c c++ floating-accuracy

我知道big-endian机器和little-endian机器之间的整数格式会有所不同,浮点格式(IEEE 754)是否相同?

650*_*502 15

浮点数的IEEE754规范根本不包括字节序问题.因此,浮点数可以在不同的机器上使用不同的表示,并且理论上,甚至可能对于两个处理器,整数字节序是相同的并且浮点不同,反之亦然.

有关更多信息,请参阅此维基百科文章.


Ton*_*roy 5

如果你有一个 Linux 机器,你可能会有 /usr/include/ieee754.h...(注意#ifs)

...
union ieee754_float
  {
    float f;

    /* This is the IEEE 754 single-precision format.  */
    struct
      {
#if     __BYTE_ORDER == __BIG_ENDIAN
        unsigned int negative:1;
        unsigned int exponent:8;
        unsigned int mantissa:23;
#endif                          /* Big endian.  */
#if     __BYTE_ORDER == __LITTLE_ENDIAN
        unsigned int mantissa:23;
        unsigned int exponent:8;
        unsigned int negative:1;
#endif                          /* Little endian.  */
      } ieee;
  ...
Run Code Online (Sandbox Code Playgroud)

  • 标准没有指定位顺序、字节序和位字段对齐方式,因此编译器切换实际上没有做任何有用的事情。使用此代码,您仅涉及除字节顺序和浮点实现之外的第三个特定于系统的因素,即位字段的特定于编译器的实现。此外,编译器可以向位字段以及联合添加任意数量的填充字节。 (5认同)
  • @Lundin:讨论是关于字节序是否影响实数的内存布局......显示一个已编写的标头示例以根据字节序显式更改字段排序有何不相关?这不是关于该示例的普遍性的问题,关键是*任何*此类标头在至少一个大端和一个小端系统上工作都证明这些格式是端序敏感的...... (2认同)