C中的浮动和双精度

在C中,double比float更精确,根据“C primerplus第六版”一书(第80页),浮点数可以代表至少6个有效数字,双数字可以代表至少13个有效数字。 所以我尝试用这个简单的例子validation:

#include int main(void){ float a = 3.3333333; // 7 significant digits double b = 3.33333333333333;// 14 significant digits printf("\nFloat: %f\n", a); printf("Double: %f\n", b); return 0; } 

这是该计划的输出:

 Float : 3.333333 Double: 3.333333 

为什么double值与float值具有相同的精度,而不是显示更多有效数字?

这样的大多数问题可以通过咨询C标准来回答:

每个转换规范都由’%’字符引入…之后依次出现以下内容:

  • 一个可选的精度,它给出了a,A,e,E,f和F转换说明符的基数字符后出现的位数。

描述f说明符:

double参数应转换为“[ – ] ddd.ddd”样式的十进制表示法,其中基数字符后的位数等于精度规范。 如果缺少精度,则应视为6

因此,通过简单地使用%f ,您指示printf打印后的六位数字. 。 如果要查看更多数字,则需要指定精度: %.15f

您需要显示更多有效数字。 如果你这样做:

 printf("\nFloat: %.20f\n", a); printf("Double: %.20f\n", b); 

你会得到这个:

 Float: 3.33333325386047363281 Double: 3.33333333333332992865