为什么IEEE-754浮点数不能在平台之间交换?

已经断言 (甚至考虑字节字节序)IEEE754浮点并不保证在平台之间可以交换。

所以:

  • 理论上,为什么IEEE浮点不能在平台之间交换?
  • 这些问题是否适用于现代硬件平台(例如i686,x64,arm)?

如果问题是有效的,你能否请举例说明这种情况(首选C或C ++)?


动机:一些GPS 制造商在“符合IEEE-754标准的浮点值”中交换(例如)纬度,经度和原始数据的二进制格式。 因此,我无法控制选择文本格式或其他“便携式”格式。 因此,我的问题是,差异可能会或可能不会发生。

IEEE 754第3.4条规定了二进制交换格式编码。 给定浮点格式(下面),交换格式将符号位置于最高有效位中,将下一个最高有效位中的偏置指数位置位,并将有效位编码置于最低有效位中。 未指定从位到字节的映射,因此系统可以使用little-endian,big-endian或其他排序。

第3.6节规定了各种格式宽度的格式参数,包括64位二进制,其中有一个符号位,11个指数字段位和52个有效位字段位。 该子句还规定了指数偏差。

第3.3和3.4条规定了该格式所代表的数据。

因此,为了交换IEEE-754浮点数据,似乎系统只需要就两件事达成一致:使用哪种格式(例如,64位二进制)以及如何来回获取位(例如,如何映射)用于写入文件或网络消息的位到字节。