다음을 통해 공유


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(&currentControl, _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(&currentControl, _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);
}
  

참고 항목

참조

Pragma 지시문과 __Pragma 키워드