关于C语言float

float型数据的舍入误差是潭浩强的书.第3版.还有,定义FLOAT算1/4,为什么等于0而不是0.25?INT肯定是等于0的,FLOAT为什么也等于0.书上说a=123... float型数据的舍入误差
是潭浩强的书.第3版.
还有,定义FLOAT算1/4,为什么等于0而不是0.25?
INT肯定是等于0的,FLOAT为什么也等于0.

书上说
a=123456.789e5;
b=a+20;
printf("f/n",b);

这里的误差我能懂,因为精确位数的问题.
书上还说用程序计算1.0/3.0*3的结果并不等于1.但是我TURBO C算出1了.
1.0/3.0*3不存在这样的问题吧.
我用的是Turbo C&C++ 3 英文版.
还有,1/4为什么等于0?也是FLOAT型.
如果INT型=0我能理解,FLOAT为什么也等于0,而不是0.25??
回答一下谢谢
书上还说用程序计算1.0/3.0*3的结果并不等于1.但是我TURBO C算出1了.

azheng757大哥,最后一个疑问了.为什么
printf("%d",1.0/3.0*3);
0
算的结果=0?
这样不也是先转化为精度高的吗?
我是自学的...

意思是
1/3=0.333333333........
再0.33333333.......*3=0.999999999999999999.....
是吗?
突然想起来,以前想过的一个问题.
1/3*3=1
却0.3333333333...*3=0.999999999....
晕死.1和0.999999....怎么看也是1大 = =!!
吐血身亡.
展开
 我来答
vanassembly
2008-11-09 · TA获得超过218个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:125万
展开全部
你如果是这样定义
float m=1/4;
则m=0.00
1 4皆为整型,按整型计算得0,再转为实型赋值
若定义
float m=1.0/4;float m=1/4.0;float m=1.0/4.0;
m=0.25
最后一个不用说
前两个类型不匹配,在这种情况下,都先转化为精度高的,即实型,再运算,最后再将运算结果转化为定义变量的类型即实型赋值

printf("%f",1.0/3.0*3);
1.000000
printf("%d",1.0/3.0*3);
0
你可能是这样算的
int a=1.0/3.0*3;
printf("%d",a);
1

没错,是转化为精度高的浮点数,结果也是实型的,
但你知道实型是有误差的,即使精度很高,可能结果是0.999999……
但不是1,对其取整,结果还是0,它只会舍不会入

我想是吧
冰雨落璃5b
2008-11-07 · TA获得超过232个赞
知道小有建树答主
回答量:252
采纳率:0%
帮助的人:0
展开全部
应该为1.0/4.0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式