다음을 통해 공유


float_control

함수의 부동 소수점 동작을 지정합니다.

float_control( value,setting [push] | push | pop )

Flags

  • value , setting [push]
    부동 소수점 동작을 지정합니다. value는 precise 또는 except가 될 수 있습니다. 자세한 내용은 /fp(부동 소수점 동작 지정)을 참조하십시오. setting은 on 또는 off가 될 수 있습니다.

    value가 precise인 경우 preciseexcept 설정이 지정됩니다. exceptpreciseon으로 설정되어 있을 경우 on으로만 설정할 수 있습니다.

    선택적 push 토큰이 추가되는 경우 value에 대한 현재 설정이 내부 컴파일러 스택으로 푸시됩니다.

  • push
    현재 float_control 설정을 내부 컴파일러 스택으로 푸시합니다.

  • pop
    내부 컴파일러 스택 위에서float_control 설정을 제거하고 새 float_control 설정을 만듭니다.

설명

except가 설정되어 있을 때 float_control precise를 해제할 수 없습니다. 마찬가지로 fenv_access가 설정되어 있을 때에는 precise를 해제할 수 없습니다. float_control pragma를 사용하여 엄격한 모델에서 빠른 모델로 이동하려면 다음 코드를 사용합니다.

#pragma float_control(except, off)
#pragma fenv_access(off)
#pragma float_control(precise, off)
// The following line is needed on Itanium processors
#pragma fp_contract(on)

float_control pragma를 사용하여 빠른 모델에서 엄격한 모델로 이동하려면 다음 코드를 사용합니다.

#pragma float_control(precise, on)
#pragma fenv_access(on)
#pragma float_control(except, on)
// The following line is needed on Itanium processors.
#pragma fp_contract(off)

다른 부동 소수점 pragma는 다음과 같습니다.

예제

다음 샘플에서는 float_control pragma를 사용하여 오버플로 부동 소수점 예외를 catch하는 방법을 보여 줍니다.

// pragma_directive_float_control.cpp
// compile with: /EHa
#include <stdio.h>
#include <float.h>

double func( ) {
   return 1.1e75;
}

#pragma float_control (except,on)

int main( ) {
   float u[1];
   unsigned int currentControl;
   errno_t err;

   err = _controlfp_s(&currentControl, ~_EM_OVERFLOW, _MCW_EM);
   if (err != 0)
      printf_s("_controlfp_s failed!\n");

   try  {
      u[0] = func();
      printf_s ("Fail");   
      return(1);
   } 
   
   catch (...)  {
      printf_s ("Pass");
      return(0);
   }
}
  

참고 항목

참조

Pragma 지시문 및 __Pragma 키워드