Попробуйте тот же трюк с другим номером, скажем, 2318926965.
#include <stdio.h>
int main()
{
float f = 2318926965; /* 10 random digits */
printf("%10.f\n", f); /* prints only 8 correct digits */
printf("%10d\n", *(int*)&f); /* prints all digits correctly */
return 0;
}
$ gcc -Wall -O3 t.c
t.c: In function ‘main’:
t.c:7:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
$ ./a.out
2318926848
1326069764
Я не вижу увеличения точности с вашим "трюком", который зависит от битового представления чисел на вашей платформе (насколько я понимаю).
В этой теме есть еще несколько таких "магических поплавков" и способ их генерации.