PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 浮點數是否適合比較大小
作者:
xxxx9659
(嘎嘎嘎嘎嘎)
2014-08-12 18:05:06
浮點數作等於運算適合嗎??
double d1, d2;
d1 = 0.0;
d2 = 0.0;
if(d1 == d2) printf("OK!\n");
d1 += d2;
d1 -= d2 * 123.45;
d1 *= d2 * 543.21;
if(d1 == d2) printf("OK!\n");
就上面的程式來看
真的會如我們所想的這樣,兩個 if 都成立??
這樣做是否有風險?? (不同的編譯環境 or 運算誤差之類的)
還是這程式 100% 一定不可能有錯??
作者:
bibo9901
(function(){})()
2014-08-12 18:16:00
不適合, 最好用 abs(d1 - d2) < 某個誤差值 來表示相等
作者:
iamstudent
(stu)
2014-08-12 19:20:00
這是數值精準度問題,你要實驗的話,兩個數字不要0
作者:
diabloevagto
(wi)
2014-08-12 19:57:00
置頂文第11戒
作者: LiloHuang (十年一刻)
2014-08-12 23:00:00
這篇文章個人認為值得一看 :D
http://goo.gl/bpeuR0
除了最常見的誤差值比較方式,還有一些具技巧性的比較
作者:
lNishan
(紫小霓)
2014-08-13 02:10:00
推樓上分享 :) 已bookmark 有空看
作者:
Killercat
(殺人貓™)
2014-08-13 06:32:00
如果要有==需求的話 打從一開始就不該用float這就跟java的String ==一樣 根本不是字面上的「相等」意思 而是指「bitwise equal」(java string則是指reference equal)
作者:
QQ29
(我愛阿蓉)
2014-08-13 09:10:00
像是c# java 的compare function用來比浮點數 有風險嗎
作者:
Killercat
(殺人貓™)
2014-08-13 09:25:00
浮點計算根本就不該== 任何語言都一樣...因為所有語言的浮點都是走IEEE754 可以參考一下spec他是spec面上就不該==了 跟語言實作沒有關係但是他允許有限精確度的compare(大於小於)就是不過compare要注意最小精確度的問題
繼續閱讀
[問題] DataGridView綁定sqlite
Elfiend
[問題] boost中的remove_edge和vector合併使用
sea010461
Re: [問題] linked list 迴圈改遞迴
solinari
[問題] 隱藏字元問題
kenn2001
[問題] 關於結構傳遞問題
sorryandbye
[問題] fstream close() 耗時?
catspawboy
[問題] linked list 迴圈改遞迴
solinari
[問題] while的判斷式裡面有陣列無法跑
bjiyxo
[問題] Visual Studio 2010 無法正常運作
o07608
[討論] cin 跟 cin.getline 問題
longted3
Links
booklink
Contact Us: admin [ a t ] ucptt.com