_clear87
, _clearfp
Получает и очищает слово состояния модуля операций с плавающей запятой.
Синтаксис
unsigned int _clear87( void );
unsigned int _clearfp( void );
Возвращаемое значение
Биты в возвращаемом значении указывают состояние модуля операций с плавающей запятой до вызова функций _clear87
и _clearfp
. Полные определения битов, возвращаемых функцией _clear87
, см. в файле Float.h. Многие математические библиотечные функции изменяют слово состояния 8087/80287 с непредсказуемыми результатами. Чем меньше операций с плавающей запятой выполняется между известными значениями слова состояния модуля операций с плавающей запятой, тем надежнее возвращаемые из функций _clear87
и _status87
значения.
Замечания
Функция _clear87
очищает флаги исключения в слове состояния операций с плавающей запятой, устанавливает бит занятости в 0 и возвращает слово состояния. Слово состояния — это сочетание слова состояния 8087/80287 и других условий, обнаруженных обработчиком исключений 8087/80287, таких как переполнение стека или потеря точности.
_clearfp
— независимая от платформы, переносимая версия функции _clear87
. Он идентичен _clear87
платформам Intel (x86), а также поддерживается платформами x64 и ARM. Чтобы код, выполняющий операции с плавающей запятой, был переносимым на архитектуры x64 и ARM, используйте функцию _clearfp
. Если вы используете только платформы x86, можно использовать _clear87
либо _clearfp
.
Эти функции не рекомендуется использовать при компиляции с помощью /clr (компиляция среды CLR), так как среда CLR поддерживает только точность с плавающей запятой по умолчанию.
Требования
Маршрут | Обязательный заголовок |
---|---|
_clear87 |
<float.h> |
_clearfp |
<float.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// crt_clear87.c
// compile with: /Od
// This program creates various floating-point
// problems, then uses _clear87 to report on these problems.
// Compile this program with Optimizations disabled (/Od).
// Otherwise the optimizer will remove the code associated with
// the unused floating-point values.
//
#include <stdio.h>
#include <float.h>
int main( void )
{
double a = 1e-40, b;
float x, y;
printf( "Status: %.4x - clear\n", _clear87() );
// Store into y is inexact and underflows:
y = a;
printf( "Status: %.4x - inexact, underflow\n", _clear87() );
// y is denormal:
b = y;
printf( "Status: %.4x - denormal\n", _clear87() );
}
Status: 0000 - clear
Status: 0003 - inexact, underflow
Status: 80000 - denormal
См. также
Поддержка математических и плавающих точек
_control87
, , _controlfp
__control87_2
_status87
, , _statusfp
_statusfp2