Do rozważenia jest poniższy, prosty program w języku C:
#include <stdio.h>
int main()
{
float n=0;
for(unsigned i=0; i<1000000000; i++) n++;
printf("%f", n);
}
Oczywiście ze względu na specyfikę typu float (4-bajtowa liczba zmiennoprzecinkowa pojedynczej precyzji) nie otrzymujemy oczekiwanego 1000000000, a liczbę 16777216 (co jest równe 2^24 - czy to powinno mnie o czymś informować? znak, cecha, mantysa?). Myślę, że inkrementacja przebiega dokładnie miliard razy, natomiast dla typu float nie jesteśmy w stanie do liczby większej niż 16777216 dodać tak małą liczbę jak 1 - więc mamy do czynienia z pewną niedokładnością (czy zaokrąglaniem; jedynka dodaje się cały czas, ale jednak nie dodaje się :P).
Czy można to w jakiś sposób "oszukać", aby otrzymać wynik 1000000000 przy jednoczesnym zachowaniu zmiennej n jako typ float oraz jej inkrementacji dokładnie miliard razy?