繁体   English   中英

除IEEE754之外,是否还有其他常用的浮点格式?

[英]Are there any commonly used floating point formats besides IEEE754?

我正在编写一个封送处理层,以在不同域之间自动转换值。 当涉及浮点值时,这可能意味着将值从一种浮点格式转换为另一种。 但是,似乎几乎每个现代系统都在使用IEEE754,因此我想知道是否值得推广其他格式,或者仅管理不同IEEE754格式之间的封送处理。

有谁知道我应该考虑的除IEEE754之外的任何常用浮点格式(也许在ARM处理器或大型机上)? 如果是这样,则对格式规范的引用将非常有帮助。

几乎所有相对较新的(过去15年内)通用计算机都使用IEEE754。在极少数情况下,如果您发现需要支持的系统使用非IEEE 754浮点格式,则可能会有可用的库与IEEE 754相互转换。

第五代(2002年末)之前的一些非古老系统,其本机未使用IEEE 754,它们是Cray SV1(1998-2003)和IBM System 360、370和390。 IBM在2001年前后在用于先前S / 390硬件的软件版本中实现了IEEE 754仿真

截至目前,您实际上希望该系统在什么系统上运行? 如果碰到一个不使用IEEE754的线路(就像@JohnZwinick所说的那样,这种情况就几乎消失了),那么您应该能够对此进行编码。

换句话说,实际上,您在这里设计的是一种通信协议,并且您显然希望做出明智的选择,以表示如何在浮点数中表示浮点数(我想是单精度和双精度)。域之间传输的字节数。

我认为@SomeProgrammerDude试图暗示将它们表示为文本字符串(在传输过程中)可能会提供最大的可移植性,如果可以的话,我同意,但这显然不是最有效的方法。

因此,如果您确实决定像往常一样将IEEE754作为交换格式,那么可能发生的最坏情况是您可能需要找到一种方法,将它们转换为与您使用的某些老式体系结构所使用的本机格式之间的转换。几乎可以肯定,它们永远都不会遇到,如果确实发生了,那么解决这个问题就不会困难

另外,浮点数和双精度数可以是大端或小端,因此您需要确定要在字节流中使用的内容,并在必要时进行编组时进行转换。 如今,小尾数(Little-endian)更常见,所以我会同意的。

有谁知道我应该考虑的除IEEE754以外的任何常用浮点格式?

  1. CCSI使用binary32的变体选择处理器。

似乎几乎每个现代系统都使用IEEE754,

  1. 是的,但是...各种实现对边缘细节的伪造 ,例如次法线Visual Studio中的负零,无穷大和非数字

第二个问题更致命,更难辨认给定的实现已完全编码IEEE754。 参见__STDC_IEC_559__

OP具有“我正在编写封送处理层”。 正是在这种编码中,边缘情况仍然可能存在问题。 同样,IEEE754没有指定字节序,因此封送处理问题仍然存在。 调用整数字节序可能与FP字节序不匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM