_status87, _statusfp, _statusfp2

 

Pour obtenir la dernière documentation sur Visual Studio 2017 RC, consultez Documentation Visual Studio 2017 RC.

Obtient le mot d’état à virgule flottante.

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

Paramètres

px86
Cette adresse est remplie avec le mot d’état pour le x87 unité à virgule flottante.

pSSE2
Cette adresse est renseignée avec le mot d’état de l’unité à virgule flottante SSE2.

Pour _status87 et _statusfp, les bits de la valeur retournée indiquent l’état à virgule flottante. Consultez la valeur FLOAT. H à inclure pour une définition des bits qui sont renvoyés par _statusfp. De nombreuses fonctions de bibliothèque mathématique modifier le mot d’état à virgule flottante, avec des résultats imprévisibles. L’optimisation peut réorganiser, combiner et éliminer les opérations en virgule flottante autour des appels à _status87, _statusfpet des fonctions associées. Utilisez le /Od (désactiver (débogage)) option du compilateur ou fenv_access directive pragma pour empêcher des optimisations permettant de réorganiser les opérations en virgule flottante. Retourner des valeurs à partir de _clearfp et _statusfpet également les paramètres de retournés de _statusfp2, sont plus fiables si moins d’opérations à virgule flottante sont effectuées entre États connus du mot d’état à virgule flottante.

Le _statusfp fonction obtient le mot d’état à virgule flottante. Le mot d’état est une combinaison de l’état du processeur à virgule flottante et d’autres conditions détectées par le Gestionnaire d’exceptions de calcul en virgule flottante, par exemple, un débordement de pile en virgule flottante et dépassement de capacité négatif. Exceptions non masquées sont vérifiées avant le contenu du mot d’état est retourné. Cela signifie que l’appelant est informé d’exceptions en attente. X86 sur les plates-formes, _statusfp retourne une combinaison de la x87 et l’état à virgule flottante SSE2. X64 sur les plates-formes, l’état retourné repose sur du SSE MXCSR. Sur les plateformes ARM, _statusfp renvoie l’état dans le Registre fpscr.

_statusfpest une version portable indépendant de la plate-forme de _status87. Elle est identique à _status87 sur les plateformes Intel (x&86;) et est aussi prise en charge par les plateformes x64 et ARM. Pour vous assurer que votre code en virgule flottante est portable à toutes les architectures, utilisez _statusfp. Si vous ciblez uniquement les plateformes x86, vous pouvez utiliser _status87 ou _statusfp.

Nous vous recommandons de _statusfp2 de puces (par exemple, le Pentium IV) qui ont un x87 et un processeur à virgule flottante SSE2. Pour _statusfp2, les adresses sont remplis en utilisant le mot d’état à virgule flottante pour le x87 ou le processeur à virgule flottante SSE2. Pour un processeur qui prend en charge x87 et processeurs à virgule flottante SSE2, EM_AMBIGUOUS est définie sur 1 si _statusfp ou _controlfp est utilisé et l’action est AMBIGUE, car il pourrait faire référence à la x87 ou le mot d’état à virgule flottante SSE2. Le _statusfp2 fonction est uniquement pris en charge x86 plates-formes.

Ces fonctions ne sont pas utiles pour /clr (Compilation pour le Common Language Runtime) ou /clr:pure compilation parce que le common language runtime (CLR) prend uniquement en charge la précision en virgule flottante par défaut.

RoutineEn-tête requis
_status87, _statusfp, _statusfp2<float.h>

Pour plus d'informations sur la compatibilité, voir Compatibilité.

// 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  

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de plateforme.

Prise en charge de virgule flottante
_clear87, _clearfp
_control87, _controlfp, __control87_2

Afficher: