_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) и также поддерживается платформами MIPS и ALPHA. Чтобы убедиться, что код с операциями с плавающей точкой переносим на платформы MIPS или ALPHA, используйте _clearfp. Если используются только платформы x86, то можно использовать или _clear87, или _clearfp.
Эти функции не рекомендуется использовать при компилировании с /clr (компиляция CLR) или /clr:pure, поскольку среда 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() );
}
Эквивалент в .NET Framework
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.
См. также
Ссылки
Поддержка чисел с плавающей запятой