除了 IEEE754 之外,还有其他常用的浮点格式吗?
Are there any commonly used floating point formats besides IEEE754?
我正在编写一个编组层来自动转换不同域之间的值。当谈到浮点值时,这可能意味着将值从一种浮点格式转换为另一种格式。然而,似乎几乎每个现代系统都在使用 IEEE754,所以我想知道是否真的值得推广以允许其他格式,或者只是管理不同 IEEE754 格式之间的编组。
有谁知道我应该考虑的除 IEEE754 之外的任何常用浮点格式(可能在 ARM 处理器或大型机上)?如果是这样,参考格式规范将非常有帮助。
几乎所有相对现代(过去 15 年内)的通用计算机都使用 IEEE 754。在极少数情况下,您发现需要支持的系统使用非 IEEE 754 浮点格式,那么可能是一个可用于转换 to/from IEEE 754.
的库
Cray SV1 (1998-2003) 和第 5 代(2002 年结束)之前的 IBM System 360、370 和 390 是一些本身不使用 IEEE 754 的非古老系统。 IBM 在 2001 年左右在之前 S/390 硬件的软件版本中实施了 IEEE 754 emulation。
截至目前,您实际希望它在哪些系统上运行?如果您遇到一个不使用 IEEE754 的行(正如@JohnZwinick 所说,这几乎不可能),那么您应该能够为此编写代码。
换句话说,您在这里设计的实际上是一个 通信协议 并且您显然试图对如何表示浮动做出明智的选择在域之间传输的字节中的点数(我猜是单精度和双精度)。
我认为@SomeProgrammerDude 试图暗示将它们表示为文本字符串(当它们在传输过程中)可能提供最大的可移植性,如果是这样我会同意,但这显然不是最有效的方法.
因此,如果您决定将 IEEE754 用作交换格式(就像我一样),那么可能发生的最坏情况是您可能需要找到一种方法将这些格式与 IEEE754 上使用的本机格式相互转换一些你几乎肯定永远不会遇到的古董建筑,如果真的遇到了,那就是问题 would not be not difficult to solve.
此外,浮点数和双精度数可以是大端或小端,因此您需要决定要在字节流中使用什么,并在必要时在编组时进行转换。 Little-endian 现在更常见了,所以我同意了。
Does anyone know of any commonly used floating point formats other than IEEE754 that I should consider ...?
it seems that almost every modern system is using IEEE754,
- 是的,但是......各种实现都在使用 subnormals, negative zero in visual studio, infinity and not-a-number 等边缘值的细节上捏造。
第二个问题更致命,也更难辨别给定的实现完全编码的 IEEE754。参见 __STDC_IEC_559__
OP 有 "I am writing a marshaling layer"。正是在这种编码中,边缘情况可能存在问题。此外,IEEE754 未指定 endian,因此编组问题仍然存在。召回整数端可能不匹配 FP endian.
我正在编写一个编组层来自动转换不同域之间的值。当谈到浮点值时,这可能意味着将值从一种浮点格式转换为另一种格式。然而,似乎几乎每个现代系统都在使用 IEEE754,所以我想知道是否真的值得推广以允许其他格式,或者只是管理不同 IEEE754 格式之间的编组。
有谁知道我应该考虑的除 IEEE754 之外的任何常用浮点格式(可能在 ARM 处理器或大型机上)?如果是这样,参考格式规范将非常有帮助。
几乎所有相对现代(过去 15 年内)的通用计算机都使用 IEEE 754。在极少数情况下,您发现需要支持的系统使用非 IEEE 754 浮点格式,那么可能是一个可用于转换 to/from IEEE 754.
的库Cray SV1 (1998-2003) 和第 5 代(2002 年结束)之前的 IBM System 360、370 和 390 是一些本身不使用 IEEE 754 的非古老系统。 IBM 在 2001 年左右在之前 S/390 硬件的软件版本中实施了 IEEE 754 emulation。
截至目前,您实际希望它在哪些系统上运行?如果您遇到一个不使用 IEEE754 的行(正如@JohnZwinick 所说,这几乎不可能),那么您应该能够为此编写代码。
换句话说,您在这里设计的实际上是一个 通信协议 并且您显然试图对如何表示浮动做出明智的选择在域之间传输的字节中的点数(我猜是单精度和双精度)。
我认为@SomeProgrammerDude 试图暗示将它们表示为文本字符串(当它们在传输过程中)可能提供最大的可移植性,如果是这样我会同意,但这显然不是最有效的方法.
因此,如果您决定将 IEEE754 用作交换格式(就像我一样),那么可能发生的最坏情况是您可能需要找到一种方法将这些格式与 IEEE754 上使用的本机格式相互转换一些你几乎肯定永远不会遇到的古董建筑,如果真的遇到了,那就是问题 would not be not difficult to solve.
此外,浮点数和双精度数可以是大端或小端,因此您需要决定要在字节流中使用什么,并在必要时在编组时进行转换。 Little-endian 现在更常见了,所以我同意了。
Does anyone know of any commonly used floating point formats other than IEEE754 that I should consider ...?
it seems that almost every modern system is using IEEE754,
- 是的,但是......各种实现都在使用 subnormals, negative zero in visual studio, infinity and not-a-number 等边缘值的细节上捏造。
第二个问题更致命,也更难辨别给定的实现完全编码的 IEEE754。参见 __STDC_IEC_559__
OP 有 "I am writing a marshaling layer"。正是在这种编码中,边缘情况可能存在问题。此外,IEEE754 未指定 endian,因此编组问题仍然存在。召回整数端可能不匹配 FP endian.