Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的浮点和双精度_C_Precision - Fatal编程技术网

C语言中的浮点和双精度

C语言中的浮点和双精度,c,precision,C,Precision,在C语言中,双精度比浮点精度更高,根据《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 pr

在C语言中,双精度比浮点精度更高,根据《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;
} 

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

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

printf("\nFloat:  %.20f\n", a);
printf("Double: %.20f\n", b);
您将得到以下结果:

Float:  3.33333325386047363281
Double: 3.33333333333332992865 

大多数类似的问题都可以通过参考C标准来回答:

每个转换规范都由“%”字符引入。。。之后,将依次显示以下内容:

  • 一个可选的精度,提供。。。a、a、e、e、f和f转换说明符的基数字符后显示的位数
描述
f
说明符:

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


因此,只需使用
%f
,您就可以指示
printf
后面打印六位数字。如果希望看到更多的数字,则需要指定精度:
%.15f
,例如。

根据,小数点后要打印的默认位数为6。请参见示例。
3.3333333
有8个有效数字,就像
33.333333
333.33333
3333.3333
等。这就是它的工作原理。感谢大家的帮助
double
有有效的十进制数字,而不是13。同样适用于长双精度,它可以与双精度相同。谢谢你。我不知道,我是C编程新手,所以…如果你能给我提供C标准的链接,我将不胜感激。ThanksDouble precision有53位尾数(假定前导1位,存储52位),即16位(~15.9546位)。超出该范围的数字与转换为字符串(将二进制小数转换为十进制小数)相关。
Float:  3.33333325386047363281
Double: 3.33333333333332992865