不同CPU架构下的Double(s)?

4
发送双精度浮点值(当然要调整正确的字节顺序)并在不同的CPU架构上交换它们是否可行,特别是i386、mips(几个不同的核心)和powerpc(e300、e500)。没有非常老的硬件。
对于所有架构使用gcc 4.2.1编译器,并使用-Os。
据说在IEEE-754标准中到处都可以找到(是吗?),但正如维基百科所说:
IEEE 754-1985允许在实现中进行许多变化(例如某些值的编码和某些异常的检测)。IEEE 754-2008已经加强了其中的许多内容,但仍然存在一些变化(尤其是二进制格式)。
我没有打算传递NaN或其他特殊内容,只有有效的十进制数。

1
如果您出于性能原因避免使用文本,则可能需要了解一下 Protocol Buffers:http://code.google.com/p/protobuf/ 它们处理大小端问题、对齐(与发送 C 数据结构相比)等。它们确实使用浮点数,前提是发送方和接收方都符合 IEEE-754 标准。 - KeyserSoze
2个回答

2
如果您想发送归一化数字的表示,那么在任何现代架构上都是非常安全的。如有疑问,请查看架构手册。对于非归一化数字,您需要进行检查。
当然,您必须能够将其分解为字节并在另一端重新组装,使用正确的字节顺序,但听起来您知道如何做到这一点。
正如所指出的,不能期望不同的CPU完全相同地实现标准的每个部分,但这并非必要。
从IEEE浮点数到ASCII的转换充满了错误;1990年代有Guy SteeleWill Clinger撰写的优秀论文。Burger和Dybvig之后还有更快速地进行操作的后续研究

刚刚查看了SQLite的源代码,它声称是“跨平台数据库文件”——它只关心其REAL数据类型的字节顺序,这本质上是一个双精度浮点数。听起来我可以放心使用了。谢谢。 - the dude

1
你基本上是在问“我能否无缝地在系统之间传输二进制数据”。答案是肯定的,只要两个系统同意使用相同的格式。如果你知道你所期望的CPU,那么检查它们的IEEE标准兼容性,你就可以开始工作了。

1
检查这正是我想避免自己做的事情... :) - the dude
PowerPC将会符合IEEE标准,但它是Motorola的字节顺序,而x86则符合IEEE标准,但使用Intel的字节顺序。 - NoMoreZealots

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接