Które typy danych w języku C++ reprezentują liczby rzeczywiste?
A.
double i shortB.
float i doubleC.
double i boolD.
float i longPytanie z egzaminu CKE, czerwiec 2023 (arkusz EE.09-SG-23.06).
W języku C++ typy float i double należą do typów zmiennoprzecinkowych, czyli takich, które służą do przechowywania liczb rzeczywistych w przybliżeniu. W praktyce oznacza to wartości z częścią ułamkową, na przykład 3.14, -0.5 albo 125.75. Typ float zwykle zajmuje mniej pamięci i ma mniejszą precyzję, natomiast double jest dokładniejszy i bardzo często używany jako domyślny wybór do obliczeń matematycznych. Moim zdaniem w normalnym kodzie szkolnym i zawodowym double jest bezpieczniejszy, jeśli nie masz konkretnego powodu, żeby oszczędzać pamięć. Trzeba też pamiętać, że liczby zmiennoprzecinkowe nie zapisują każdej wartości idealnie, więc porównywanie ich operatorem == bywa ryzykowne. Dobra praktyka to porównywanie z pewną tolerancją, np. sprawdzanie, czy różnica jest bardzo mała. W C++ istnieje także long double, ale w tym pytaniu poprawna para z podanych możliwości to właśnie float i double.
W C++ liczby rzeczywiste, czyli takie z częścią ułamkową, reprezentuje się za pomocą typów zmiennoprzecinkowych. Do tej grupy należą przede wszystkim float, double oraz także long double, chociaż ten ostatni nie występuje w poprawnej parze odpowiedzi. Typy takie jak bool, short i long pełnią zupełnie inne role, więc mieszanie ich z double albo float prowadzi do złego wniosku. Bool nie jest typem liczbowym do obliczeń rzeczywistych, tylko typem logicznym. Przechowuje wartości prawda albo fałsz, w C++ zapisywane jako true i false. Da się go czasem automatycznie zamienić na 0 lub 1, ale to nie znaczy, że jest przeznaczony do reprezentowania liczb z przecinkiem. Short oraz long to typy całkowite, czyli przechowują liczby bez części ułamkowej, na przykład -10, 0, 45 albo 100000, zależnie od zakresu danego typu. Typowy błąd polega na tym, że ktoś widzi nazwę long i kojarzy ją z większą dokładnością, a to trochę pułapka. Samo long oznacza liczbę całkowitą o większym zakresie niż int na wielu platformach, a nie liczbę rzeczywistą. Dopiero long double jest typem zmiennoprzecinkowym. Z mojego doświadczenia warto zapamiętać prostą zasadę: jeśli potrzebujesz ułamków w C++, patrzysz na float, double lub long double, a nie na bool, short, int czy long.