Przejdź do głównej treści

Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji

Zawód: Technik programista

Kategorie: Programowanie

Który z wymienionych typów danych języka C++ jest typem stałoprzecinkowym?

A.
long double
B.
double
C.
int
D.
float
Typ int jest w tym pytaniu właściwą odpowiedzią, bo przechowuje liczby całkowite, czyli bez części ułamkowej. W szkolnym i praktycznym uproszczeniu taki typ traktuje się jako stałoprzecinkowy: pozycja przecinka jest stała, a konkretnie znajduje się za ostatnią cyfrą liczby, więc int nie zapisze wartości typu 3,14 albo 0,5. Formalnie w standardzie C++ int należy do typów całkowitych, czyli integral types, a nie do typów zmiennoprzecinkowych. To ważne rozróżnienie, bo float, double i long double używają reprezentacji z mantysą i wykładnikiem, przez co mogą zapisywać ułamki, ale też mają problemy z zaokrągleniami.

W praktyce int stosuje się do liczników pętli, numerów opcji w menu, liczby punktów, indeksów pomocniczych czy prostych obliczeń całkowitych. Moim zdaniem warto od razu pamiętać o dobrej praktyce: jeśli rozmiar typu ma znaczenie, lepiej użyć typów z biblioteki <cstdint>, np. std::int32_t, bo zwykły int może mieć różny zakres na różnych platformach. Do rozmiarów tablic i kontenerów częściej używa się std::size_t. Najważniejsza myśl jest taka: int nie przechowuje części po przecinku, więc spośród podanych odpowiedzi najlepiej pasuje do typu stałoprzecinkowego.
W tym pytaniu łatwo pomylić dwa podobnie brzmiące pojęcia: stałoprzecinkowy i zmiennoprzecinkowy. W C++ typy float, double oraz long double należą do typów zmiennoprzecinkowych. Oznacza to, że liczba jest zapisywana w postaci przybliżonej, zwykle z częścią znaczącą oraz wykładnikiem. Dzięki temu można przechowywać bardzo małe i bardzo duże wartości, na przykład 0,001 albo 1,5 miliona, ale kosztem możliwych błędów zaokrągleń. Dlatego w kodzie produkcyjnym raczej nie porównuje się takich liczb prostym warunkiem typu a == b, tylko stosuje się tolerancję błędu, tak zwany epsilon. To jest taka praktyczna pułapka, która potem wychodzi przy testowaniu.

Float bywa wybierany przez skojarzenie z liczbami po przecinku, ale właśnie dlatego nie pasuje do pojęcia stałoprzecinkowego w tym zestawie odpowiedzi. Double również zapisuje wartości ułamkowe, tylko z większą precyzją niż float, więc większa dokładność nie zmienia jego kategorii. Long double może mylić nazwą, bo słowo long kojarzy się czasem z typami całkowitymi, takimi jak long int, ale long double nadal jest typem zmiennoprzecinkowym. Z mojego doświadczenia najczęstszy błąd polega na tym, że ktoś patrzy na to, czy typ potrafi zapisać przecinek, zamiast zapytać: czy przecinek ma stałą pozycję, czy może przesuwa się zależnie od wykładnika. Spośród podanych typów tylko int reprezentuje wartości całkowite bez części ułamkowej, więc to on jest tutaj oczekiwaną odpowiedzią.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.