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


_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. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Поддержка чисел с плавающей запятой

_control87, _controlfp, __control87_2

_status87, _statusfp, _statusfp2