Aracılığıyla paylaş


_status87, _statusfp, _statusfp2

Kayan nokta durum sözcüğünü alır.

Sözdizimi

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

Parametreler

px86
Bu adres, x87 kayan nokta biriminin durum sözcüğüyle doldurulur.

pSSE2
Bu adres, SSE2 kayan nokta biriminin durum sözcüğüyle doldurulur.

Dönüş değeri

ve _statusfpiçin_status87, döndürülen değerdeki bitler kayan nokta durumunu gösterir. Bkz. FLOAT. tarafından _statusfpdöndürülen bitlerin tanımı için H ekleme dosyası. Birçok matematik kitaplığı işlevi, kayan nokta durum sözcüğünü tahmin edilemeyen sonuçlarla değiştirir. İyileştirme, , _statusfpve ilgili işlevlere _status87yapılan çağrılar etrafında kayan nokta işlemlerini yeniden sıralayabilir, birleştirebilir ve ortadan kaldırabilir. Kayan nokta işlemlerini yeniden sıralayan iyileştirmeleri önlemek için /Od (Devre Dışı Bırak (Hata Ayıklama)) derleyici seçeneğini veya fenv_access pragma yönergesini kullanın. kayan nokta durum sözcüğünün bilinen durumları arasında daha az kayan nokta işlemi gerçekleştirilirse ve _statusfp'den _clearfp değer döndürme ve ayrıca dönüş parametreleri _statusfp2daha güvenilirdir.

Açıklamalar

_statusfp işlevi kayan nokta durum sözcüğünü alır. Durum sözcüğü kayan nokta işlemci durumunun ve kayan nokta özel durum işleyicisi tarafından algılanan diğer koşulların (örneğin, kayan nokta yığın taşması ve taşma) birleşimidir. Durum sözcüğünün içeriği döndürülmeden önce maskelenmemiş özel durumlar denetleniyor. Başka bir deyişle, arayan bekleyen özel durumlar hakkında bilgilendirilir. x86 platformlarında, _statusfp x87 ve SSE2 kayan nokta durumunun bir bileşimini döndürür. x64 platformlarında, döndürülen durum SSE'nin MXCSR durumunu temel alır. ARM64 platformlarında, _statusfp FPSCR yazmaçtan durum döndürür.

_statusfp platformdan bağımsız, taşınabilir bir sürümüdür _status87. _status87 Intel (x86) platformlarında aynıdır ve x64 ve ARM64 platformları tarafından da desteklenir. Kayan nokta kodunuzun tüm mimarilere taşınabilir olduğundan emin olmak için kullanın _statusfp. Yalnızca x86 platformlarını hedeflediyseniz veya _statusfpkullanabilirsiniz_status87.

Hem x87 hem de SSE2 kayan nokta işlemciye sahip yongalar (Pentium IV gibi) için önerilir _statusfp2 . için _statusfp2, adresler hem x87 hem de SSE2 kayan nokta işlemcisi için kayan nokta durum sözcüğü kullanılarak doldurulur. x87 ve SSE2 kayan nokta işlemcilerini destekleyen bir yonga için, EM_AMBIGUOUS kullanılırsa veya _controlfp kullanılırsa _statusfp 1 olarak ayarlanır ve eylem x87 veya SSE2 kayan nokta durum sözcüğüne başvurabileceğinden belirsizdi. _statusfp2 İşlev yalnızca x86 platformlarında desteklenir.

Ortak dil çalışma zamanı (CLR) yalnızca varsayılan kayan nokta duyarlığı desteklediğinden bu işlevler /clr (Ortak Dil Çalışma Zamanı Derlemesi) için kullanışlı değildir.

Gereksinimler

Yordam Gerekli başlık
_status87, _statusfp, _statusfp2 <float.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// 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();
}
Status = 0x00000000 - clear
Status = 0x00000003 - inexact, underflow
Status = 0x00080003 - inexact, underflow, denormal

Ayrıca bkz.

Matematik ve kayan nokta desteği
_clear87, _clearfp
_control87, _controlfp, __control87_2