PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 浮點數比較問題
作者:
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 我記得更加完善
繼續閱讀
Re: [問題] printf & 型態轉換
drag
[問題]學習unique_ptr遇到的compile error
shaopin
[問題] SDL2 RenderPresent 的敘述看不太懂
ResolaQQ
[問題] 關於用win32 API 開啟檔案
jyhchyunlu
[問題] intersect Ray box and Triangle
bjk
[問題] 能強化c/c++演算或邏輯的書..
mistborn82
[問題關於建構式的小問題
a2318aa
[問題] 螞蟻書 C++ How to Program版本
ununnihao
[問題] array initialize macro
james732
[分享] Boost build 心得
Caesar08
Links
booklink
Contact Us: admin [ a t ] ucptt.com