zachowanie zaokrąglania printf dla gry podwójnej
Czy ktoś może wyjaśnić to zachowanie? Doskonale zdaję sobie sprawę z reprezentacji liczb zmiennoprzecinkowych na poziomie maszyny. Wydaje się, że jest to związane z printf i jego formatami. Obie liczby są reprezentowane dokładnie przez notację zmiennoprzecinkową (sprawdź: mnożenie przez 64 daje liczbę całkowitą).
<code>#include <stdio.h> #include <iostream> using namespace std; int main() { double x1=108.765625; printf("%34.30f\n", x1); printf("%9.5f\n", x1); printf("%34.30f\n", x1*64); double x2=108.046875; printf("%34.30lf\n", x2); printf("%9.5f\n", x2); printf("%34.30f\n", x2*64); } </code>
Wydajność:
<code>> 108.765625000000000000000000000000 > 108.76562 > 6961.000000000000000000000000000000 > 108.046875000000000000000000000000 > 108.04688 > 6915.000000000000000000000000000000 </code>
Zauważ, że pierwsza liczba zostaje zaokrąglona w dół, a druga zostaje zaokrąglona w górę.