我正在编写必须在不同平台上运行的软件。它使用浮点数。在所有平台上,浮点数在内存中的大小必须相同。
例如,我可以使用整数int32_t
。如何为浮点数执行此操作?
我正在编写必须在不同平台上运行的软件。它使用浮点数。在所有平台上,浮点数在内存中的大小必须相同。
例如,我可以使用整数int32_t
。如何为浮点数执行此操作?
如果您需要将值强制为相同的大小,您可以设计一个仅使用已知大小的整数的表示。您可以将浮点数转换为该格式以保存它们,并在读取它们时将它们转换回浮点数。
请参阅如何提取 double 的尾数以用于 AProgrammer 对该函数的解释,该frexp()
函数会将浮点数分解为其(整数)指数和(双)尾数。该答案后面的注释将解释如何将尾数转换为整数。
您可以保存整数尾数和指数,它们将具有固定长度。然后您可以读回它们并使用该ldexp()
函数重新创建原始浮点数(当然会有一些小错误)。
你不能在 C 中移植;你必须接受系统提供的东西。
也就是说,在我所知道的所有系统上,sizeof(float) == 4
并且sizeof(double) == 8
,但依赖它绝对是危险的。
不同的机器可以不同地存储相同的值。它们可能使用不同的浮点格式,或者它们都使用 IEEE 754。即使它们都使用 IEEE 754,它们也可能以大端或小端顺序存储它们。
你必须决定为什么你认为它们必须都是相同的大小。很有可能,您正试图在不同机器之间中继信息时采取一些无根据的捷径。不要走捷径;他们会在某个时候让你陷入困境。如果您觉得必须,您必须评估您的可移植性目标到底是什么,并验证您是否可以通过您提出的设计来满足这些目标。但要非常小心!