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(¤tControl, ~_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);
}
}