关于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;}输出结果为

能否分析下输出结果相同与不同的原因?
(我知道位数太多会截尾,但是位数太少会如何呢?)
展开
 我来答
潭秋梵暖24
2012-11-19 · TA获得超过140个赞
知道答主
回答量:83
采纳率:100%
帮助的人:36.7万
展开全部
其实代码已经告诉你了:double的精度为16位,float的精度为7位。%?,其中?表示多少位。当打印的位数小于精度的时候,程序正常输出,当大于精度的时候,后面的数字就不对了。如第三行,数字double正常,而float是0.3333333432674408,前7为正常输出,后面的9位由于不在精度范围,但程序告知仍然打印16位,此时就会将正确结果后面的位数也打印出来(尽管这些数字不正确----,可能是内存没有初始化,也可能是系统程序其他的数据)。不明白可以call我!!

诚信ID
匿名用户
2012-11-18
展开全部
double 精度为16位
float 精度为8位
第一行相同是因为你把它们的精度都设为4位
第二行不同是:后一个的精度已超过8位
第三行与第二行相同
第四行就都超出了它们本身的精度
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
益杨氏铁绫
2020-01-08 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:30%
帮助的人:954万
展开全部
float
为单精度,有效数字为6~7位;double
为双精度,有效数字为15~16位。但他们在输出时,小数点后都有6位小数。例如3.123456
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式