Tipo floatType float

I numeri a virgola mobile utilizzano il formato IEEE (Institute of Electrical and Electronics Engineers).Floating-point numbers use the IEEE (Institute of Electrical and Electronics Engineers) format. I valori a precisione singola con tipo float hanno 4 byte costituiti da un bit del segno, da un esponente binario a 8 bit excess-127 e da una mantissa a 23 bit.Single-precision values with float type have 4 bytes, consisting of a sign bit, an 8-bit excess-127 binary exponent, and a 23-bit mantissa. La mantissa rappresenta un numero compreso tra 1,0 e 2,0.The mantissa represents a number between 1.0 and 2.0. Poiché il bit più significativo della mantissa è sempre 1, non viene archiviato nel numero.Since the high-order bit of the mantissa is always 1, it is not stored in the number. Questa rappresentazione specifica un intervallo incluso approssimativamente tra 3,4E-38 e 3,4E+38 per il tipo float.This representation gives a range of approximately 3.4E-38 to 3.4E+38 for type float.

È possibile dichiarare le variabili come float o double, a seconda delle esigenze dell'applicazione.You can declare variables as float or double, depending on the needs of your application. Le differenze principali tra i due tipi sono costituite dal significato che possono rappresentare, dall'archiviazione che richiedono e dal relativo intervallo.The principal differences between the two types are the significance they can represent, the storage they require, and their range. Nella tabella riportata di seguito viene illustrata la relazione tra significato e requisiti di archiviazione.The following table shows the relationship between significance and storage requirements.

Tipi a virgola mobileFloating-Point Types

TipoType Cifre significativeSignificant digits Numero di byteNumber of bytes
mobilefloat 6 - 76 - 7 44
doubledouble 15 - 1615 - 16 88

Le variabili a virgola mobile sono rappresentate da una mantissa che contiene il valore del numero e da un esponente che contiene l'ordine di grandezza di tale numero.Floating-point variables are represented by a mantissa, which contains the value of the number, and an exponent, which contains the order of magnitude of the number.

Nella tabella riportata di seguito viene indicato il numero di bit allocati alla mantissa e all'esponente per ogni tipo a virgola mobile.The following table shows the number of bits allocated to the mantissa and the exponent for each floating-point type. Il bit più significativo dei tipi float o double è sempre il bit del segno.The most significant bit of any float or double is always the sign bit. Se il bit più significativo è 1, il numero viene considerato negativo; in caso contrario, viene considerato positivo.If it is 1, the number is considered negative; otherwise, it is considered a positive number.

Lunghezza degli esponenti e delle mantisseLengths of Exponents and Mantissas

TipoType Lunghezza degli esponentiExponent length Lunghezza delle mantisseMantissa length
floatfloat 8 bit8 bits 23 bit23 bits
doubledouble 11 bit11 bits 52 bit52 bits

Poiché gli esponenti vengono archiviati in un formato senza segno, il valore della differenza dell'esponente viene calcolato sulla metà del valore possibile.Because exponents are stored in an unsigned form, the exponent is biased by half its possible value. Per il tipo Float il valore della distorsione è 127; per il tipo Double è 1023.For type float, the bias is 127; for type double, it is 1023. È possibile calcolare il valore effettivo dell'esponente sottraendo il valore della distorsione dal valore dell'esponente.You can compute the actual exponent value by subtracting the bias value from the exponent value.

La mantissa viene archiviata come frazione binaria maggiore o uguale a 1 e minore di 2.The mantissa is stored as a binary fraction greater than or equal to 1 and less than 2. Per i tipi Float e Double, esiste un 1 iniziale implicito nella mantissa nella posizione del bit più significativo, quindi le mantisse sono in effetti rispettivamente di 24 e 53 bit, anche se il bit più significativo non viene mai archiviato in memoria.For types float and double, there is an implied leading 1 in the mantissa in the most-significant bit position, so the mantissas are actually 24 and 53 bits long, respectively, even though the most-significant bit is never stored in memory.

