float_control

Определяет расширение функциональности для функции с плавающей запятой.

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

Флаги

  • value,setting**[push]**
    Определяет расширение функциональности с плавающей запятой.value может быть preciseOR except.Дополнительные сведения см. в разделе /fp (Определение поведения с плавающей запятой).setting это может быть onOR off.

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

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

  • push
    Отправляйте current of float_control установки on на внутренний стек компилятора

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

Заметки

Невозможно превратить float_control precise если с except on.Аналогично precise не может быть отключено, когда fenv_access on.Переход от модели для быстрой модели со строгой 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 с плавающей запятой:

Пример

В следующем образце показано, как перехватывать исключение переполнения с помощью директивы 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