gpt4 book ai didi

c++ - IEEE float 和 double 是否保证在任何操作系统上都具有相同的大小?

转载 作者:太空狗 更新时间:2023-10-29 23:40:01 24 4
gpt4 key购买 nike

我正在开发操作系统可移植数据库系统。我希望我们的数据库文件是操作系统可移植的,以便客户可以自行决定将他们的数据库文件移动到其他类型的操作系统。由于这个用例,我需要我的数据类型在操作系统之间保持一致,我想知道 IEEE float 和 double 是否保证在任何操作系统上都具有相同的字节大小?

最佳答案

C++ 几乎没有提及浮点类型的表示。

[basic.fundamental]/8 说(强调我的):

There are three floating point types: float, double, and long double. The type double provides at least as much precision as float, and the type long double provides at least as much precision as double. The set of values of the type float is a subset of the set of values of the type double; the set of values of the type double is a subset of the set of values of the type long double. The value representation of floating-point types is implementation-defined. Integral and floating types are collectively called arithmetic types. Specializations of the standard template std::numeric_limits (18.3) shall specify the maximum and minimum values of each arithmetic type for an implementation.

如果您只是使用 floatdoublelong double 编写 C++ 代码,除了在您的特定编译器的文档,以及那些可以从 std::numeric_limits 中暗示的文档。

另一方面,IEEE 754 提供了其浮点类型的行为和二进制表示的精确定义。这些定义完全不足以保证在所有 IEEE 754 平台上具有相同的行为,因为(例如)IEEE 754 有时允许将多个操作折叠在一起,而结果比执行两个操作更精确分别地。这对于您的特定情况可能并不重要,因为您只希望文件是可移植的,并且可能不太关心相同的查询在不同平台上对文件创建相同的更改,就像您对加载的相同文件所做的那样不同平台上的相同方式。

所以问题是:“我如何获得适用于 C++ 的可移植 IEEE 754 实现?”。

这个问题的答案有点棘手。大多数适用于合理平台的 C++ 编译器将至少提供 floatdouble,它们大致匹配 IEEE 754 的 binary32binary64 规范(尽管您需要阅读每个编译器的文档才能确定)。

或者,您可以使用软件浮点实现或包装器,例如 FLIP , libgcc's soft-float , SoftFloat , 或 STREFLOP .根据 C++ 标准,这些库有时仍会做出不完全可移植的实现假设,因此使用风险自负。

关于c++ - IEEE float 和 double 是否保证在任何操作系统上都具有相同的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24157094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com