_status87, _statusfp, _statusfp2

Pobiera wyrazy stanu zmiennoprzecinkowe.

unsigned int _status87( void );
unsigned int _statusfp( void );
void _statusfp2(unsigned int *px86, unsigned int *pSSE2)

Parametry

  • px86
    Ten adres jest wypełniony wyrazami stanu dla jednostki zmiennoprzecinkowej x87.

  • pSSE2
    Ten adres jest wypełniony wyrazami stanu dla jednostki zmiennoprzecinkowej SSE2.

Wartość zwracana

W przypadku _status87 i _statusfp, bity w wartości zwracanej wskazują status sterowania zmiennoprzecinkowego.Zobacz FLOAT.H zawierający plik, aby uzyskać pełną definicję bitów, które są zwracane przez _statusfp.Wiele funkcji bibliotek matematycznych modyfikuje stanu wyrazu jednostki zmiennoprzecinkowej z trudnymi do przewidzenia skutkami.Optymalizacja można zmienić kolejność, łączenia i wyeliminować operacje zmiennoprzecinkowe wokół wywołania _status87, _statusfpi pokrewne funkcje.Użycie /Od (Wyłącz (Debuguj)) opcję kompilatora lub fenv_access dyrektywy pragmy w celu przeciwdziałania optymalizacje, które zmienić kolejność operacji zmiennoprzecinkowych.Zwracane wartości _clearfp i _statusfp, a także zwrotu parametry _statusfp2, są bardziej wiarygodne, gdy mniej operacje zmiennoprzecinkowe są wykonywane między Państwami znane słowa stanu zmiennoprzecinkowego.

Uwagi

_statusfp funkcja pobiera zmiennoprzecinkowe wyrazy stanu.Wyrazy stanu jest kombinacją stanu zmiennoprzecinkowego procesora i innych warunków wykrytych przez program obsługi wyjątków zmiennoprzecinkowych — na przykład przepełnienie stosu zmiennoprzecinkowego i niedomiaru.Zaznaczona wyjątki są sprawdzane zanim zawartości wyrazów stanu są zwracane.Oznacza to, że obiekt wywołujący jest informowany o oczekujących wyjątkach.Na platformach x86, _statusfp zwraca połączenie x87 i stan zmiennoprzecinkowego SSE2.Na platformach x64, stan, który jest zwracany jest oparty na stanie SSE MXCSR.Na platformach ARM _statusfp zwraca stan z rejestru FPSCR.

_statusfp jest niezależną od platformy, przenośną wersją _status87.Jest ona identyczna z _status87 na platformach firmy Intel (x 86) i jest również obsługiwana przez platformy ARM i x 64.Aby mieć pewność, że kod zmiennoprzecinkowy jest przenośny do wszystkich architektur, _statusfp.Jeśli masz na celu tylko platformy x86, można użyć _status87 lub _statusfp.

Zaleca się _statusfp2 na czipy (na przykład Pentium IV), które mają procesor zmiennoprzecinkowy zarówno x87, jak i z SSE2.W przypadku _statusfp2, adresy są wypełnione przy użyciu słowa stanu zmiennoprzecinkowego dla obu procesorów zmiennoprzecinkowych, x87 lub SSE2.W przypadku chipa, który obsługuje procesory zmiennoprzecinkowe x87 i SSE2, obiekt EM_AMBIGUOUS jest ustawiony na 1, gdy _statusfp lub _controlfp jest używany i czynność była niejednoznaczna, ponieważ mogła się odwołać do słowa stanu zmiennoprzecinkowego x87 lub SSE2._statusfp2 funkcja jest obsługiwana tylko na platformach x86.

Funkcje te nie są przydatne dla /clr (Kompilacja środowiska uruchomieniowego języka wspólnego) lub /clr:pure kompilacji ponieważ common language runtime (CLR) obsługuje tylko Domyślna precyzja zmiennoprzecinkowych.

Wymagania

Procedura

Wymagany nagłówek

_status87, _statusfp, _statusfp2

<float.h>

Dodatkowe informacje o zgodności – zobacz: Zgodność.

Przykład

// crt_statusfp.c
// Build by using: cl /W4 /Ox /nologo crt_statusfp.c
// This program creates various floating-point errors and
// then uses _statusfp to display messages that indicate these problems.

#include <stdio.h>
#include <float.h>
#pragma fenv_access(on)

double test( void )
{
   double a = 1e-40;
   float b;
   double c;

   printf("Status = 0x%.8x - clear\n", _statusfp());

   // Assignment into b is inexact & underflows: 
   b = (float)(a + 1e-40);
   printf("Status = 0x%.8x - inexact, underflow\n", _statusfp());

   // c is denormal: 
   c = b / 2.0; 
   printf("Status = 0x%.8x - inexact, underflow, denormal\n", 
            _statusfp());

   // Clear floating point status: 
   _clearfp();
   return c;
}

int main(void)
{
   return (int)test();
}
  

Odpowiednik w programie .NET Framework

Nie dotyczy. Aby wywołać standardową funkcję C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołań platformy.

Zobacz też

Informacje

Obsługa liczb zmiennoprzecinkowych

_clear87, _clearfp

_control87, _controlfp, __control87_2