[問題] 浮點數比較問題

作者: popular10347 (popular)   2016-02-19 20:58:46
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
浮點數因為有誤差,因此在做比較時會讓兩數相減後取絕對值
例如:
float a=0.0;
while(a != 1.0)
a+=0.1;
這個例子會有無窮迴圈
所以需要改成如下:
float a=0.0;
while(abs(a-1.0)<=0.001)
a+=0.1;
這樣才不會無窮迴圈
但是,0.001是如何決定?
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
作者: Killercat (殺人貓™)   2016-02-20 21:06:00
有比較簡單的方法,放大10^n以後硬轉intn要多少自己決定
作者: LPH66 (-6.2598534e+18f)   2016-02-19 21:15:00
隨你, 夠小就好
作者: LiloHuang (十年一刻)   2016-02-19 21:25:00
std::numeric_limits::epsilon() http://goo.gl/Rgqyy3
作者: LPH66 (-6.2598534e+18f)   2016-02-19 21:52:00
樓上這個差距大概多算個幾次就不成立了吧那個值是 1 跟比 1 大的最小浮點數之間的差所以當多次運算誤差變大後就不會滿足了基本上這種東西取多少真的要看需求, 有的 0.001 就夠有的可能會到 1e-5 或 1e-8 甚至 1e-10 都有可能
作者: LiloHuang (十年一刻)   2016-02-19 21:58:00
樓上說的沒錯,忘了說重點是在於網頁裡面的範例Google C++ Test 裡面的 AlmostEquals 我記得更加完善

Links booklink

Contact Us: admin [ a t ] ucptt.com