x64 平台上的 GCC 是否默认启用扩展精度?
Is extended precision on by default in GCC on x64 platform?
当我使用 GCC 并使用 double
值进行计算时会发生什么。
GCC 在(我在这里假设的 x64 平台)上使用
https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/i386-and-x86-64-Options.html#i386-and-x86-64-Options
-mfpmath=sse (default) (use sse instructions)
-mpc80 (default) (rounding mode to 80bit extended precision)
我很困惑,当我在一个简单的 C++ 程序中使用 64 位 double
值时。
现在的计算是以扩展精度执行的(因为 mpc80 默认打开)还是使用 sse 指令(没有扩展精度的东西)
到底发生了什么?我需要在 64 位平台上做什么,以确保在 某些 部分代码中仅使用 "double precision",因此假设默认情况下 GCC 进行 80 位扩展精度计算,那么我需要在这部分代码中手动将 FPU 单元设置为 "double precision"?
没有。在 64 位模式下,使用 SSE 指令。 -mpc80
(和其他类似选项)仅针对 32 位系统。 (据我所知)
如果您想确定,请执行运行时精度检查。
一般来说,您不应该依赖任何精度,尽管您通常可以假设 double
实际上是双精度。
当我使用 GCC 并使用 double
值进行计算时会发生什么。
GCC 在(我在这里假设的 x64 平台)上使用 https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/i386-and-x86-64-Options.html#i386-and-x86-64-Options
-mfpmath=sse (default) (use sse instructions)
-mpc80 (default) (rounding mode to 80bit extended precision)
我很困惑,当我在一个简单的 C++ 程序中使用 64 位 double
值时。
现在的计算是以扩展精度执行的(因为 mpc80 默认打开)还是使用 sse 指令(没有扩展精度的东西)
到底发生了什么?我需要在 64 位平台上做什么,以确保在 某些 部分代码中仅使用 "double precision",因此假设默认情况下 GCC 进行 80 位扩展精度计算,那么我需要在这部分代码中手动将 FPU 单元设置为 "double precision"?
没有。在 64 位模式下,使用 SSE 指令。 -mpc80
(和其他类似选项)仅针对 32 位系统。 (据我所知)
如果您想确定,请执行运行时精度检查。
一般来说,您不应该依赖任何精度,尽管您通常可以假设 double
实际上是双精度。