C ++ float e double

In questo tutorial, impareremo i tipi di dati float e double con l'aiuto di esempi. Vedremo anche alcune delle principali differenze tra loro e quando usarli.

In C ++, entrambi i tipi di dati floate doublevengono utilizzati per i valori a virgola mobile. I numeri in virgola mobile vengono utilizzati per i valori decimali ed esponenziali . Per esempio,

 // creating float type variables float num1 = 3.0f; float num2 = 3.5f; float num3 = 3E-5f; // 3x10^-5 // creating double type variables double num4 = 3.0; double num5 = 3.5; double num6 = 3E-5; // 3x10^-5

Dobbiamo aggiungere il suffisso fo Falla fine di un floatvalore. Questo perché il compilatore interpreta i valori decimali senza il suffisso come double.

Considera questo codice.

 float a = 5.6;

Qui abbiamo assegnato un doublevalore a una floatvariabile.

In questo caso, 5.6 viene convertito in floatdal compilatore automaticamente prima di essere assegnato alla variabile a. Ciò potrebbe causare la perdita di dati. Per saperne di più, visita Conversione di tipi in C ++.

Differenza tra float e double

galleggiante Doppio
Dimensione: 4 byte Dimensione: 8 byte
Precisione: in generale, 7 cifre decimali di precisione Precisione: in generale, 15 cifre decimali di precisione
Esempio: 3.56f , 3e5fetc. Esempio: 3.56 , 3e5etc.

Nota: a meno che tu non abbia un requisito specifico, usa sempre doubleinvece di float, poiché le floatvariabili possono essere soggette a introdurre errori quando si lavora con numeri grandi.

Esempio 1: C ++ float e double

 #include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )

Produzione

 Numero di tipo doppio = 3,91235 Numero di tipo galleggiante = 3,91235

Nota: il compilatore utilizzato per questo esempio (compilatore MinGW) ammette 6 cifre. Quindi, i nostri valori delle variabili sono stati arrotondati e troncati a 6 cifre dal compilatore.

setprecision () per specificare i punti decimali

Possiamo specificare il numero di punti decimali da stampare coututilizzando la setprecision()funzione.

Questa funzione è definita nel iomanipfile di intestazione, che sta per manipolazione di input / output .

Esempio 2: utilizzo di setprecision () per numeri in virgola mobile

 #include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting the precision to 12 decimal places cout << setprecision(13); // Printing the two variables cout << "Double Type Number = " << a << endl; cout << "Float Type Number = " << b << endl; return 0; )

Produzione

 Numero di tipo doppio = 3,912348239293 Numero di tipo galleggiante = 3,912348270416

Come possiamo vedere dall'esempio sopra, abbiamo specificato la precisione fino a 13 cifre.

 cout << setprecision(13);

Anche il valore in virgola mobile che abbiamo assegnato alle nostre variabili è composto da 13 cifre.

Tuttavia, poiché floatha una precisione fino a sole 7 cifre, mostra i valori di spazzatura dopo che la sua precisione viene superata.

La nostra doublevariabile mostra il numero corretto perché ha una precisione di 15 cifre, mentre il numero stesso è composto da 13 cifre.

In alternativa, possiamo specificare diverse precisioni per diverse variabili durante la stampa.

Esempio 3: differenti precisioni per differenti variabili

 #include #include using namespace std; int main() ( // Creating a double type variable double a = 3.912348239293; // Creating a float type variable float b = 3.912348239293f; // Setting precision to 11 for double cout << "Double Type Number = " << setprecision(11) << a << endl; // Setting precision to 7 for float cout << "Float Type Number = " << setprecision(7) << b << endl; return 0; )

Produzione

 Numero di tipo doppio = 3,9123482393 Numero di tipo galleggiante = 3,912348

Dal programma sopra, possiamo vedere che abbiamo impostato due diversi valori di precisione per floate double.

In entrambi i casi, la precisione è inferiore alle cifre effettive del numero. Quindi l'ultima cifra viene arrotondata e il resto viene troncato.

Nota: se specifichiamo una precisione maggiore della precisione del tipo di dati stesso (7 per floate 15 per double), il compilatore ci darà valori di spazzatura dopo che il limite di precisione è stato superato, come si può vedere con l' floatoutput nell'esempio 2 .

Lavora con numeri esponenziali

Come accennato in precedenza, floate doublepuò anche essere utilizzato per rappresentare numeri esponenziali . Per esempio,

 // ex = 325 X (10 25) double ex = 325E25;

C ++ restituisce numeri esponenziali e numeri molto grandi in un formato chiamato formato scientifico . La variabile ex verrà emessa in questo formato per impostazione predefinita poiché è un numero molto grande.

Per forzare C ++ a visualizzare i nostri numeri in virgola mobile nel scientificformato indipendentemente dalla dimensione del numero, usiamo l' identificatore di formato scientificall'interno di cout.

 double num = 3.25; // ex = 325 X (10 25) double ex = 325E25; // using scientific format cout << scientific << num; cout << scientific << ex;

Oltre a questo, esiste un altro identificatore di formato noto come fixed, che visualizza i numeri in virgola mobile nel formato decimale.

È simile alla visualizzazione di numeri in virgola mobile utilizzando solo coutsenza setprecision(), tranne per il fatto che fixedvisualizza numeri fino a 6 punti decimali.

D'altra parte, utilizzando solo le coutcifre di visualizzazione in base al compilatore specifico (6 cifre totali nel caso del compilatore MinGW , comprese le cifre prima del punto decimale).

Esempio 4: formati fissi e scientifici

 #include #include using namespace std; int main() ( // Creating a decimal double type variable double a = 3.912348239293; // Creating an exponential double type variable double ex1 = 325e+2; // Creating a float type variable float b = 3.912348239293f; // Creating an exponential float type variable float ex2 = 325e+2f; // Displaying output with fixed cout << "Displaying Output With fixed:" << endl; cout << "Double Type Number 1 = " << fixed << a << endl; cout << "Double Type Number 2 = " << fixed << ex1 << endl; cout << "Float Type Number 1 = " << fixed << b << endl; cout << "Float Type Number 2 = " << fixed << ex2 << endl; // Displaying output with scientific cout << "Displaying Output With scientific:" << endl; cout << "Double Type Number 1 = " << scientific << a << endl; cout << "Double Type Number 2 = " << scientific << ex1 << endl; cout << "Float Type Number 1 = " << scientific << b << endl; cout << "Float Type Number 2 = " << scientific << ex2 << endl; return 0; )

Produzione

 Displaying Output With fixed: Double Type Number 1 = 3.912348 Double Type Number 2 = 32500.000000 Float Type Number 1 = 3.912348 Float Type Number 2 = 32500.000000 Displaying Output With scientific: Double Type Number 1 = 3.912348e+000 Double Type Number 2 = 3.250000e+004 Float Type Number 1 = 3.912348e+000 Float Type Number 2 = 3.250000e+004

long double

Apart from float and double, there is another data type that can store floating-point numbers. This is known as long double.

It usually occupies a space of 12 bytes (depends on the computer system in use), and its precision is at least the same as double, though most of the time, it is greater than that of double.

long double values should end with L. For example,

 // declaring a long double variable long double num_ldb = 2.569L;

Nota: i tipi di dati a virgola mobile supportati da C ++ sono float, doublee long double. Non c'è long float.

Articoli interessanti...