浮点数大小取决于操作系统吗?

Does float size depend on operating system?

本文关键字:操作系统 取决于 浮点数      更新时间:2023-10-16

很抱歉,我用谷歌找不到这个问题的答案。我不是一个说英语的人,也许我没有使用正确的单词搜索。

我记得数据类型的大小取决于体系结构单词的大小(也许我错了)。但是,我不确定大小是否也取决于操作系统。

现在我正在使用Windows 7 32位,我不确定当我使用Windows 7 64位时,浮点数是否会改变它的大小。

我使用Visual Studio 2012来编译我的解决方案,使用Win32项目。

如果我将windows版本从32位更改为64位,大小会改变吗?

我不是在问float和double有什么不同。如果我将操作系统从Windows 7 32位更改为Windows 7 64位(或反之亦然),那么在同一台计算机上,float是否会在内存中具有相同的大小(内存中的位数)。

从形式上看,浮点类型的大小取决于所使用的特定编译器。

实际上,对于基于内置浮点硬件芯片的系统(即除了某些嵌入式系统之外的所有系统),编译器将使用浮点硬件,并且所有针对该芯片的编译器将使用相同的floatdouble尺寸。

此外,桌面硬件已经确定了IEEE 754浮点标准,该标准规定了floatdouble的大小(long double是相当不同的事情)。因此,当您的目标是桌面系统时,可以安全地假设float将在任何地方具有相同的大小,并且double将在任何地方具有相同的大小。

如果您担心这一点,您可以使用std::numeric_limits<float>::is_iec559std::numeric_limits<double>::is_iec559来检查编译器使用的浮点实现是否符合IEEE 754 (IEC 559是IEEE 754标准的旧名称)。

3.9.1基本类型

有三种浮点类型:float、double和long double。类型double提供的精度至少与float一样高long double类型提供的精度至少与double相同。的类型的值集是的值集的子集类型double;类型的值的集合是的子集长双精度类型的值集。

重点是我的。c++标准不要求浮点类型的任何特定表示。浮动数据类型的大小在不同的操作系统、不同的操作系统版本、甚至同一操作系统的不同编译器、甚至同一编译器的不同编译选项之间可以改变,也可以保持不变。