C中的浮动和双精度

时间:2015-08-29 21:57:19

标签: c precision

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

#include<stdio.h>

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值具有相同的精度,而不是显示更多有效数字?

2 个答案:

答案 0 :(得分:5)

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

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

你会得到这个:

Float:  3.33333325386047363281
Double: 3.33333333333332992865 

答案 1 :(得分:5)

大多数问题都可以通过咨询C标准来解答:

  

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

     

...

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

描述f说明符:

  

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

因此,只需使用%f,即表示printf.之后打印六位数字。如果要查看更多数字,则需要指定精度:%.15f,例如。