亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c語言,浮點數做for循環,然后if判斷,為什么0.5的遞增就可以輸出結果,而其他(例如0.1的遞增)就不可以?

c語言,浮點數做for循環,然后if判斷,為什么0.5的遞增就可以輸出結果,而其他(例如0.1的遞增)就不可以?

RoughColorText 2016-11-18 00:27:40
如上圖,以下是代碼#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;}
查看完整描述

4 回答

?
onemoo

TA貢獻883條經驗 獲得超454個贊

正因為浮點數表示得不精確,多次運算后可能會發生數據“漂移”的現象。

實踐中判斷兩個浮點數是否相等通用這樣的辦法:用兩個浮點數差的絕對值和一個很小的數(如0.000001或選擇適當的精度)相比較,如果差異比參考值小就認為它們相等。

查看完整回答
反對 回復 2016-11-19
?
隕星復燃

TA貢獻6條經驗 獲得超1個贊

我覺得之前那位說得對,

符點數存儲標準IEEE754,

符點數是采用二進制科學計數法來進行存儲的,因此,絕大多數的數在計算機中是不能 精確 表示的


查看完整回答
反對 回復 2016-11-18
?
NoBB_

TA貢獻13條經驗 獲得超11個贊

0.5等于2的-1次方,計算機可以準確表示;而0.1,不能精確表示,只能盡量精確; 即c-d或b+d不會是個整數。

查看完整回答
反對 回復 2016-11-18
?
RoughColorText

TA貢獻11條經驗 獲得超10個贊

是和這個有關系嗎?

符點數存儲標準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遞增的時候又可以了?

查看完整回答
反對 回復 2016-11-18
  • 4 回答
  • 0 關注
  • 4315 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號