C语言中的浮点和双精度
在C语言中,双精度比浮点精度更高,根据《C primerplus第六版》一书(第80页),浮点可以表示至少6个有效数字,双精度可以表示至少13个有效数字。因此,我尝试用这个简单的例子来验证: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
#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