当我使用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)
当我在一个简单的double
程序中使用64位C++值时,我感到很困惑。现在执行的计算是以扩展精度(因为mpc80默认为on)执行的,还是使用sse指令(在没有扩展精度的情况下)
到底会发生什么?我需要在64位平台上做些什么,以确保在中代码的某些部分只使用“双精度”,那么假设GCC在默认情况下进行80位扩展精度计算,那么我需要在代码的这一部分中将FPU单元设置为“双精度”?
发布于 2015-11-28 07:39:14
不是的。在64位模式下,使用SSE指令.-mpc80
(和其他类似的选项)只针对32位系统。(AFAIK)
如果要确定,请执行运行时精度检查。
通常,您不应该依赖于任何程度的精度,尽管您通常可以假设double
实际上是双重精度。
https://stackoverflow.com/questions/33972945
复制