




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.定點(diǎn)數(shù)與浮點(diǎn)數(shù)區(qū)別最近做HDR時(shí),經(jīng)常要用NV提供的16位紋理,它的說明書16位能到達(dá)24位的精度,就很奇怪?一直搞不懂浮點(diǎn)數(shù)的精度怎么算的?今天認(rèn)真看了一下IEEE float point的標(biāo)準(zhǔn),終于明白是什么了1.什么是浮點(diǎn)數(shù)在計(jì)算機(jī)系統(tǒng)的開展過程中,曾經(jīng)提出過多種方法表達(dá)實(shí)數(shù)。典型的比方相對(duì)于浮點(diǎn)數(shù)的定點(diǎn)數(shù)Fixed Point Number。在這種表達(dá)方式中,小數(shù)點(diǎn)固定的位于實(shí)數(shù)所有數(shù)字中間的某個(gè)位置。貨幣的表達(dá)就可以使用這種方式,比方99.00或者00.99可以用于表達(dá)具有四位精度Precision,小數(shù)點(diǎn)后有兩位的貨幣值。由于小數(shù)點(diǎn)位置固定,所以可以直接用四位數(shù)值來表達(dá)相應(yīng)的數(shù)值
2、。SQL中的NUMBER數(shù)據(jù)類型就是利用定點(diǎn)數(shù)來定義的。還有一種提議的表達(dá)方式為有理數(shù)表達(dá)方式,即用兩個(gè)整數(shù)的比值來表達(dá)實(shí)數(shù)。定點(diǎn)數(shù)表達(dá)法的缺點(diǎn)在于其形式過于僵硬,固定的小數(shù)點(diǎn)位置決定了固定位數(shù)的整數(shù)部分和小數(shù)部分,不利于同時(shí)表達(dá)特別大的數(shù)或者特別小的數(shù)。最終,絕大多數(shù)現(xiàn)代的計(jì)算機(jī)系統(tǒng)采納了所謂的浮點(diǎn)數(shù)表達(dá)方式。這種表達(dá)方式利用科學(xué)計(jì)數(shù)法來表達(dá)實(shí)數(shù),即用一個(gè)尾數(shù)Mantissa,一個(gè)基數(shù)Base,一個(gè)指數(shù)Exponent以及一個(gè)表示正負(fù)的符號(hào)來表達(dá)實(shí)數(shù)。比方123.45用十進(jìn)制科學(xué)計(jì)數(shù)法可以表達(dá)為1.2345×102,其中1.2345為尾數(shù),10為基數(shù),2為指數(shù)。浮點(diǎn)數(shù)利用指數(shù)到達(dá)了
3、浮動(dòng)小數(shù)點(diǎn)的效果,從而可以靈敏地表達(dá)更大范圍的實(shí)數(shù)。提示:尾數(shù)有時(shí)也稱為有效數(shù)字Significand。尾數(shù)實(shí)際上是有效數(shù)字的非正式說法。同樣的數(shù)值可以有多種浮點(diǎn)數(shù)表達(dá)方式,比方上面例子中的123.45可以表達(dá)為12.345×101,0.12345×103或者1.2345×102。因?yàn)檫@種多樣性,有必要對(duì)其加以標(biāo)準(zhǔn)化以到達(dá)統(tǒng)一表達(dá)的目的。標(biāo)準(zhǔn)的Normalized浮點(diǎn)數(shù)表達(dá)方式具有如下形式:±d.dd.d×e,0d i其中d.dd.d即尾數(shù),為基數(shù),e為指數(shù)。尾數(shù)中數(shù)字的個(gè)數(shù)稱為精度,在本文中用p來表示。每個(gè)數(shù)字d介于0和基數(shù)之間,包括0。小數(shù)
4、點(diǎn)左側(cè)的數(shù)字不為0?;跇?biāo)準(zhǔn)表達(dá)的浮點(diǎn)數(shù)對(duì)應(yīng)的詳細(xì)值可由下面的表達(dá)式計(jì)算而得:±d 0+d 1-1+.+d p-1-p-1e,0d i對(duì)于十進(jìn)制的浮點(diǎn)數(shù),即基數(shù)等于10的浮點(diǎn)數(shù)而言,上面的表達(dá)式非常容易理解,也很直白。計(jì)算機(jī)內(nèi)部的數(shù)值表達(dá)是基于二進(jìn)制的。從上面的表達(dá)式,我們可以知道,二進(jìn)制數(shù)同樣可以有小數(shù)點(diǎn),也同樣具有類似于十進(jìn)制的表達(dá)方式。只是此時(shí)等于2,而每個(gè)數(shù)字d只能在0和1之間取值。比方二進(jìn)制數(shù)1001.101相當(dāng)于1×2 3+0×22+0×21+1×20+1×2-1+0×2-2+1×2-3,對(duì)應(yīng)于十進(jìn)制的
5、9.625。其標(biāo)準(zhǔn)浮點(diǎn)數(shù)表達(dá)為1.001101×23。2.IEEE浮點(diǎn)數(shù)計(jì)算機(jī)中是用有限的連續(xù)字節(jié)保存浮點(diǎn)數(shù)的。保存這些浮點(diǎn)數(shù)當(dāng)然必須有特定的格式,Java平臺(tái)上的浮點(diǎn)數(shù)類型float和double采納了IEEE 754標(biāo)準(zhǔn)中所定義的單精度32位浮點(diǎn)數(shù)和雙精度64位浮點(diǎn)數(shù)的格式。注意:Java平臺(tái)還支持該標(biāo)準(zhǔn)定義的兩種擴(kuò)展格式,即float-extended-exponent和double-extended-exponent擴(kuò)展格式。這里將不作介紹,有興趣的讀者可以參考相應(yīng)的參考資料。在IEEE標(biāo)準(zhǔn)中,浮點(diǎn)數(shù)是將特定長度的連續(xù)字節(jié)的所有二進(jìn)制位分割為特定寬度的符號(hào)域,指數(shù)域和尾數(shù)域三
6、個(gè)域,其中保存的值分別用于表示給定二進(jìn)制浮點(diǎn)數(shù)中的符號(hào),指數(shù)和尾數(shù)。這樣,通過尾數(shù)和可以調(diào)節(jié)的指數(shù)所以稱為"浮點(diǎn)"就可以表達(dá)給定的數(shù)值了。詳細(xì)的格式參見下面的圖例:在上面的圖例中,第一個(gè)域?yàn)榉?hào)域。其中0表示數(shù)值為正數(shù),而1那么表示負(fù)數(shù)。第二個(gè)域?yàn)橹笖?shù)域,對(duì)應(yīng)于我們之前介紹的二進(jìn)制科學(xué)計(jì)數(shù)法中的指數(shù)部分。其中單精度數(shù)為8位,雙精度數(shù)為11位。以單精度數(shù)為例,8位的指數(shù)為可以表達(dá)0到255之間的255個(gè)指數(shù)值。但是,指數(shù)可以為正數(shù),也可以為負(fù)數(shù)。為了處理負(fù)指數(shù)的情況,實(shí)際的指數(shù)值按要求需要加上一個(gè)偏向Bias值作為保存在指數(shù)域中的值,單精度數(shù)的偏向值為127,而雙精度數(shù)的偏向
7、值為1023。比方,單精度的實(shí)際指數(shù)值0在指數(shù)域中將保存為127;而保存在指數(shù)域中的64那么表示實(shí)際的指數(shù)值-63。偏向的引入使得對(duì)于單精度數(shù),實(shí)際可以表達(dá)的指數(shù)值的范圍就變成-127到128之間包含兩端。我們不久還將看到,實(shí)際的指數(shù)值-127保存為全0以及+128保存為全1保存用作特殊值的處理。這樣,實(shí)際可以表達(dá)的有效指數(shù)范圍就在-127和127之間。在本文中,最小指數(shù)和最大指數(shù)分別用emin和emax來表達(dá)。圖例中的第三個(gè)域?yàn)槲矓?shù)域,其中單精度數(shù)為23位長,雙精度數(shù)為52位長。除了我們將要講到的某些特殊值外,IEEE標(biāo)準(zhǔn)要求浮點(diǎn)數(shù)必須是標(biāo)準(zhǔn)的。這意味著尾數(shù)的小數(shù)點(diǎn)左側(cè)必須為1,因此我們?cè)诒?/p>
8、存尾數(shù)的時(shí)候,可以省略小數(shù)點(diǎn)前面這個(gè)1,從而騰出一個(gè)二進(jìn)制位來保存更多的尾數(shù)。這樣我們實(shí)際上用23位長的尾數(shù)域表達(dá)了24位的尾數(shù)。比方對(duì)于單精度數(shù)而言,二進(jìn)制的1001.101對(duì)應(yīng)于十進(jìn)制的9.625可以表達(dá)為1.001101×23,所以實(shí)際保存在尾數(shù)域中的值為00110100000000000000000,即去掉小數(shù)點(diǎn)左側(cè)的1,并用0在右側(cè)補(bǔ)齊。值得注意的是,對(duì)于單精度數(shù),由于我們只有24位的指數(shù)其中一位隱藏,所以可以表達(dá)的最大指數(shù)為224-1=16,777,215。特別的,16,777,216是偶數(shù),所以我們可以通過將它除以2并相應(yīng)地調(diào)整指數(shù)來保存這個(gè)數(shù),這樣16,777,216
9、同樣可以被準(zhǔn)確的保存。相反,數(shù)值16,777,217那么無法被準(zhǔn)確的保存。由此,我們可以看到單精度的浮點(diǎn)數(shù)可以表達(dá)的十進(jìn)制數(shù)值中,真正有效的數(shù)字不高于8位。事實(shí)上,對(duì)相對(duì)誤差的數(shù)值分析結(jié)果顯示有效的精度大約為7.22位。參考下面的例如:true value stored value-16,777,215 1.6777215 E7 16,777,216 1.6777216 E7 16,777,217 1.6777216 E7 16,777,218 1.6777218 E7 16,777,219 1.677722 E7 16,777,220 1.677722 E7 16,777,221 1.677
10、722 E7 16,777,222 1.6777222 E7 16,777,223 1.6777224 E7 16,777,224 1.6777224 E7 16,777,225 1.6777224 E7-根據(jù)標(biāo)準(zhǔn)要求,無法準(zhǔn)確保存的值必須向最接近的可保存的值進(jìn)展舍入。這有點(diǎn)像我們熟悉的十進(jìn)制的四舍五入,即缺乏一半那么舍,一半以上包括一半那么進(jìn)。不過對(duì)于二進(jìn)制浮點(diǎn)數(shù)而言,還多一條規(guī)矩,就是當(dāng)需要舍入的值剛好是一半時(shí),不是簡(jiǎn)單地進(jìn),而是在前后兩個(gè)等距接近的可保存的值中,取其中最后一位有效數(shù)字為零者。從上面的例如中可以看出,奇數(shù)都被舍入為偶數(shù),且有舍有進(jìn)。我們可以將這種舍入誤差理解為"半
11、位"的誤差。所以,為了防止7.22對(duì)很多人造成的困惑,有些文章經(jīng)常以7.5位來說明單精度浮點(diǎn)數(shù)的精度問題。提示:這里采用的浮點(diǎn)數(shù)舍入規(guī)那么有時(shí)被稱為舍入到偶數(shù)Round to Even。相比簡(jiǎn)單地逢一半那么進(jìn)的舍入規(guī)那么,舍入到偶數(shù)有助于從某些角度減小計(jì)算中產(chǎn)生的舍入誤差累積問題。因此為IEEE標(biāo)準(zhǔn)所采用。3.實(shí)數(shù)和浮點(diǎn)數(shù)之間的變換如今我們已經(jīng)明白了浮點(diǎn)數(shù)的IEEE表達(dá)方式。我們來做些實(shí)數(shù)和浮點(diǎn)數(shù)之間的變換練習(xí)以加深理解。在這些練習(xí)中,你還會(huì)發(fā)現(xiàn)一些圍繞浮點(diǎn)數(shù)運(yùn)算的令人吃驚的事實(shí)。首先我們來看看事情簡(jiǎn)單的一面,從浮點(diǎn)數(shù)變換到實(shí)數(shù)。理解了浮點(diǎn)數(shù)的格式,做這個(gè)練習(xí)并不難。假定我們有一個(gè)3
12、2位的數(shù)據(jù),用十六進(jìn)制表示為0xC0B40000,并且我們知道它實(shí)際上是一個(gè)單精度的浮點(diǎn)數(shù)。為了得到該浮點(diǎn)數(shù)實(shí)際表達(dá)的實(shí)數(shù),我們首先將它變換為二進(jìn)制形式:C 0B 40 00 01100 0000 1011 0100 0000 0000 0000 0000接著按照浮點(diǎn)數(shù)的格式切分為相應(yīng)的域:1 10000001 01101000000000000000000符號(hào)域1意味著負(fù)數(shù);指數(shù)域?yàn)?29意味著實(shí)際的指數(shù)為2減去偏向值127;尾數(shù)域?yàn)?1101意味著實(shí)際的二進(jìn)制尾數(shù)為1.01101加上隱含的小數(shù)點(diǎn)前面的1。所以,實(shí)際的實(shí)數(shù)為:-1.01101×22-20+2-2+2-3 2-5
13、215;22-5.625從實(shí)數(shù)向浮點(diǎn)數(shù)變換略微費(fèi)事一點(diǎn)。假定我們需要將實(shí)數(shù)-9.625表達(dá)為單精度的浮點(diǎn)數(shù)格式。方法是首先將它用二進(jìn)制浮點(diǎn)數(shù)表達(dá),然后變換為相應(yīng)的浮點(diǎn)數(shù)格式。首先,將小數(shù)點(diǎn)左側(cè)的整數(shù)部分變換為其二進(jìn)制形式,9的二進(jìn)制性形式為1001。處理小數(shù)部分的算法是將我們的小數(shù)部分乘以基數(shù)2,記錄乘積結(jié)果的整數(shù)部分,接著將結(jié)果的小數(shù)部分繼續(xù)乘以2,并不斷繼續(xù)該過程:0.625×2=1.25 10.25×2=0.5 00.5×2=1 10當(dāng)最后的結(jié)果為零時(shí),完畢這個(gè)過程。這時(shí)右側(cè)的一列數(shù)字就是我們所需的二進(jìn)制小數(shù)部分,即0.101。這樣,我們就得到了完好的二進(jìn)制
14、形式1001.101。用標(biāo)準(zhǔn)浮點(diǎn)數(shù)表達(dá)為1.001101×23。因?yàn)槭秦?fù)數(shù),所以符號(hào)域?yàn)?。指數(shù)為3,所以指數(shù)域?yàn)?+127=130,即二進(jìn)制的10000010。尾數(shù)省略掉小數(shù)點(diǎn)左側(cè)的1之后為001101,右側(cè)用零補(bǔ)齊。最終結(jié)果為:1 10000010 00110100000000000000000最后可以將浮點(diǎn)數(shù)形式表示為十六進(jìn)制的數(shù)據(jù)如下:1100 0001 0001 1010 0000 0000 0000 0000 C1 1A 00 00最終結(jié)果為0xC11A0000。很簡(jiǎn)單?等等!你可能已經(jīng)注意到了,在上面這個(gè)我們有意選擇的例如中,不斷的將產(chǎn)生的小數(shù)部分乘以2的過程掩蓋了一個(gè)
15、事實(shí)。該過程完畢的標(biāo)志是小數(shù)部分乘以2的結(jié)果為1,不難想象,很多小數(shù)根本不能經(jīng)過有限次這樣的過程而得到結(jié)果比方最簡(jiǎn)單的0.1。我們已經(jīng)知道浮點(diǎn)數(shù)尾數(shù)域的位數(shù)是有限的,為此,浮點(diǎn)數(shù)的處理方法是持續(xù)該過程直到由此得到的尾數(shù)足以填滿尾數(shù)域,之后對(duì)多余的位進(jìn)展舍入。換句話說,除了我們之前講到的精度問題之外,十進(jìn)制到二進(jìn)制的變換也并不能保證總是準(zhǔn)確的,而只能是近似值。事實(shí)上,只有很少一部分十進(jìn)制小數(shù)具有準(zhǔn)確的二進(jìn)制浮點(diǎn)數(shù)表達(dá)。再加上浮點(diǎn)數(shù)運(yùn)算過程中的誤差累積,結(jié)果是很多我們看來非常簡(jiǎn)單的十進(jìn)制運(yùn)算在計(jì)算機(jī)上卻往往出人意料。這就是最常見的浮點(diǎn)運(yùn)算的"不準(zhǔn)確"問題。參見下面的Java例如
16、:System.out.print"34.6-34.0="+34.6f-34.0f;這段代碼的輸出結(jié)果如下:34.6-34.0=0.5999985產(chǎn)生這個(gè)誤差的原因是34.6無法準(zhǔn)確的表達(dá)為相應(yīng)的浮點(diǎn)數(shù),而只能保存為經(jīng)過舍入的近似值。這個(gè)近似值與34.0之間的運(yùn)算自然無法產(chǎn)生準(zhǔn)確的結(jié)果。4.特殊值通過前面的介紹,你應(yīng)該已經(jīng)理解的浮點(diǎn)數(shù)的根本知識(shí),這些知識(shí)對(duì)于一個(gè)不接觸浮點(diǎn)數(shù)應(yīng)用的人應(yīng)該足夠了。不過,假設(shè)你興趣正濃,或者面對(duì)著一個(gè)棘手的浮點(diǎn)數(shù)應(yīng)用,可以通過本節(jié)理解到關(guān)于浮點(diǎn)數(shù)的一些值得注意的特殊之處。我們已經(jīng)知道,指數(shù)域?qū)嶋H可以表達(dá)的指數(shù)值的范圍為-127到128之間包含兩端
17、。其中,值-127保存為全0以及+128保存為全1保存用作特殊值的處理。本節(jié)將詳細(xì)IEEE標(biāo)準(zhǔn)中所定義的這些特殊值。浮點(diǎn)數(shù)中的特殊值主要用于特殊情況或者錯(cuò)誤的處理。比方在程序?qū)σ粋€(gè)負(fù)數(shù)進(jìn)展開平方時(shí),一個(gè)特殊的返回值將用于標(biāo)記這種錯(cuò)誤,該值為NaNNot aNumber。沒有這樣的特殊值,對(duì)于此類錯(cuò)誤只能粗暴地終止計(jì)算。除了NaN之外,IEEE標(biāo)準(zhǔn)還定義了±0,±以及非標(biāo)準(zhǔn)化數(shù)Denormalized Number。對(duì)于單精度浮點(diǎn)數(shù),所有這些特殊值都由保存的特殊指數(shù)值-127和128來編碼。假設(shè)我們分別用emin和emax來表達(dá)其它常規(guī)指數(shù)值范圍的邊界,即-126和127,那
18、么保存的特殊指數(shù)值可以分別表達(dá)為emin-1和emax+1;。基于這個(gè)表達(dá)方式,IEEE標(biāo)準(zhǔn)的特殊值如下所示:其中f表示尾數(shù)中的小數(shù)點(diǎn)右側(cè)的Fraction部分。第一行即我們之前介紹的普通的標(biāo)準(zhǔn)化浮點(diǎn)數(shù)。隨后我們將分別對(duì)余下的特殊值加以介紹。4.1.NaN NaN用于處理計(jì)算中出現(xiàn)的錯(cuò)誤情況,比方0.0除以0.0或者求負(fù)數(shù)的平方根。由上面的表中可以看出,對(duì)于單精度浮點(diǎn)數(shù),NaN表示為指數(shù)為emax+1=128指數(shù)域全為1,且尾數(shù)域不等于零的浮點(diǎn)數(shù)。IEEE標(biāo)準(zhǔn)沒有要求詳細(xì)的尾數(shù)域,所以NaN實(shí)際上不是一個(gè),而是一族。不同的實(shí)現(xiàn)可以自由選擇尾數(shù)域的值來表達(dá)NaN,比方Java中的常量Float.
19、NaN的浮點(diǎn)數(shù)可能表達(dá)為01111111110000000000000000000000,其中尾數(shù)域的第一位為1,其余均為0不計(jì)隱藏的一位,但這取決系統(tǒng)的硬件架構(gòu)。Java中甚至允許程序員自己構(gòu)造具有特定位形式的NaN值通過FBitsToFloat方法。比方,程序員可以利用這種定制的NaN值中的特定位形式來表達(dá)某些診斷信息。定制的NaN值,可以通過Float.isNaN方法斷定其為NaN,但是它和Float.NaN常量卻不相等。實(shí)際上,所有的NaN值都是無序的。數(shù)值比較操作符,=,和=在任一操作數(shù)為NaN時(shí)均返回false。等于操作符=在任一操作數(shù)為NaN時(shí)均返回false,即
20、使是兩個(gè)具有一樣位形式的NaN也一樣。而操作符!=那么當(dāng)任一操作數(shù)為NaN時(shí)返回true。這個(gè)規(guī)那么的一個(gè)有趣的結(jié)果是x!=x當(dāng)x為NaN時(shí)竟然為真??梢援a(chǎn)生NaN的操作如下所示:此外,任何有NaN作為操作數(shù)的操作也將產(chǎn)生NaN。用特殊的NaN來表達(dá)上述運(yùn)算錯(cuò)誤的意義在于防止了因這些錯(cuò)誤而導(dǎo)致運(yùn)算的不必要的終止。比方,假設(shè)一個(gè)被循環(huán)調(diào)用的浮點(diǎn)運(yùn)算方法,可能由于輸入的參數(shù)問題而導(dǎo)致發(fā)生這些錯(cuò)誤,NaN使得即使某次循環(huán)發(fā)生了這樣的錯(cuò)誤,也可以簡(jiǎn)單地繼續(xù)執(zhí)行循環(huán)以進(jìn)展那些沒有錯(cuò)誤的運(yùn)算。你可能想到,既然Java有異常處理機(jī)制,也容許以通過捕獲并忽略異常到達(dá)一樣的效果。但是,要知道,IEEE標(biāo)準(zhǔn)不是僅
21、僅為Java而制定的,各種語言處理異常的機(jī)制不盡一樣,這將使得代碼的遷移變得更加困難。何況,不是所有語言都有類似的異?;蛘咝盘?hào)Signal處理機(jī)制。注意:Java中,不同于浮點(diǎn)數(shù)的處理,整數(shù)的0除以0將拋出java.lang.ArithmeticException異常。4.2.無窮和NaN一樣,特殊值無窮Infinity的指數(shù)部分同樣為emax+1=128,不過無窮的尾數(shù)域必須為零。無窮用于表達(dá)計(jì)算中產(chǎn)生的上溢Overflow問題。比方兩個(gè)極大的數(shù)相乘時(shí),盡管兩個(gè)操作數(shù)本身可以用保存為浮點(diǎn)數(shù),但其結(jié)果可能大到無法保存為浮點(diǎn)數(shù),而必須進(jìn)展舍入。根據(jù)IEEE標(biāo)準(zhǔn),此時(shí)不是將結(jié)果舍入為可以保存的最大
22、的浮點(diǎn)數(shù)因?yàn)檫@個(gè)數(shù)可能離實(shí)際的結(jié)果相差太遠(yuǎn)而毫無意義,而是將其舍入為無窮。對(duì)于負(fù)數(shù)結(jié)果也是如此,只不過此時(shí)舍入為負(fù)無窮,也就是說符號(hào)域?yàn)?的無窮。有了NaN的經(jīng)歷我們不難理解,特殊值無窮使得計(jì)算中發(fā)生的上溢錯(cuò)誤不必以終止運(yùn)算為結(jié)果。無窮和除NaN以外的其它浮點(diǎn)數(shù)一樣是有序的,從小到大依次為負(fù)無窮,負(fù)的有窮非零值,正負(fù)零隨后介紹,正的有窮非零值以及正無窮。除NaN以外的任何非零值除以零,結(jié)果都將是無窮,而符號(hào)那么由作為除數(shù)的零的符號(hào)決定?;貞浳覀儗?duì)NaN的介紹,當(dāng)零除以零時(shí)得到的結(jié)果不是無窮而是NaN。原因不難理解,當(dāng)除數(shù)和被除數(shù)都逼近于零時(shí),其商可能為任何值,所以IEEE標(biāo)準(zhǔn)決定此時(shí)用NaN作
23、為商比較適宜。4.3.有符號(hào)的零因?yàn)镮EEE標(biāo)準(zhǔn)的浮點(diǎn)數(shù)格式中,小數(shù)點(diǎn)左側(cè)的1是隱藏的,而零顯然需要尾數(shù)必須是零。所以,零也就無法直接用這種格式表達(dá)而只能特殊處理。實(shí)際上,零保存為尾數(shù)域?yàn)槿珵?,指數(shù)域?yàn)閑min-1=-127,也就是說指數(shù)域也全為0。考慮到符號(hào)域的作用,所以存在著兩個(gè)零,即+0和-0。不同于正負(fù)無窮之間是有序的,IEEE標(biāo)準(zhǔn)規(guī)定正負(fù)零是相等的。零有正負(fù)之分,確實(shí)非常容易讓人困惑。這一點(diǎn)是基于數(shù)值分析的多種考慮,經(jīng)利弊權(quán)衡后形成的結(jié)果。有符號(hào)的零可以防止運(yùn)算中,特別是涉及無窮的運(yùn)算中,符號(hào)信息的喪失。舉例而言,假設(shè)零無符號(hào),那么等式1/1/x=x當(dāng)x=±時(shí)不再成立。原
24、因是假設(shè)零無符號(hào),1和正負(fù)無窮的比值為同一個(gè)零,然后1與0的比值為正無窮,符號(hào)沒有了。解決這個(gè)問題,除非無窮也沒有符號(hào)。但是無窮的符號(hào)表達(dá)了上溢發(fā)生在數(shù)軸的哪一側(cè),這個(gè)信息顯然是不能不要的。零有符號(hào)也造成了其它問題,比方當(dāng)x=y時(shí),等式1/x=1/y在x和y分別為+0和-0時(shí),兩端分別為正無窮和負(fù)無窮而不再成立。當(dāng)然,解決這個(gè)問題的另一個(gè)思路是和無窮一樣,規(guī)定零也是有序的。但是,假設(shè)零是有序的,那么即使ifx=0這樣簡(jiǎn)單的判斷也由于x可能是±0而變得不確定了。兩害取其輕者,零還是無序的好。4.4.非標(biāo)準(zhǔn)化數(shù)我們來考察浮點(diǎn)數(shù)的一個(gè)特殊情況。選擇兩個(gè)絕對(duì)值極小的浮點(diǎn)數(shù),以單精度的二進(jìn)制浮
25、點(diǎn)數(shù)為例,比方1.001×2-125和1.0001×2-125這兩個(gè)數(shù)分別對(duì)應(yīng)于十進(jìn)制的2.6448623×10-38和2.4979255×10-38。顯然,他們都是普通的浮點(diǎn)數(shù)指數(shù)為-125,大于允許的最小值-126;尾數(shù)更沒問題,按照IEEE 754可以分別保存為000000010001000000000000000000000x 1100000和000000010000100000000000000000000x 1080000。如今我們看看這兩個(gè)浮點(diǎn)數(shù)的差值。不難得出,該差值為0.0001×2-125,表達(dá)為標(biāo)準(zhǔn)浮點(diǎn)數(shù)那么為1.0×2-129。問題在于其指數(shù)大于允許的最小指數(shù)值,所以無法保存為標(biāo)準(zhǔn)浮點(diǎn)數(shù)。最終,只能近似為零Flush to Zero。這中特殊情況意味著下面本來非??煽康拇a也可能出現(xiàn)問題:ifx!=yz=1/x-y;正如我們精心選擇的兩個(gè)浮點(diǎn)數(shù)展現(xiàn)的問題一樣,即使x不等于y,x和y的差值仍然可能絕對(duì)值過小,而近似為零,導(dǎo)致除以0的情況發(fā)生。為理解決此類問題,IEEE標(biāo)準(zhǔn)中引入了非標(biāo)準(zhǔn)Denormalized浮點(diǎn)數(shù)。規(guī)定當(dāng)浮點(diǎn)數(shù)的指數(shù)為允許的最小指數(shù)值,即emin時(shí),尾數(shù)不必是標(biāo)準(zhǔn)化
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠房無線監(jiān)控銷售合同范本
- 個(gè)人車位買賣合同
- MySQL數(shù)據(jù)庫原理設(shè)計(jì)與應(yīng)用模擬練習(xí)題(含答案)
- 個(gè)人代簽合同授權(quán)委托書
- 中級(jí)電工模擬習(xí)題(附參考答案)
- 單位解除員工合同范本
- 廠房鐵皮拆除合同范本
- 《鋪滿金色巴掌的水泥道》教學(xué)反思
- 《認(rèn)識(shí)物體和圖形》數(shù)學(xué)教學(xué)反思
- 勞務(wù)服務(wù)外包項(xiàng)目合同范本
- 2025年云南省昆明國家高新技術(shù)產(chǎn)業(yè)開發(fā)區(qū)招聘合同聘用制專業(yè)技術(shù)人員47人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 農(nóng)機(jī)安全知識(shí)講座
- DeepSeek從入門到精通 -指導(dǎo)手冊(cè)
- 校長第一次全體教師會(huì)上發(fā)言:2025春季開學(xué)教師掌握這 6 詞教育之路暢通無阻
- 新能源汽車及零部件檢驗(yàn)檢測(cè)公共服務(wù)平臺(tái)建設(shè)項(xiàng)目可行性研究報(bào)告
- 《工程熱力學(xué)》課件-11 理想氣體熱力學(xué)能、焓和熵的計(jì)算
- 發(fā)票知識(shí)培訓(xùn)課件
- 《綜合辦崗位職責(zé)》課件
- 學(xué)校與家庭在學(xué)生心理健康中的協(xié)同作用
- 《中醫(yī)望聞問切》課件
- 聲帶腫物的護(hù)理教學(xué)查房
評(píng)論
0/150
提交評(píng)論