Typy całkowitoliczbowe a zmiennoprzecinkowe
Wybieraj właściwy typ liczbowy, rozumiejąc kompromisy dotyczące rozmiaru, zakresu i precyzji
Typy całkowitoliczbowe a zmiennoprzecinkowe to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.
Dwa światy liczb
C++ ma dwie rodziny typów liczbowych: całkowite (bez ułamków, dokładne) oraz zmiennoprzecinkowe (przybliżone, z ułamkami). Należy wybrać rodzinę odpowiednią do danego zadania.
Typy całkowite
Wbudowane typy całkowite i ich typowe rozmiary w systemach 64-bitowych:
char— 1 bajtshort— 2 bajtyint— 4 bajtylong— 4 lub 8 bajtówlong long— 8 bajtów
Ze znakiem a bez znaku
Dodanie unsigned usuwa zakres wartości ujemnych. Arytmetyka bez znaku zawija się modulo 2^N — czasami jest to przydatne, ale często prowadzi do trudnych do wykrycia błędów.
unsigned int u = 0;
u -= 1; // wraps around to 4,294,967,295Liczby całkowite o stałej szerokości
Gdy potrzebne są dokładne rozmiary, należy używać typów z <cstdint> — na przykład w protokołach, formatach plików lub kodzie przenośnym między platformami.
#include <cstdint>
int8_t tiny = 100;
int32_t word = 100000;
int64_t big = 1LL << 40;
uint64_t huge = 18446744073709551615ULL;Typy zmiennoprzecinkowe
Trzy typy zmiennoprzecinkowe o rosnącej precyzji:
float— 32-bitowy, około 7 cyfr dziesiętnychdouble— 64-bitowy, około 15 cyfr dziesiętnychlong double— zazwyczaj 80- lub 128-bitowy
Format IEEE 754
Liczby zmiennoprzecinkowe są zgodne ze standardem IEEE 754: znak, wykładnik, mantysa. Mogą reprezentować bardzo duże i bardzo małe wartości, ale nie zawsze dokładnie.
Problemy z liczbami zmiennoprzecinkowymi
Większości liczb dziesiętnych nie można dokładnie reprezentować w systemie binarnym. 0.1 + 0.2 nie jest dokładnie równe 0.3.
double sum = 0.1 + 0.2;
std::cout << (sum == 0.3); // false on most systems
std::cout << sum; // 0.3 but printed approximatelyBezpieczne porównywanie liczb zmiennoprzecinkowych
Nigdy nie należy porównywać liczb zmiennoprzecinkowych za pomocą ==. Należy porównywać je z użyciem niewielkiej tolerancji (epsilona).
bool approxEqual(double a, double b, double eps = 1e-9) {
return std::abs(a - b) < eps;
}Specjalne wartości zmiennoprzecinkowe
Liczby zmiennoprzecinkowe mają trzy specjalne wartości: NaN (nie jest liczbą), +inf i -inf. Do ich sprawdzania należy używać predykatów z <cmath>.
#include <cmath>
double x = std::sqrt(-1.0);
if (std::isnan(x)) std::cout << "Not a number";
if (std::isinf(x)) std::cout << "Infinity";Kiedy używać poszczególnych typów
Typ należy wybrać zależnie od dziedziny:
- Liczniki i indeksy →
intlubsize_t - Obliczenia naukowe lub graficzne →
double - Pieniądze → nigdy
double! Należy używać skalowanych liczb całkowitych (groszy) lub biblioteki dziesiętnej
Rozmiary typów zależą od platformy
Standard gwarantuje tylko minimalne rozmiary. int może mieć 16, 32 lub 64 bity. Aby zapewnić przenośność, w strukturach danych należy używać typów o stałej szerokości z <cstdint>.
Szybkie sprawdzenie
Jakiego typu należy użyć do dokładnego reprezentowania wartości pieniężnych?
Podsumowanie
Liczby całkowite są dokładne, a zmiennoprzecinkowe — przybliżone. Należy wybierać int lub liczby całkowite o stałej szerokości do liczników, double do obliczeń naukowych i nigdy nie używać liczb zmiennoprzecinkowych do pieniędzy. Liczby zmiennoprzecinkowe należy porównywać z tolerancją, nigdy za pomocą ==.
Często zadawane pytania
Czy lekcja „Typy całkowitoliczbowe a zmiennoprzecinkowe” jest bezpłatna?
Tak — pełny tekst „Typy całkowitoliczbowe a zmiennoprzecinkowe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Typy całkowitoliczbowe a zmiennoprzecinkowe”?
Wybieraj właściwy typ liczbowy, rozumiejąc kompromisy dotyczące rozmiaru, zakresu i precyzji Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C++ Academy?
Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Typy całkowitoliczbowe a zmiennoprzecinkowe”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?
Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Typy całkowitoliczbowe a zmiennoprzecinkowe
- Nagłówek cmath: pow, sqrt, abs, round
- Liczby losowe z nagłówkiem random
- Zakresy liczbowe i przepełnienie