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