fenv_access
(ON)를 사용 하지 않도록 설정 하거나 플래그 테스트 및 모드 변경 변경 될 수 있습니다 (해제) 최적화 기능을 활성화 합니다.
#pragma fenv_access [ON | OFF]
설명
기본적으로 fenv_access off로 설정 합니다.
부동 소수점 동작에 대 한 자세한 내용은 /fp(부동 소수점 동작 지정).
적용 되는 최적화의 종류 fenv_access 입니다.
전역 공통 부분식 제거
코드 동작
일정 정리
다른 부동 소수점 pragma는 다음과 같습니다.
예제
// pragma_directive_fenv_access_x86.cpp
// compile with: /O2
// processor: x86
#include <stdio.h>
#include <float.h>
#include <errno.h>
#pragma fenv_access (on)
int main() {
double z, b = 0.1, t = 0.1;
unsigned int currentControl;
errno_t err;
err = _controlfp_s(¤tControl, _PC_24, _MCW_PC);
if (err != 0) {
printf_s("The function _controlfp_s failed!\n");
return -1;
}
z = b * t;
printf_s ("out=%.15e\n",z);
}
다음 샘플의 아이테니엄 프로세서에 대 한 출력 파일을 생성 하는 컴파일러입니다./fp:precise확장된 정밀도의 중간 결과 보관 위치 FLT_MAX 보다 큰 값 (은 3.402823466 e + 38f입니다)을 계산 하 고 수동으로 계산 된 경우 예상 대로 결과적으로 해당 합계를 1.0으로 될 수 있습니다./fp:strict첫 번째 추가 식 전체에 걸쳐 유지 되 무한대 생성 되므로 유지 결과 자신의 소스 정밀도 (float)에서 중간.
// pragma_directive_fenv_access_IPF.cpp
// compile with: /O2 /fp:precise
// processor: IPF
// compiling with /fp:precise prints 1.0F
// compile with /fp:strict to print infinity
#include <stdio.h>
float arr[5] = {3.402823465e+38F,
3.402823462e+38F,
3.402823464e+38F,
3.402823463e+38F,
1.0F};
int main() {
float sum = 0;
sum = arr[0] + arr[1] - arr[2] - arr[3] + arr[4];
printf_s("%f\n", sum);
}
주석 때 #pragma fenv_access (on) 앞의 예제에서 컴파일러 제어 모드를 사용 하지 않는 컴파일 타임 계산은 않기 때문에 출력 다릅니다.
// pragma_directive_fenv_access_2.cpp
// compile with: /O2
#include <stdio.h>
#include <float.h>
int main() {
double z, b = 0.1, t = 0.1;
unsigned int currentControl;
errno_t err;
err = _controlfp_s(¤tControl, _PC_24, _MCW_PC);
if (err != 0) {
printf_s("The function _controlfp_s failed!\n");
return -1;
}
z = b * t;
printf_s ("out=%.15e\n",z);
}