我一直在寻找GNU C的一个选项,以便我的浮点程序可以生成比默认GNU设置生成的代码运行速度更快但精度更低的代码。
假设我有一个程序我的程序
double sqrt_two(return sqrt(2));
虽然精确的答案应该是1.414….,但我只需要答案1.4,甚至1.5或1.3就可以了,但我需要一个更快的程序。当然,我们使用一个更便宜的sqrt算法,但我要寻找的是一个编译器选项来完成这项工作。希望有这样的选择。
最佳答案
从GCC手册页:-ffast-math
设置-fno-math-errno
、-funsafe-math-optimizations
、-ffinite-math-only
、-fno-rounding-math
、-fno-signaling-nans
和-fcx-limited-range
。
此选项将定义预处理器宏__FAST_MATH__
。
除了-O
之外,任何-Ofast
选项都不会启用此选项,因为它可能导致程序的错误输出,这些程序依赖于数学函数的IEEE或ISO规则/规范的精确实现。但是,对于不需要这些规范保证的程序,它可能会产生更快的代码。