我正在编写必须在不同平台上运行的软件。它使用浮点数。在所有平台上,浮点数必须与内存中的大小相同。
对于整数,我可以使用int32_t
。如何为浮点数做这个?
答案 0 :(得分:4)
如果需要将值强制为相同大小,则可以设计仅使用已知大小的整数的表示。你将浮动转换为该格式以保存它们,并在读取它们时将它们转换回浮点数。
请参阅how can I extract the mantissa of a double了解AProgrammer对frexp()
函数的解释,该函数将浮点数分解为其(整数)指数和(双)尾数。该答案后面的评论将解释如何将尾数转换为整数。
您可以保存整数尾数和指数,它们具有固定的长度。然后你可以回读它们并使用ldexp()
函数重新创建原始浮点数(当然有一些小错误)。
答案 1 :(得分:3)
你无法在C中移植;你必须采取系统提供的东西。
那就是说,在我所知道的所有系统中,sizeof(float) == 4
和sizeof(double) == 8
,但依靠这绝对是危险的。
不同的机器可以不同地存储相同的值。它们可能使用不同的浮点格式,或者它们都可能使用IEEE 754.即使它们都使用IEEE 754,它们也可能以big-endian或little-endian顺序存储它们。
你必须确定为什么你认为它们必须都是相同的大小。您可能会尝试在不同机器之间传递信息时采取一些无根据的捷径。不要采取捷径;他们会在某些时候引导你陷入困境。如果您认为必须,您必须评估您的可移植性目标是什么,并验证您是否可以使用您提议的设计来满足它们。但要非常谨慎!