Napotkałem na dziwny problem, który nie daje mi spokoju już od paru godzin - chodzi o dziwne zaokrąglanie gdy nie powinno ono mieć miejsca. Dla zmiennych
i := 0;
sX := 2147483615;
Resolution := 128;
następujące polecenie
qx0 := Trunc((i + sX) / Resolution);
powinno do qx0 wpisać 16777215, ale wpisuje 16777216 (dowód w załączniku). Próbowałem (i + sX) / Resolution
przypisać do jakiegoś singla lub doubla, jednak tam też od razu trafiała wartość 16777216 bez żadnych ułamków (poprawny wynik 2147483615 / 128 to 16777215,7421875).
qx0
, sX
, i
to Cardinal
, Resolution
to Integer
. Pracuje na Turbo Delphi.
Najdziwniejsze jest to, że w innym projekcie działa jak należy. Co może być nie tak?