2016-05-30 63 views
1

下面是數據:解釋與EPS的使用此行爲雙重比較

probs_caseA_1 = reshape([0.06285693429791894300 ],[1 1]); 
probs_caseA_2 = reshape([0.06285693429791905400 ],[1 1]); 
probs_caseB_1 = reshape([0.93714306570208106000 ],[1 1]); 
probs_caseB_2 = reshape([0.93714306570208095000 ],[1 1]) 

caseAcaseB兩個互斥事件,所以他們的概率之和爲1:

>> probs_caseA_1 + probs_caseB_1 - 1 <= eps(1) 

ans = 

    1 

>> probs_caseA_2 + probs_caseB_2 - 1 <= eps(1) 

ans = 

    1 

後綴_1_2表示產生情況A和B概率的兩種不同方式。當然在概念上的兩個概率是情況A相同,而對於案件B.

爲什麼我得到以下行爲,當我這樣做比較:

abs(probs_caseA_1 - probs_caseA_2) <= ... 
    max(eps(probs_caseA_1), eps(probs_caseA_2)) 

abs(probs_caseB_1 - probs_caseB_2) <= ... 
    max(eps(probs_caseB_1), eps(probs_caseB_2)) 

這給:

>> abs(probs_caseA_1 - probs_caseA_2) <= ... 
    max(eps(probs_caseA_1), eps(probs_caseA_2)) 

ans = 

    0 

>> abs(probs_caseB_1 - probs_caseB_2) <= ... 
    max(eps(probs_caseB_1), eps(probs_caseB_2)) 

ans = 

    1 

請注意,這是說案例B的概率是相同的,但案例A的概率不是,不管方法1或2是否被用來計算它,但我們已經證明案例A和案例B的總和概率是(機器)等於1.

回答

0

用變量「caseA」在小數點後面有更多的零。所以eps(caseA)eps(caseB)不會給你同樣的價值! eps(x)返回從abs(x)到與x相同精度的下一個更大的浮點數的正距離。

eps(caseA) < eps(caseB) 

(probs_caseA_1 - probs_caseA_2) = (probs_caseB_1 - probs_caseB_2) 

所以你的兩個abs(...) <= max(...)可能得到不同的結果

你發現其中的差別,如果你嘗試寫:每次

eps(0.01) 
eps(0.001) 

您添加零你會更接近下一個更大的浮點數。

您可以閱讀this article瞭解更多詳情