C - 当double不是8个字节长时该怎么办?

时间:2016-03-30 15:35:20

标签: c format standards

我有一个C程序,我将在弃用的机器上使用它。我有点害怕基本类型兼容性的问题 - 我的意思是,当我问我怎么能保证,那个双倍长度是8个字节?答案是

“你可以把它放在你的代码中:

static_assert(sizeof(double) == 8, "invalid double size");"

好的,我明白了...... 但是,当我运行代码并且“断言失败”时,我该怎么办?

我现在有什么选择?我该如何处理这个问题?我需要在那台特定的机器上运行程序......是否很难使程序适应不同大小的双倍? 附:我的程序需要8byte双打

编辑:为什么我需要8个字节的双倍? 我从串口以二进制格式读取一些数据到缓冲区,从那个缓冲区我需要提取IEEE754双精度和单精度数,用它们做一些计算。

2 个答案:

答案 0 :(得分:0)

如果您需要8字节双精度的原因是因为您正在以这种方式读取和写入数据文件,那么您需要退一步并对此进行长时间的考虑。阅读和写作"二进制"数据文件是人们喜欢做的事情之一,因为它很容易"并且"高效" - 但当然它非常不可移植。您可以尝试修补一些东西,使您的二进制数据文件模糊地移植,但实际上非常困难,而且当您这样做时,它不再容易或有效。

如果您可以清楚地看到使用文本数据文件的方式,那么几乎所有的可移植性问题都会神奇地消失,您不必再担心这些数据文件了。

您可以使用%a读取和写入浮点数量到文本数据文件,这将在保持准确性和精确度方面做得很好。

答案 1 :(得分:0)

如果您知道必须运行代码的特定类型的计算机和C环境,那么您可以而且应该研究其文档以确定其特征是否与您的数据格式匹配。如果他们这样做,那么你没有问题。如果他们没有,那么你必须编写FP仿真代码。

如果在编写代码之前无法做出此决定,或者目标计算机的特性在这里产生差异,那么无论如何都需要编写仿真代码。当然,您可以在任何机器上使用此类代码,因此您可能会停在那里。但是,您也可以提供使用本机FP的备用代码路径,并在构建时(通过条件编译)或在运行时(通过FP表示的显式测试)在两个路径之间进行选择。