在x64平台上的GCC中,默认情况下为扩展精度

Is extended precision on by default in GCC on x64 platform?

本文关键字:情况下 默认 扩展 精度 平台 x64 GCC      更新时间:2023-10-16

当我使用GCC并使用double值进行计算时会发生什么。

GCC在(x64平台,我在这里假设)上使用https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/i386-and-x86-64-Options.html#i386-和-x86-64选项

-mfpmath=sse (default)  (use sse instructions)
-mpc80       (default)  (rounding mode to 80bit extended precision)

当我在一个简单的C++程序中使用64位double值时,我感到很困惑。现在的计算是以扩展精度执行的(因为mpc80默认打开)还是使用sse指令(没有扩展精度的东西)

到底发生了什么?在64位平台上,我需要做些什么,以确保在代码的某些部分中只使用"双精度",所以假设GCC默认进行80位扩展精度计算,那么我需要手动将FPU单元设置为这部分代码中的"双精确度"?

否。在64位模式下,使用SSE指令。-mpc80(以及其他类似选项)仅针对32位系统。(AFAIK)

如果您想确定,请进行运行时精度检查。

一般来说,您不应该依赖任何精度,尽管您通常可以假设double实际上是双精度。