標(biāo)題: 如何檢查實數(shù)值是相等的?【算法】 [打印本頁]

作者: hujia    時間: 2015-5-28 01:53
標(biāo)題: 如何檢查實數(shù)值是相等的?【算法】
描述:

對實數(shù)進行計算時,由于實數(shù)的結(jié)構(gòu) (指數(shù)形式) 以及非常大的數(shù)值范圍,經(jīng)常會發(fā)生舍入誤差,因此兩個數(shù)值相等的情況 (所有位都相同) 幾乎不會出現(xiàn)。所以比較兩個實數(shù)是否“相等”通常難以獲得預(yù)期的結(jié)果。因此您必須采用其它的方法。其中一種方法是采用近似值的方法。本條目介紹了一種您可以據(jù)以判斷實數(shù)是否“相等”的近似值算法,還包含了一個應(yīng)用該近似值算法的實例。本條目還簡要介紹了實數(shù)的格式。
比較實數(shù)值是否相等的近似值
此處所述的比較實數(shù)所用的近似值基于以下公式:
|(a -b)/(|a| + |b|)| < eps
該近似值可用語言表述如下:
當(dāng) a 和 b 之差與 a 和 b 的絕對值之和的比值的絕對值小于“eps”的值時,2 個數(shù)值“a”和“b”即被視為相等。
其中需要考慮公式的下列屬性:
1. 如果實數(shù)“a”和“b”的值非常大,則即使它們相差比較大也被視為等值,此時必須根據(jù)系統(tǒng)的需求降低“eps”的值。
如果實數(shù)“a”和“b”的值非常小,則只有兩數(shù)值相差很小時才被視為等值。
注意事項:
此處請注意在一個實數(shù)的尾數(shù)中,最多只能顯示 6 個連續(xù)的十六進制數(shù)字。
例如
數(shù)值舉例 1
數(shù)值舉例 2
(|a| + |b|)
5
5000000
“eps”
10-6 [0.000001]
“a”和“b”可被視為相等時“a”和“b”的差值
0.00000499...
4.999...
表 01
2. 如果“a”和“b”兩值都為 0,則“a”和“b”的和也是 0。被 0 除是不允許的且會導(dǎo)致錯誤結(jié)果。因此不能使用近似值比較兩個恰好都為 0 的實數(shù)“a”和“b”!
3. 如果兩個被比較的實數(shù)有一個是 0,那么也不使用這個公式計算近似值。近似值結(jié)果通常為 1。因此比較結(jié)果常常是“不相等”,除非“eps”被設(shè)定比 1 大。
注意事項:







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1