Поделиться через


float_control

Указывает поведение чисел с плавающей запятой для функции.

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

Флаги

  • value , setting [push]
    Указывает поведение чисел с плавающей запятой. value может иметь значение precise или except. Дополнительные сведения см. в разделе /fp (Определение поведения с плавающей запятой). setting может иметь значение on или off.

    Если value имеет значение precise, указываются параметры для precise и except . Если для precise задано значение on , для except можно также задать только значение on.

    При добавлении необязательного токена push текущее значение value помещается во внутренний стек компилятора.

  • push
    Текущий параметр float_control помещается во внутренний стек компилятора.

  • pop
    Параметр float_control удаляется из вершины внутреннего стека компилятора и создается новый параметр float_control.

Заметки

При включенном except отключить float_control precise невозможно. Аналогично при включенном fenv_access невозможно отключить precise. Чтобы перейти от строгой модели к быстродействующей с помощью прагма-директивы float_control, используйте следующий код:

#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 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_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