Pamiętaj, że współczesne komputery przetwarzają wszystkie liczby (i nie tylko) binarnie - całkowite (int
, long
), zmiennoprzecinkowe (float
, double
) itd.
W binarnej reprezentacji float
, double
czy long double
na 99.99% nie da się zapisać dokładnej wartości 1234567.89
, a jedynie przybliżenie - gdzie na ostatnim miejscu (to może być choćby i 300-na cyfra znacząca) będzie błąd zaokrąglenia. Bardzo dużo ładnych
liczb i ułamków dziesiętnych jest bardzo nieładnych w zapisie binarnym. Triki
tu nie pomogą - zawsze wpakujesz się w przypadek, gdy po zrzutowaniu na typ całkowity coś nie będzie się zgadzać, przy dodawaniu wyniki zaczną się lekko rozjeżdżać itd. Może się okazać, że porównanie liczb zmiennoprzecinkowych w rodzaju 1.4 + 2.6 == 4.0
nie będzie prawdziwe, właśnie przez błędy zaokrągleń.
Jak zależy Ci na dokładności, to musisz polegać na dedykowanych typach (albo je sobie stworzyć - w ramach ćwiczenia). Coś jak Decimal
czy BigDecimal
.