c - 浮点二进制可移植性

标签 c floating-point

我有一个库,可以将文本形式的 float 据负载保存到磁盘上。看起来他们这样做是因为可移植性问题,但由于这会占用大量磁盘,我编写了一个函数来将浮点的二进制表示直接保存到磁盘。我知道这并不能保证 100% 的可移植性,但我只会在 x86(_64) Linux/Windows PC 上运行它(也许也在 Mac 和 BSD 中)。

有没有办法至少检查一下程序理解的浮点格式是否也适合系统?处理二进制形式的 float 据应该有多少不兼容性?

最佳答案

Is there a way to at least check whether the floating point format the program understands is also okay with the system?

测试 1:sizeof。测试 2:在磁盘文件的 header 中保存一个神奇的浮点值,并在从磁盘读取二进制数据后在程序中检查它是否具有正确的值。这应该足够安全了。

And how much of incompatibility should I expect from dealing with floating point data in binary form?

很少。正如您所说,如果您只使用一种硬件架构(x86),那就没问题。如果您有一组有限的受支持架构 - 只需测试所有这些架构即可。在 x86 上,每个人都会使用硬件浮点,这限制了他们的创造力(几乎根本没有)。即使在我所知道的使用 IEEE 754 浮点的架构之间,每个人都具有相同字节序的相同二进制表示形式。

浮点有一个奇怪的问题,即它们的磁盘/线上二进制表示没有广泛使用的标准。话虽这么说,我见过的每个人都会做以下两件事之一:要么字符串,要么将位模式存储在同等大小的整数中,调整字节序,粗暴地转换为 float 。

关于c - 浮点二进制可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42112936/

相关文章:

c - GDB 说 "no symbol table,"但 nm 显示文件有调试符号

c - 如何在STM板上的端口D6(PE_9)上获取PWM信号?

用于arm-linux的浮点SQlite3问题

java - Java 中的 strictfp

python - Numpy float64 vs Python float

c - 为什么将指针到指针作为参数传递给函数

c - mingw+libarchive : cross compiling linker error

C:从命令行读取两个文件的有效方法

c++ - 为什么 isnan、isinf 和 isfinite 返回 int 而不是 bool?

c - C中的浮点值混淆