Egzamin zawodowyPortal części pisemnej

INF.04 · pytanie 449

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

  1. Afloat
  2. BintPoprawna
  3. Cdouble
  4. 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.