程序运行结果和自己理解的不一样,求助大家
#include"stdio.h"void main()
{
int a=5;
char c='a';
float f=5.3;
double m=12.65;
double result;
printf("a+c=%d\n",a+c);
printf("a+c=%c\n",a+c);
printf("f+m=%f\n",f+m);
printf("a+m=%f\n",a+m);
printf("c+f=%f\n",c+f);
result=a+c*(f+m);
printf("double=%f\n",result);
}
运行结果:
a+c=102
a+c=f
f+m=17.950000
a+m=17.650000
c+f=102.300000
double=1746.150019
Press any key to continue
其他的值都和我理解的一样,但是double的值为什么不是1746.150000,而是1746.150019?这是C语言的什么隐藏规则吗?
我是新手 大家不要见笑啊呵呵问题有点低级 很简单C不能对浮点型数据给予完全正确的存储 会有一定的偏差 这是无法避免的
所以才有这么一道题目 :
如何判断一个浮点型数据是否为0
答案就是如果这个数如果在0.000001~0.000010(这个范围我忘了)
这个答案对不对把我也不大(你可以问度娘)反正就是这么个意思
浮点型数据是无法百分百正确的存储的
但误差绝对不会很大 如果你*1000W就另当别论了(*^__^*) 嘻嘻……
希望能帮到你
申请最佳啊 所以一般就不要写 i<5 如果i是浮点型的话很有肯是4.99999或5.00001 这样你知道的返回的结果一个是真一个是假所以可能会出现莫名其妙的错误
申请最佳答案啊(*^__^*) 嘻嘻…… C中浮点型数据不能准确存储!比如你写i=60.0,可能输入的结果就是59.999998! 这是double类型的精度问题。很正常。
http://user.qzone.qq.com/752647107/infocenter#!app=2&via=QZ.HashRefresh&pos=1362728500 正常的,双精度数就是这样,总会有那么0.0000010左右的偏差,你可以让他只输出小数点后三四位就可以看不出来的, 刚查了C语言的话浮点数一般是用IEEE 754标准定义的单精度浮点数与双精度浮点数。这些浮点数都是会损失精度的,在计算中会带来偏差,,,就是尾数的话不定的,也可以是说损失了,然后随便给了给数 所以你最好用的估算,设置一个e-10什么的,然后判断fabs(f-5)<e-10什么的就可以理解为相等了 帮顶
页:
[1]