0Pricing
C++ Academy · Lekcja

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 bajt
  • short — 2 bajty
  • int — 4 bajty
  • long — 4 lub 8 bajtów
  • long 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,295

Liczby 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ętnych
  • double — 64-bitowy, około 15 cyfr dziesiętnych
  • long 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 approximately

Bezpieczne 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 → int lub size_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

  1. Typy całkowitoliczbowe a zmiennoprzecinkowe
  2. Nagłówek cmath: pow, sqrt, abs, round
  3. Liczby losowe z nagłówkiem random
  4. Zakresy liczbowe i przepełnienie
← Powrót do C++ Academy