2017-03-31 72 views
-1

man gcc(1)表示:选项-ffast-math会导致预处理器宏_> FAST_MATH__被定义为。该宏是否还有其他文档?如何使用gcc预处理器宏__FAST_MATH__?

我希望像

#define __FAST_MATH__ blabla 
y = pow(x,a); 
#undef __FAST_MATH__ 

代码允许数学优化,细粒降至个语句的控制权。

但是,我的测试,而表示

#define __FAST_MATH__ 
#define __FAST_MATH__ on 

都被忽略,无论在那里它们被放置。

[编辑]他们将被忽略,即使它们被放置之前

#include <math.h> 

“忽略” 的意思是:有没有可测量的效果。而 - 数学加速我的测试代码的3倍。

+0

如果使用'-fast-math',则定义'__FAST_MATH__'。这可能就是它的全部,它没有进一步的效果。 – melpomene

+0

我想,头math.h包含一些#ifdef __FAST_MATH某处?另外,我仍然认为编译器内部的某些东西与-ffast-math有不同的表现。 –

+0

答案http://stackoverflow.com/questions/7420665/what-does-gccs-ffast-math-actually-do有很多关于旗子实际上做了什么的信息。 –

回答

1

我相信你有它倒退。该宏是为了使标准库使用数学函数的不同实现而定义的。

自己定义它没有任何效果,可能实际上是危险的错误,因为当编译器不生成期望的代码时,程序将使用这些替代实现。