待辦事項 #30936

浮動小数点の比較がおかしい

啟用日期: 2013-03-09 16:51 最後更新: 2013-06-30 14:04

回報者:
負責人:
類型:
狀態:
關閉
元件:
(無)
里程碑:
優先權:
5 - 中
嚴重程度:
5 - 中
處理結果:
修正
檔案:

細節

a = 0.15 + 0.15
b = 0.1 + 0.2

のときif (a == b)が真にならない。if (a - b)は0なので偽になるはずが真になる。

これは浮動小数点のまるめ誤差が原因で起こる。浮動小数点同士を直接比較せずに、その差が機械イプシロン以下であるときに等しいと判定しなければならない。

Ticket History (3/5 Histories)

2013-03-09 16:51 Updated by: panacoran
  • New Ticket "浮動小数点の比較がおかしい" created
2013-03-11 13:47 Updated by: panacoran
  • Ticket Close date is changed to 2013-03-11 13:47
  • 狀態 Update from 開啟 to 關閉
評語

r444で直しました。

2013-06-11 00:48 Updated by: panacoran
  • 狀態 Update from 關閉 to 開啟
評語

絶対誤差を機械イプシロンと比較しているため、10 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 == 11では誤差が大きすぎて真にならない。それと比較演算で誤差を配慮していないので、0.15 + 0.15 < 0.1 + 0.2が真になってしまう。

2013-06-11 11:01 Updated by: panacoran
  • 狀態 Update from 開啟 to 關閉
  • Ticket Close date is changed to 2013-06-11 11:01
評語

r456で直しました。

2013-06-30 14:04 Updated by: panacoran
  • 處理結果 Update from to 修正
評語

相対誤差だけで比較しているため、今度は非常に小さな値の等値比較がおかしくなっています。絶対誤差と相対誤差のどちらかを満たしているときに、等値であると見なすようにr477で直しました。

Attachment File List

No attachments

編輯

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登入