A differenza del metodo di archiviazione appena descritto, il pacchetto a virgola mobile può archiviare i numeri binari a virgola mobile come numeri denormalizzati.Instead of the storage method just described, the floating-point package can store binary floating-point numbers as denormalized numbers. I "numeri denormalizzati" sono numeri a virgola mobile diversi da zero con valori dell'esponente riservati in cui il bit più significativo della mantissa è 0."Denormalized numbers" are nonzero floating-point numbers with reserved exponent values in which the most-significant bit of the mantissa is 0. Utilizzando il formato denormalizzato, l'intervallo di un numero a virgola mobile può essere esteso a discapito di una minore precisione.By using the denormalized format, the range of a floating-point number can be extended at the cost of precision. Non è possibile determinare se un numero a virgola mobile venga rappresentato in forma normalizzata o denormalizzata; il pacchetto a virgola mobile determina la rappresentazione.You cannot control whether a floating-point number is represented in normalized or denormalized form; the floating-point package determines the representation. Il pacchetto a virgola mobile non utilizza mai una forma denormalizzata a meno che l'esponente non diventi inferiore al valore minimo rappresentabile in forma normalizzata.The floating-point package never uses a denormalized form unless the exponent becomes less than the minimum that can be represented in a normalized form.

Nella tabella seguente vengono riportati i valori minimo e massimo che è possibile archiviare nelle variabili di ciascun tipo a virgola mobile.The following table shows the minimum and maximum values you can store in variables of each floating-point type. I valori elencati in questa tabella sono applicabili solo ai numeri a virgola mobile normalizzati; i numeri a virgola mobile denormalizzati hanno un valore minimo inferiore.The values listed in this table apply only to normalized floating-point numbers; denormalized floating-point numbers have a smaller minimum value. Si noti che i numeri mantenuti nei registri 80x87 vengono sempre rappresentati in forma normalizzata a 80 bit. I numeri possono essere rappresentati in forma denormalizzata solo quando sono archiviati nelle variabili a virgola mobile a 32 o 64 bit (variabili di tipo float e long).Note that numbers retained in 80x87 registers are always represented in 80-bit normalized form; numbers can only be represented in denormalized form when stored in 32-bit or 64-bit floating-point variables (variables of type float and type long).

Intervallo dei tipi a virgola mobileRange of Floating-Point Types

TipoType Valore minimoMinimum value Valore massimoMaximum value
mobilefloat 1,175494351 E - 381.175494351 E - 38 3,402823466 E + 383.402823466 E + 38
doubledouble 2,2250738585072014 E - 3082.2250738585072014 E - 308 1,7976931348623158 E + 3081.7976931348623158 E + 308

Se la precisione costituisce un problema minore, considerare la possibilità di utilizzare il tipo Float per le variabili a virgola mobile.If precision is less of a concern than storage, consider using type float for floating-point variables. Al contrario, se la precisione costituisce il criterio più importante, utilizzare il tipo Double.Conversely, if precision is the most important criterion, use type double.

Le variabili a virgola mobile possono essere promosse a un tipo più significativo (dal tipo Float al tipo Double).Floating-point variables can be promoted to a type of greater significance (from type float to type double). La promozione si verifica in genere quando si eseguono operazioni aritmetiche sulle variabili a virgola mobile.Promotion often occurs when you perform arithmetic on floating-point variables. Queste operazioni aritmetiche vengono sempre eseguite con un livello di precisione elevato come quello della variabile con il massimo livello di precisione.This arithmetic is always done in as high a degree of precision as the variable with the highest degree of precision. Si considerino ad esempio le seguenti dichiarazioni di tipo:For example, consider the following type declarations:

float f_short;  
double f_long;  
long double f_longer;  

f_short = f_short * f_long;  

Nell'esempio precedente la variabile f_short viene promossa al tipo Double e moltiplicata per f_long; il risultato viene arrotondato al tipo Float prima di essere assegnato a f_short.In the preceding example, the variable f_short is promoted to type double and multiplied by f_long; then the result is rounded to type float before being assigned to f_short.

Nell'esempio riportato di seguito (che utilizza le dichiarazioni dell'esempio precedente) l'operazione aritmetica viene eseguita sulle variabili con una precisione float a 32 bit; il risultato viene quindi promosso al tipo Double:In the following example (which uses the declarations from the preceding example), the arithmetic is done in float (32-bit) precision on the variables; the result is then promoted to type double:

f_longer = f_short * f_short;  

Vedere ancheSee Also

Archiviazione di tipi di baseStorage of Basic Types