_status87, _statusfp, _statusfp2
Obtém a palavra status de ponto flutuante.
unsigned int _status87( void );
unsigned int _statusfp( void );
void _statusfp2(unsigned int *px86, unsigned int *pSSE2)
Parâmetros
px86
Esse endereço é preenchido com a palavra status para a unidade de ponto flutuante x87.pSSE2
Esse endereço é preenchido com a palavra status para a unidade de ponto flutuante SSE2.
Valor de retorno
Para _status87 e _statusfp, os bits no valor retornado indicam o status do ponto flutuante. Consulte o arquivo de inclusão FLOAT.H para obter uma definição dos bits que são retornados por _statusfp. Muitas funções da biblioteca de matemática alteram a palavras de status de ponto flutuante, com resultados imprevisíveis. A otimização pode reorganizar, combinar, e eliminar operações de ponto flutuante ao redor de chamadas a _status87, a _statusfp, e as funções relacionadas. Use a opção do compilador de /Od (desabilitar [depuração]) ou a política de pragma de fenv_access evitar as otimizações que reorganizam operações de ponto flutuante. Os valores de retorno de _clearfp e de _statusfp, e também os parâmetros de retorno de _statusfp2, são mais confiáveis se menos operações de ponto flutuante são executadas entre estados conhecidos de palavras de status de ponto flutuante.
Comentários
A função _statusfp obtém a palavra de status do ponto flutuante. A palavra status é uma combinação do status do processador de ponto flutuante e outras condições detectadas pelo manipulador de exceção do ponto flutuante, por exemplo, estouro e estouro negativo de pilha do ponto flutuante. As exceções sem máscara são verificadas antes que o conteúdo da palavra status seja retornado. Isso significa que o chamador é informado de exceções pendentes. Nas plataformas x86, _statusfp retorna uma combinação do status do ponto flutuante do x87 e SSE2. Em plataformas x64, o status retornado é baseado no estado MXCSR do SSE. Em plataformas ARM, a função _statusfp retorna o status do registro FPSCR.
_statusfp é uma versão portátil independente de plataforma de _status87. É idêntico a _status87 em plataformas Intel (x86) e também é suportado pelas plataformas x64 e ARM. Para garantir que o código de ponto flutuante seja portátil para todas as arquiteturas, use _statusfp. Se você está definido somente as plataformas x86 como destino, você pode usar _status87 ou _statusfp.
Recomendamos _statusfp2 para os chip (como Pentium IV) que têm um processador x87 e SSE2 de ponto flutuante. Para _statusfp2, os endereços são preenchidos usando a palavra de status de ponto flutuante para o processador de ponto flutuante x87 ou SSE2. Para um chip que suporta os processadores x87 e SSE2 de ponto flutuante, EM_AMBIGUOUS é definido para 1 se _statusfp ou _controlfp forem usados e a ação era ambígua porque podia se referir à palavra de status de ponto flutuante do x87 ou SSE2. A função _statusfp2 tem suporte somente nas plataformas x86.
Estas funções não são úteis para /clr (compilação do Common Language Runtime) ou a compilação de /clr:pure como Common Language Runtime (CLR) oferece suporte apenas a precisão de ponto flutuante padrão.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
_status87, _statusfp, _statusfp2 |
<float.h> |
Para obter informações adicionais sobre compatibilidade, consulte Compatibilidade.
Exemplo
// 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();
}
Equivalência do .NET Framework
Não aplicável. Para chamar a função padrão de C, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.