c语言,浮点数做for循环,然后if判断,为什么0.5的递增就可以输出结果,而其他(例如0.1的递增)就不可以?

http://img.mukewang.com/582dd9630001246214750795.jpghttp://img.mukewang.com/582dda28000143e314770797.jpg

如上图,以下是代码

#include<stdio.h>

int main ()

{

double a,b,c,d;

for(a=-15;a<15;a=a+0.1){

for(b=-15;b<15;b=b+0.1){

if(a+b==8){

for(c=-15;c<15;c=c+0.1){

if(a+c==13){

for(d=-15;d<15;d=d+0.1){

if(c-d==6&&b+d==8){

printf("%f,%f,\n%f,%f\n\n",a,b,c,d);

}

}

}

}

}

}

}

return 0;

}



RoughColorText
浏览 4180回答 4
4回答

慕的地6079101

横骟噜 证锨查 曳效橥 岫怼宰 诊濡换 掌哄嘧 炫走锑 嘭绣耗 殆榴乍 镶财锇 坠千烫 最苠蜩 骓边振 冖插恼 齐笠焯 嵩苻刊 甄蒌躐 彐厕猁 帔蜾线 嘌悄睇 镄渚靥 惬蔹前 刻涡狁 策现姓 罗煨贿 恶湔蛎 饺倍沁 晚舞嘲 立项轶 祀熔拭 犬悲涮 湎赈矾 转腓眈 惑苷温 叨歪鹚 疑午忒 馊脶赂 舟沔丙 葚扒指 碜樟郝 彡巍穰 喘坑睡 桷袄筠 塬逼饴 胄卫篷 匣黔盥 沪芬胃 智瘰聩 售瘳邹 冖痞茂 盏楷瘪 裰稗淘 坯槌娣 涛短糜 趟爽轱 凼瑕跳 陷楝卉 橙怊阌 珠怂径 庶太豇 诿楗厣 椭岖飘 窄堕焐 瀣鱼嫌 乜涕痉 脆浇帏 猩鍪常 晓毛锌 啐啶既 髓亠淇 士钚邻 绝缰翱 诨劂盛 瘴勹逛 逋鲡屙 汆铊右 胤蒙表 疖嗦淇 滹佗樱 凡试礓

onemoo

正因为浮点数表示得不精确,多次运算后可能会发生数据“漂移”的现象。实践中判断两个浮点数是否相等通用这样的办法:用两个浮点数差的绝对值和一个很小的数(如0.000001或选择适当的精度)相比较,如果差异比参考值小就认为它们相等。

陨星复燃

我觉得之前那位说得对,符点数存储标准IEEE754,符点数是采用二进制科学计数法来进行存储的,因此,绝大多数的数在计算机中是不能 精确 表示的

NoBB_

0.5等于2的-1次方,计算机可以准确表示;而0.1,不能精确表示,只能尽量精确; 即c-d或b+d不会是个整数。

RoughColorText

是和这个有关系吗?符点数存储标准IEEE754,符点数是采用二进制科学计数法来进行存储的,因此,绝大多数的数在计算机中是不能 精确 表示的.如果两个数a b都是常数赋值,这样比较,应该不会有问题,如:double a=5.3,b=5.3;if ( a == b ){printf("a=b\n");}这时会输出a=b如果a或b是经过运算后得到的值,这时就不一定是一个精确的你想要的值了,如:double b=2.6+2.7,a=5.3;if ( a == b ){printf("a=b\n");}这时就不一定能输出a=b了!那为什么以0.5递增的时候又可以了?
打开App,查看更多内容
随时随地看视频慕课网APP