![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
关于c语言中double与float的字符位数问题
一下代码:#include<stdio.h>#include<float.h>intmain(){doubled=1.0/3.0;floatf=1.0f/3.0f;pri...
一下代码:#include <stdio.h>#include <float.h>
int main(){ double d=1.0/3.0; float f=1.0f/3.0f;
printf("%.4lf \t\t\t%.4f\n",d,f); printf("%.12lf \t\t%.12f\n",d,f); printf("%.16lf \t%.16f\n",d,f); printf("%.32lf \t%.32f\n",d,f); printf("%d \t\t\t%d\n",DBL_DIG,FLT_DIG);
return 0;}输出结果为
能否分析下输出结果相同与不同的原因?
(我知道位数太多会截尾,但是位数太少会如何呢?) 展开
int main(){ double d=1.0/3.0; float f=1.0f/3.0f;
printf("%.4lf \t\t\t%.4f\n",d,f); printf("%.12lf \t\t%.12f\n",d,f); printf("%.16lf \t%.16f\n",d,f); printf("%.32lf \t%.32f\n",d,f); printf("%d \t\t\t%d\n",DBL_DIG,FLT_DIG);
return 0;}输出结果为
能否分析下输出结果相同与不同的原因?
(我知道位数太多会截尾,但是位数太少会如何呢?) 展开
3个回答
展开全部
其实代码已经告诉你了:double的精度为16位,float的精度为7位。%?,其中?表示多少位。当打印的位数小于精度的时候,程序正常输出,当大于精度的时候,后面的数字就不对了。如第三行,数字double正常,而float是0.3333333432674408,前7为正常输出,后面的9位由于不在精度范围,但程序告知仍然打印16位,此时就会将正确结果后面的位数也打印出来(尽管这些数字不正确----,可能是内存没有初始化,也可能是系统程序其他的数据)。不明白可以call我!!
诚信ID
诚信ID
2012-11-18
展开全部
double 精度为16位
float 精度为8位
第一行相同是因为你把它们的精度都设为4位
第二行不同是:后一个的精度已超过8位
第三行与第二行相同
第四行就都超出了它们本身的精度
float 精度为8位
第一行相同是因为你把它们的精度都设为4位
第二行不同是:后一个的精度已超过8位
第三行与第二行相同
第四行就都超出了它们本身的精度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
float
为单精度,有效数字为6~7位;double
为双精度,有效数字为15~16位。但他们在输出时,小数点后都有6位小数。例如3.123456
为单精度,有效数字为6~7位;double
为双精度,有效数字为15~16位。但他们在输出时,小数点后都有6位小数。例如3.123456
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询