Consider the following snippet of code:
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
可以获得正确的结果。你能解释一下这些函数处理精度时所使用的算法吗?