Код
float x = 3.141592653589793238;
double z = 3.141592653589793238;
printf("x=%f\n", x);
printf("z=%f\n", z);
printf("x=%20.18f\n", x);
printf("z=%20.18f\n", z);
предоставит вам выход
x=3.141593
z=3.141593
x=3.141592741012573242
z=3.141592653589793116
где на третьей строке вывода 741012573242
находится мусор, а на четвертой строке 116
- мусор. У удвоений всегда есть 16 значимых цифр, в то время как поплавки всегда имеют 7 значительных цифр? Почему у двух парней 14 значимых цифр?