INF.04 · pytanie 449
Który z wymienionych typów danych języka C++ jest typem stałoprzecinkowym?
- Afloat
- BintPoprawna
- Cdouble
- Dlong double
Wyjaśnienie
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.