當(dāng)前位置:視頻教程網(wǎng) > 教育知識 > 正文
發(fā)布:2023-11-10 13:13:00編輯:視頻君來源:視頻教程網(wǎng)
浮點數(shù)是表示小數(shù)的一種方法.所謂浮點就是小數(shù)點的位置不固定,與此相反有定點數(shù),即小數(shù)點的位置固定.整數(shù)可以看做是一種特殊的定點數(shù),即小數(shù)點在末尾.8086/8088中沒有浮點數(shù)處理指令,不過從486起,CPU內(nèi)置了浮點數(shù)處理器,可以執(zhí)行浮點運算.一般的浮點數(shù)有點象科學(xué)計數(shù)法,包括符號位、指數(shù)部分和尾數(shù)部分.
浮點數(shù)是指小數(shù)點位置可以浮動的數(shù)據(jù),通常以下式表示:
E次方
N = M·R
其中N為浮點數(shù),M為尾數(shù),E(為階碼也就是多少次方的意思),R為階的基數(shù),R一般為2進(jìn)制(01),8...(01234567),16...(0123456789abcdef)
簡單說浮點數(shù)是指能夠精確到小數(shù)點以后的數(shù)值類型
浮點數(shù),是屬于有理數(shù)中某特定子集的數(shù)的數(shù)字表示,在計算機(jī)中用以近似表示任意某個實數(shù)。 具體的說,這個實數(shù)由一個整數(shù)或定點數(shù)(即尾數(shù))乘以某個基數(shù)(計算機(jī)中通常是2)的整數(shù)次冪得到,這種表示方法類似于基數(shù)為10的科學(xué)計數(shù)法。 有理數(shù)的認(rèn)識: 有理數(shù)為整數(shù)(正整數(shù)、0、負(fù)整數(shù))和分?jǐn)?shù)的統(tǒng)稱。正整數(shù)和正分?jǐn)?shù)合稱為正有理數(shù),負(fù)整數(shù)和負(fù)分?jǐn)?shù)合稱為負(fù)有理數(shù)。因而有理數(shù)集的數(shù)可分為正有理數(shù)、負(fù)有理數(shù)和零。由于任何一個整數(shù)或分?jǐn)?shù)都可以化為十進(jìn)制循環(huán)小數(shù),反之,每一個十進(jìn)制循環(huán)小數(shù)也能化為整數(shù)或分?jǐn)?shù),因此,有理數(shù)也可以定義為十進(jìn)制循環(huán)小數(shù)。
浮點數(shù)是一種公式化的表達(dá)方式,用來近似表示實數(shù),并且可以在表達(dá)范圍和表示精度之間進(jìn)行權(quán)衡(因此被稱為浮點數(shù))。 浮點數(shù)通常被表示為: N=M×R^E 比如:12.345=1.2345×10^1 其中,M(Mantissa)被稱為浮點數(shù)的 尾數(shù) ,R(Radix)被稱為階碼的 基數(shù) ,E(Exponent)被稱為階的 階碼 。計算機(jī)中一般規(guī)定R為2、8或16,是一個確定的常數(shù),不需要在浮點數(shù)中明確表示出來。 因此,在已知標(biāo)準(zhǔn)下,要表示浮點數(shù)。 一是要給出尾數(shù)M的值,通常用定點小數(shù)形式表示,它決定了浮點數(shù)的表示精度,即可以給出的有效數(shù)字的位數(shù)。 二是要給出階碼,通常用定點整數(shù)形式表示,它指出的是小數(shù)點在數(shù)據(jù)中的位置,決定了浮點數(shù)的表示范圍。因此,在計算機(jī)中,浮點數(shù)通常被表示成如下格式:(假定為32位浮點數(shù),基為2,其中最高位為符號位)。 浮點數(shù)的規(guī)格化表示 按照上面的指數(shù)表示方法,一個浮點數(shù)會有不同的表示: 0.3×10^0;0.03×10^1;0.003×10^2;0.0003×10^3。 為了提高數(shù)據(jù)的表示精度同時保證數(shù)據(jù)表示的唯一性,需要對浮點數(shù)做規(guī)格化處理。 在計算機(jī)內(nèi),對非0值的浮點數(shù),要求尾數(shù)的絕對值必須大于基數(shù)的倒數(shù),即|M|≥1/R。 即要求尾數(shù)域的最高有效位應(yīng)為1,稱滿足這種表示要求的浮點數(shù)為規(guī)格化表示:把不滿足這一表示要求的尾數(shù),變成滿足這一要求的尾數(shù)的操作過程,叫作浮點數(shù)的規(guī)格化處理,通過尾數(shù)移位和修改階碼實現(xiàn)。
但用定點數(shù)表示小數(shù)時,存在數(shù)值范圍、精度范圍有限的缺點,所以在計算機(jī)中,我們一般使用「浮點數(shù)」來表示小數(shù)。 這篇文章,我們就來詳細(xì)看一下浮點數(shù)到底是如何表示小數(shù)的,以及浮點數(shù)的的范圍和精度有多大。 什么是浮點數(shù)? 首先,我們需要理解什么是浮點數(shù)? 之前我們學(xué)習(xí)了定點數(shù),其中「定點」指的是約定小數(shù)點位置固定不變。那浮點數(shù)的「浮點」就是指,其小數(shù)點的位置是可以是漂浮不定的。 這怎么理解呢? 其實,浮點數(shù)是采用科學(xué)計數(shù)法的方式來表示的,例如十進(jìn)制小數(shù) 8.345,用科學(xué)計數(shù)法表示,可以有多種方式: 看到了嗎?用這種科學(xué)計數(shù)法的方式表示小數(shù)時,小數(shù)點的位置就變得「漂浮不定」了,這就是相對于定點數(shù),浮點數(shù)名字的由來。 使用同樣的規(guī)則,對于二進(jìn)制數(shù),我們也可以用科學(xué)計數(shù)法表示,也就是說把基數(shù) 10 換成 2 即可。 看到了嗎?用這種科學(xué)計數(shù)法的方式表示小數(shù)時,小數(shù)點的位置就變得「漂浮不定」了,這就是相對于定點數(shù),浮點數(shù)名字的由來。 使用同樣的規(guī)則,對于二進(jìn)制數(shù),我們也可以用科學(xué)計數(shù)法表示,也就是說把基數(shù) 10 換成 2 即可。 假設(shè)我們定義如下規(guī)則來填充這些 bit: 符號位 S 占 1 bit 指數(shù) E 占 10 bit 尾數(shù) M 占 21 bit 按照這個規(guī)則,將十進(jìn)制數(shù) 25.125 轉(zhuǎn)換為浮點數(shù),轉(zhuǎn)換過程就是這樣的(D代表十進(jìn)制,B代表二進(jìn)制): 整數(shù)部分:25(D) = 11001(B) 小數(shù)部分:0.125(D) = 0.001(B) 用二進(jìn)制科學(xué)計數(shù)法表示:25.125(D) = 11001.001(B) = 1.1001001 * 2^4(B) 所以符號位 S = 0,尾數(shù) M = 1.001001(B),指數(shù) E = 4(D) = 100(B)。 按照上面定義的規(guī)則,填充到 32 bit 上,就是這樣:
浮點型數(shù)據(jù)定義 浮點型數(shù)據(jù)分為 浮點型常量和浮點型變量 浮點型常量 實型也稱為浮點型。實型常量也稱為實數(shù)或者浮點數(shù)。在C語言中,實數(shù)只采用十進(jìn)制。它有二種形式: 十進(jìn)制數(shù)形式指數(shù)形式。 數(shù)據(jù)介紹 1.十進(jìn)制數(shù)形式 由數(shù)碼0~ 9和小數(shù)點組成。例如:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均為合法的實數(shù)。 2.指數(shù)形式 由十進(jìn)制數(shù),加階碼標(biāo)志“e”或“E”以及階碼(只能為整數(shù),可以帶符號)組成。其一般形式為a E n (a為十進(jìn)制數(shù),n為十進(jìn)制整數(shù))其值為 a*10,n 如: 2.1E5 (等于2.1*10的5次方), 3.7E-2 (等于3.7*10的-2次方) 0.5E7 (等于0.5*10的7次方), -2.8E-2 (等于-2.8*10的-2次方),以下不是合法的實數(shù) 345 (無小數(shù)點) E7 (階碼標(biāo)志E之前無數(shù)字) -5 (無階碼標(biāo)志) 53.-E3 (負(fù)號位置不對) 2.7E (無階碼) 標(biāo)準(zhǔn)C允許浮點數(shù)使用后綴。后綴為“f”或“F”即表示該數(shù)為浮點數(shù)。如356f。例2.2說明了這種情況: void main() { printf("%f\n%f\n",356.,356f); } void 指明main不返回任何值 利用printf顯示結(jié)果 結(jié)束 浮點型變量: 實型變量分為兩類:單精度型和雙精度型, 其類型說明符為float 單精度說明符,double 雙精度說明符。在Turbo C中單精度型占4個字節(jié)(32位)內(nèi)存空間,其數(shù)值范圍為3.4E-38~3.4E+38,只能提供七位有效數(shù)字。雙精度型占8 個字節(jié)(64位)內(nèi)存空間,其數(shù)值范圍為1.7E-308~1.7E+308,可提供16位有效數(shù)字。 實型變量說明的格式和書寫規(guī)則與整型相同。 例如: float x,y; (x,y為單精度實型量) double a,b,c; (a,b,c為雙精度實型量) 實型常數(shù)不分單、雙精度,都按雙精度double型處理。 相互轉(zhuǎn)換 IEEE754標(biāo)準(zhǔn)中浮點數(shù)表示格式IEEE規(guī)定的浮點數(shù)表示法是一種科學(xué)計數(shù)法,用符號(正或負(fù))、指數(shù)和尾數(shù)來表示,底數(shù)被確定為2。也就是說浮點數(shù)被表示為尾數(shù)乘以2的指數(shù)次方再帶上符號。 下面以單精度浮點數(shù)為例來介紹浮點數(shù)的三個區(qū)域: 符號域:符號域占1位,0表示正數(shù),1表示負(fù)數(shù)。指數(shù)域:指數(shù)域共有8位,可表達(dá)的范圍為:0~255。為能處理負(fù)指數(shù),實際指數(shù)位存儲在指數(shù)域中值減去一個偏移量(單精度為127,雙精度為1023)。單精度浮點數(shù)的偏移量為127,故實際可表達(dá)的指數(shù)值的范圍為-127~128。尾數(shù)域:尾數(shù)域共有23位。由于規(guī)范浮點數(shù)的小數(shù)點左側(cè)必須為1,所以在保存尾數(shù)時,可以省略小數(shù)點前面這個1,從而騰出一個二進(jìn)制位來保存更多的尾數(shù)。舉例:比如對于單精度數(shù)而言,二進(jìn)制的1001.101(對應(yīng)于十進(jìn)制的9.625)可以表達(dá)為1.001101 ×2^3,所以實際保存在尾數(shù)域中的 值為0011 0100 0000 0000 0000 000,即去掉小數(shù)點左側(cè)的1,并用0 在右側(cè)補(bǔ)齊。 ( 整數(shù)部分(9)的計算:1001 小數(shù)部分(0.625)的計算: 0.625*2=1.25--------1 0.25 *2=0.5 ----------0 0.5 *2=1.0 -----------1 所以用二進(jìn)制科學(xué)表示方式為:1.001101*2^3 ) 實數(shù)與浮點數(shù)之間的變換舉例例一:已知一個單精度浮點數(shù)用16進(jìn)制數(shù)表示為:0xC0B40000,求此浮點數(shù)所表達(dá)的實數(shù)。 先轉(zhuǎn)換為二進(jìn)制形式(注意:對于負(fù)數(shù)二進(jìn)制補(bǔ)碼轉(zhuǎn)換成十進(jìn)制一定要:先取反,后加1) C 0 B 4 0 0 0 0 1100 0000 1011 0100 0000 0000 0000 0000 按照浮點數(shù)格式切割成相應(yīng)的域 1 1000 0001 01101 000000000000000000 經(jīng)分析:符號域1 意味著負(fù)數(shù);指數(shù)域為129 意味著實際的指數(shù)為2 (減去偏差值127);尾數(shù)域為01101 意味著實際的二進(jìn)制尾數(shù)為1.01101 (加上隱含的小數(shù)點前面的1)。所以,實際的實數(shù)為: = -1.01101 × 2^ 2=- ( 1*2^0 + 1*2^(-2) + 1*2^(-3) + 1*2^(-5) ) × 2^2 = -(1+0.25+0.125+0.03125)*4 = -1.40625*4 = -5.625 例二:將實數(shù)-9.625變換為相應(yīng)的浮點數(shù)格式。 1) 求出該實數(shù)對應(yīng)的二進(jìn)制:1001.101,用科學(xué)技術(shù)法表達(dá)為:-1.001101 ×2^3; 2) 因為負(fù)數(shù),符號為1; 3) 指數(shù)為3,故指數(shù)域的值為3 + 127 = 130,即二進(jìn)制的10000010; 4) 尾數(shù)為1.001101,省略小數(shù)點左邊的1后為001101,右側(cè)0補(bǔ)齊,補(bǔ)夠23位, 最終尾數(shù)域為:00110100000000000000000; 5) 最終結(jié)果:1 10000010 00110100000000000000000,用16進(jìn)制表示:0xC11A0000。
浮點類型指使小數(shù)點的位置可以根據(jù)需要而上下浮動,從而可以靈活地表達(dá)更大范圍的實數(shù)。浮點類型分為單精度浮點型和雙精度浮點型。
1、單精度浮點型專指占用32位存儲空間的精度值。單精度在一些處理器上比雙精度更快而且只占用雙精度一半的空間,但是當(dāng)值很大或很小的時候,單精度浮點型將變得不精確。當(dāng)需要小數(shù)部分并且對精度的要求不高時,單精度浮點型的變量是有用的。
2、雙精度型,占用64位的存儲空間。在一些現(xiàn)代的被優(yōu)化用來進(jìn)行高速數(shù)學(xué)計算的處理器上雙精度型實際上比單精度的快,當(dāng)需要保持多次反復(fù)迭代的計算的精確性時,或在操作值很大的數(shù)字時,雙精度型是最好的選擇。