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

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

為什么我看到一個雙變量初始化為一些值,如21.4為21.399999618530273?

為什么我看到一個雙變量初始化為一些值,如21.4為21.399999618530273?

為什么我看到一個雙變量初始化為一些值,如21.4為21.399999618530273?double r = 11.631;double theta = 21.4;在調試器中,如下所示11.631000000000000和21.399999618530273.我怎么才能避免這種情況?
查看完整描述

3 回答

?
隔江千里

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

這些精度問題是由于內部表示法對于浮點數,你沒有什么可以避免的。

順便說一下,在運行時打印這些值仍然可以得到正確的結果,至少使用現代的C+編譯器是這樣的。對于大多數操作來說,這并不是什么大問題。


查看完整回答
反對 回復 2019-06-10
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

它處理Excel 2007中類似的二進制浮點精度問題:

看到結尾有很多0110 0110 0110嗎?那是因為0.1二進制沒有精確的表示..這是一個重復的二進制數。就像1/3沒有小數表示一樣。1/3是0.33333333,你必須永遠寫3。如果你失去耐心,你會得到一些不準確的東西。

所以你可以想象,在十進制中,如果你試著做3*1/3,而你沒有時間永遠寫3的話,你得到的結果將是0.99999999,而不是1,人們會因為你錯了而生氣。


查看完整回答
反對 回復 2019-06-10
?
躍然一笑

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

如果您有如下所示的值:

double theta = 21.4;

你想做的是:

if (theta == 21.4){}

你必須有點聰明,你需要檢查θ的值是否是真的接近21.4,但不一定是這個值。

if (fabs(theta - 21.4) <= 1e-6){}


查看完整回答
反對 回復 2019-06-10
  • 3 回答
  • 0 關注
  • 633 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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