如何测试文件存储的浮点表示

How can one test floating point representation for file storage?

本文关键字:存储 表示 文件 何测试 测试      更新时间:2023-10-16

我有科学数据转储到文件中。目前,我只是以它们在内存中相同的表示方式转储它们。我已经记录了它们是IEEE754,但我希望在代码中声明这一点,这样如果它被移植到一个奇怪的架构并与我的文档分离(研究代码被传递),它就会在编译时出错。现在我有

static_assert(sizeof(double)==8), "message");

是否有测试IEEE754的方法?这是静态的断言吗?

在C语言中,检查是否定义了:

__STDC_IEC_559__

在c++中,检查这是否为true:

std::numeric_limits<double>::is_iec559()

IEC559是国际电工委员会标准559的缩写,与IEEE 754相同。

c++的答案在这里:如何检查c++编译器是否使用IEEE 754浮点数标准

对于C语言,现行C语言标准附录F规定,如果平台符合IEEE 754浮点运算规范,则预处理器常数__STDC_IEC_559__将被预定义为值1。但是旧的C编译器可能不会预先定义它,即使浮点数确实是IEEE 754。

然而,这对两种语言都是不够的:这种一致性只保证IEEE 754的语义,而不是二进制表示,并且由于您将二进制表示转储到文件中,您还需要处理端序问题。由于整数的端序可能与浮点数的端序不同,因此它变得更加复杂。

最后,如果您希望在现在和将来的各种平台之间实现可移植性,那么最好使用文本表示来存储浮点值。当然,您需要使用这种表示的最大精度。

http://hdfgroup.org提供了另一个解决方案,它可以有效地处理大量数据的这个问题。

您可以使用std::numeric_limits<double>is_iec559 -参见此处