2017-03-31 11 views
-1

man gcc (1)는 다음과 같이 말합니다 : -ffast-math 옵션은 전 처리기 매크로를 발생시킵니다. & F; FAST_MATH_ & lowbar; 정의 될 수 있습니다. 해당 매크로에 대한 추가 문서가 있습니까?gcc 전 처리기 매크로 __FAST_MATH__ 사용 방법은 무엇입니까?

나는

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

같은 그 코드가 잘 단일 문까지 그레인 수학 최적화, 제어 할 수 있습니다 기대. 그들이 배치되는 곳

는하지만, 내 테스트는 다소에 관계없이,
#define __FAST_MATH__ 
#define __FAST_MATH__ on 

모두 무시됩니다 나타냅니다.

은 [편집] 그들은 "무시"

#include <math.h> 

의미 전에 를 배치하는 경우에도 무시됩니다 : 측정 가능한 영향을주지 않습니다. -phast-math는 테스트 코드를 3 배로 가속시키는 반면,

+0

'-ffast-math'를 사용하면'__FAST_MATH__'가 정의됩니다. 아마 거기에있는 모든 것이고 더 이상 효과가 없습니다. – melpomene

+0

헤더 math.h에 어딘가에 #ifdef __FAST_MATH가 들어 있다고 생각 하나? 또한 필자는 여전히 컴파일러 내부의 어떤 것이 -phast-math와 다르게 동작한다고 생각합니다. –

+0

답변은 http://stackoverflow.com/questions/7420665/what-does-gccs-ffast-math-actually-do에는 플래그가 실제로 무엇에 관한 많은 정보가 있습니다. –

답변

1

나는 거꾸로 생각합니다. 매크로는 표준 라이브러리가 여러 가지 수학 함수 구현을 사용하도록 정의됩니다.

컴파일러가 예상되는 코드를 생성하지 않을 때 프로그램이 대체 구현체를 사용하기 때문에 직접 정의하면 아무런 효과가 없으며 실제로 위험 할 수 있습니다.