【发布时间】:2015-08-12 13:44:15
【问题描述】:
浮点是在 C 中定义的实现。因此没有任何保证。
我们的代码需要可移植,我们正在讨论是否可以在我们的协议中使用 IEEE754 浮点数。出于性能原因,如果我们在发送或接收数据时不必在定点格式之间来回转换,那就太好了。
虽然我知道平台和架构之间在long 或wchar_t 的大小方面可能存在差异。但我似乎找不到任何关于float 和double 的具体信息。
到目前为止,我发现字节顺序可能在大端平台上颠倒了。虽然有些平台不支持浮点,但包含 float 和 double 的代码甚至无法链接。否则平台似乎坚持使用 IEEE754 单精度和双精度。
那么假设浮点在 IEEE754 中可用时是否安全?
编辑:回应评论:
你对“安全”的定义是什么?
我的意思是安全的,一个系统上的位模式在另一个系统上意味着相同(在字节旋转以处理字节顺序之后)。
【问题讨论】:
-
对于大多数现代架构,您可以假设。但并非所有架构都使用 IEEE-754 Do any real-world CPUs not use IEEE 754?、Exotic architectures the standards committees care about
-
如果您关心生成可在通用平台上运行的代码,则此假设是安全的。如果您关心完全符合编程语言标准,那是完全不安全的。
-
您对“安全”的定义是什么?对于生命攸关的假设,该假设是不安全的:各种实现使用 binary32 尚未完全符合 NAN、次规范等。FP 数学运算因正确性而异。最后,你需要提出一个“安全”的标准,否则答案和问题一样模糊。
-
@chux 安全的意思是,一个系统上的位模式在另一个系统上的含义相同(在字节旋转以处理字节顺序之后)。
-
@Calmarius - 便携是什么意思?这段代码是否必须在 Apple II、Cray 1、...上运行?
标签: c floating-point ieee-754