C中的浮动和双精度

Ton*_*Joe 0 c precision

在C中,double比float更精确,根据"C primerplus第六版"一书(第80页),浮点数可以代表至少6位有效数字,而double可以代表至少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;
} 
Run Code Online (Sandbox Code Playgroud)

这是该计划的输出:

Float : 3.333333
Double: 3.333333
Run Code Online (Sandbox Code Playgroud)

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

dbu*_*ush 5

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

printf("\nFloat:  %.20f\n", a);
printf("Double: %.20f\n", b);
Run Code Online (Sandbox Code Playgroud)

你会得到这个:

Float:  3.33333325386047363281
Double: 3.33333333333332992865 
Run Code Online (Sandbox Code Playgroud)


Ste*_*non 5

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

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

...

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

描述说明f符:

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

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