为什么强制使用-ffast-math
与 g++ 实现循环的向量化double
是?我不喜欢-ffast-math
因为我不想失去精度。
你不一定会失去精度-ffast-math
。只影响处理NaN
, Inf
等以及操作执行的顺序。
如果您有一段特定的代码,您不希望 GCC 重新排序或简化计算,您可以使用asm
陈述。
例如,以下代码执行舍入操作f
。然而,两人f += g
and f -= g
gcc 可能会优化操作:
static double moo(double f, double g)
{
g *= 4503599627370496.0; // 2 ** 52
f += g;
f -= g;
return f;
}
在 x86_64 上,您可以使用这个asm
指示 GCC 不要执行该优化的语句:
static double moo(double f, double g)
{
g *= 4503599627370496.0; // 2 ** 52
f += g;
__asm__("" : "+x" (f));
f -= g;
return f;
}
不幸的是,您需要针对每种架构进行调整。在 PowerPC 上,使用+f
代替+x
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)