frexp
, frexpf
, frexpl
Ottiene la mantissa e l'esponente di un numero a virgola mobile.
Sintassi
double frexp(
double x,
int *expptr
);
float frexpf(
float x,
int * expptr
);
long double frexpl(
long double x,
int * expptr
);
#define frexpl(X, INT_PTR) // Requires C11 or higher
float frexp(
float x,
int * expptr
); // C++ only
long double frexp(
long double x,
int * expptr
); // C++ only
Parametri
x
Valore a virgola mobile.
expptr
Puntatore all'esponente intero archiviato.
Valore restituito
frexp
restituisce la mantissa. Se x
è 0, la funzione restituisce 0 sia per la mantissa che per l'esponente. Se expptr
è NULL
, il gestore di parametri non validi viene richiamato come descritto in Convalida dei parametri. Se l'esecuzione può continuare, la funzione imposta errno
suEINVAL
e restituisce 0.
Osservazioni:
La frexp
funzione suddivide il valore a virgola mobile (x
) in una mantissa (m
) e un esponente (n
), in modo che il valore assoluto di m
sia maggiore o uguale a 0,5 e minore di 1,0 em
x
= * 2.n
L'esponente intero n
viene archiviato in corrispondenza della posizione a cui punta expptr
.
C++ consente l'overload, quindi è possibile chiamare overload di frexp
. In un programma C, a meno che non si usi la <macro tgmath.h> per chiamare questa funzione, frexp
accetta sempre e double
un int
puntatore e restituisce un oggetto double
.
Se si utilizza la <macro tgmath.h>frexp()
, il tipo dell'argomento determina quale versione della funzione è selezionata. Per informazioni dettagliate, vedere La matematica generica dei tipi.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Requisiti
Funzione | Intestazione obbligatoria |
---|---|
frexp , frexpf , frexpl |
<math.h> |
frexp macro |
<tgmath.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// crt_frexp.c
// This program calculates frexp( 16.4, &n )
// then displays y and n.
#include <math.h>
#include <stdio.h>
int main( void )
{
double x, y;
int n;
x = 16.4;
y = frexp( x, &n );
printf( "frexp( %f, &n ) = %f, n = %d\n", x, y, n );
}
frexp( 16.400000, &n ) = 0.512500, n = 5
Vedi anche
Supporto matematico e a virgola mobile
ldexp
modf
, modff
, modfl