C ++ float i double

W tym samouczku dowiemy się o typach danych typu float i double na podstawie przykładów. Przyjrzymy się również niektórym kluczowym różnicom między nimi i kiedy ich używać.

W C ++ oba typy danych floati doublesą używane dla wartości zmiennoprzecinkowych. Liczby zmiennoprzecinkowe są używane jako wartości dziesiętne i wykładnicze . Na przykład,

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

Musimy dodać przyrostek flub Fna końcu floatwartości. Dzieje się tak, ponieważ kompilator interpretuje wartości dziesiętne bez sufiksu jako double.

Rozważ ten kod.

 float a = 5.6;

Tutaj przypisaliśmy doublewartość floatzmiennej.

W takim przypadku kompilator automatycznie konwertuje do wersji 5.6 , floatzanim zostanie przypisana do zmiennej a. Może to spowodować utratę danych. Aby dowiedzieć się więcej, odwiedź stronę Konwersja typu C ++.

Różnica między float i double

pływak podwójnie
Rozmiar: 4 bajty Rozmiar: 8 bajtów
Precyzja: ogólnie dokładność do 7 cyfr dziesiętnych Precyzja: ogólnie dokładność do 15 cyfr dziesiętnych
Przykład: 3.56f , 3e5fetc. Przykład: 3.56 , 3e5etc.

Uwaga: Jeśli nie masz określonych wymagań, zawsze używaj doublezamiast float, ponieważ floatzmienne mogą wprowadzać błędy podczas pracy z dużymi liczbami.

Przykład 1: C ++ float i 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; )

Wynik

 Podwójny numer typu = 3,91235 Liczba typu zmiennoprzecinkowego = 3,91235

Uwaga: kompilator użyty w tym przykładzie (kompilator MinGW) zezwalał na 6 cyfr. Zatem nasze wartości zmiennych zostały zaokrąglone i obcięte do 6 cyfr przez kompilator.

setprecision (), aby określić punkty dziesiętne

Za coutpomocą setprecision()funkcji możemy określić liczbę miejsc dziesiętnych do wydrukowania .

Ta funkcja jest zdefiniowana w iomanippliku nagłówkowym, który oznacza manipulację wejściem / wyjściem .

Przykład 2: Używanie setprecision () dla liczb zmiennoprzecinkowych

 #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; )

Wynik

 Podwójny numer typu = 3,912348239293 Numer typu zmiennoprzecinkowego = 3,912348270416

Jak widać na powyższym przykładzie, określiliśmy dokładność do 13 cyfr.

 cout << setprecision(13);

Wartość zmiennoprzecinkowa, którą przypisaliśmy naszym zmiennym, również składa się z 13 cyfr.

Jednak ponieważ floatma precyzję do zaledwie 7 cyfr, pokazuje wartości śmieci po przekroczeniu precyzji.

Nasza doublezmienna pokazuje poprawną liczbę, ponieważ ma dokładność 15 cyfr, podczas gdy sama liczba składa się z 13 cyfr.

Alternatywnie podczas ich drukowania możemy określić różne dokładności dla różnych zmiennych.

Przykład 3: Różne dokładności dla różnych zmiennych

 #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; )

Wynik

 Podwójny numer typu = 3,9123482393 Liczba zmiennoprzecinkowa = 3,912348

Z powyższego programu widać, że ustawiliśmy dwie różne wartości dokładności dla floati double.

W obu przypadkach dokładność jest mniejsza niż rzeczywiste cyfry liczby. Tak więc ostatnia cyfra jest zaokrąglana, a reszta jest obcięta.

Uwaga: Jeśli określimy precyzję większą niż precyzja samego typu danych (7 for floati 15 for double), kompilator poda nam wartości śmieciowe po przekroczeniu limitu dokładności, jak widać na floatwyjściu w przykładzie 2 .

Pracuj z liczbami wykładniczymi

Jak wspomniano powyżej, floata doublemoże być również używane do reprezentowania numery wykładnicze . Na przykład,

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

C ++ generuje liczby wykładnicze i bardzo duże liczby w formacie zwanym formatem naukowym . Zmienna ex zostanie domyślnie wyprowadzona w tym formacie, ponieważ jest to bardzo duża liczba.

Aby zmusić C ++ do wyświetlania naszych liczb zmiennoprzecinkowych w scientificformacie niezależnie od rozmiaru liczby, używamy specyfikatora formatu scientificwewnątrz cout.

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

Oprócz tego istnieje inny specyfikator formatu, znany jako fixed, który wyświetla liczby zmiennoprzecinkowe w formacie dziesiętnym.

Jest to podobne do wyświetlania liczb zmiennoprzecinkowych przy użyciu tylko coutbez setprecision(), z wyjątkiem faktu, że fixedwyświetla liczby do 6 miejsc po przecinku.

Z drugiej strony, tylko użycie coutwyświetla cyfry zgodnie z konkretnym kompilatorem (łącznie 6 cyfr w przypadku kompilatora MinGW , w tym cyfry przed kropką dziesiętną).

Przykład 4: Formaty stałe i naukowe

 #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; )

Wynik

 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;

Uwaga: zmiennoprzecinkowe typy danych obsługiwane przez C ++ to float, doublei long double. Nie ma long float.

Interesujące artykuły...