Рассмотрим следующий фрагмент кода:
float val1 = 214.20;
double val2 = 214.20;
printf("float : %f, %4.6f, %4.2f \n", val1, val1, val1);
printf("double: %f, %4.6f, %4.2f \n", val2, val2, val2);
Какие выходы:
float : 214.199997, 214.199997, 214.20 | <- the correct value I wanted
double: 214.200000, 214.200000, 214.20 |
Я понимаю, что 214.20
имеет бесконечное двоичное представление. Первые два элемента первой строки имеют приближение к предполагаемому значению, но последний, похоже, не имеет никакого приближения вообще, и это привело меня к следующему вопросу:
Как функции scanf
, fscanf
, printf
, fprintf
(и т. Д.) Обрабатывают точные форматы?
Без указания точности, printf
распечатал приблизительное значение, но с %4.2f
он дал правильный результат. Можете ли вы объяснить мне алгоритм, используемый этими функциями для обработки точности?