生活随笔
收集整理的這篇文章主要介紹了
如何用二进制表示一个小数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
http://zhidao.baidu.com/question/50153360.html
比如說5.6整數(shù)部分5用2進(jìn)制為101小數(shù)部分0.6
有這樣一個(gè)公式: *2 如果<1就為0,基數(shù)=基數(shù);大于1,就為1,基數(shù)=基數(shù)-1 0.6*2=1.2>0 那么就為1 基數(shù)=1.2-1=0.20.2*2=0.4<0 那么就為0,基數(shù)=0.40.4*2=0.8<0,那么就為0,基數(shù)=0.80.8*2=1.6>0 那么就為1,基數(shù)為1.6-1=0.6
:
:
:
:
所以5.6可以表示為:101.1001
想往下面再乘,就更精確了
?
http://squall.cs.ntou.edu.tw/cprog/Materials/FractionalNumber.html
二進(jìn)位的小數(shù)表示法
小數(shù)
二進(jìn)位的小數(shù)和十進(jìn)位的小數(shù)在觀念上完全一樣,必須有一個(gè)
小數(shù)點(diǎn),
小數(shù)點(diǎn)的左邊是整數(shù),
小數(shù)點(diǎn)的右邊是小數(shù),每一位數(shù)有它的權(quán)重,例如下圖:
在電腦裡表達(dá)小數(shù)的方式有兩種,一種是定點(diǎn)表示法,一種是浮點(diǎn)表示法。
定點(diǎn)小數(shù)表示法:(fixed point)
在電腦裡資料以位元來存放,而小數(shù)點(diǎn)並不需要真的存放在位元內(nèi),我們只要知道哪兩個(gè)位元之間是小數(shù)點(diǎn)就好了,或是說我們只要知道每一個(gè)位元的權(quán)重,例如上圖即可。
一般來講使用定點(diǎn)表示法來表達(dá)小數(shù)時(shí)我們?cè)谡麄€(gè)系統(tǒng)中會(huì)將小數(shù)點(diǎn)都固定在一個(gè)地方,而不會(huì)調(diào)來調(diào)去,否則就需要多幾個(gè)位元來記錄小數(shù)點(diǎn)的位置了。當(dāng)然這也是為什麼要叫做定點(diǎn)小數(shù)的原因了。 在定點(diǎn)小數(shù)表示法裡加減法就是二進(jìn)位的標(biāo)準(zhǔn)加減法,而乘法必須要把小數(shù)點(diǎn)移回來 (你可以用十進(jìn)位小數(shù)乘法去思考)。 在高階程式語言內(nèi)一般都不用定點(diǎn)小數(shù)表示法,因?yàn)槎c(diǎn)小數(shù)表示法所能表示數(shù)字的範(fàn)圍非常有限,例如上面雙位元組小數(shù)點(diǎn)置於第 8 位和第 9 位元之間時(shí),只能表示 0 到 255 之間每隔 1/256 的那些數(shù)字而已,這樣子範(fàn)圍的數(shù)字在自然界中應(yīng)用的機(jī)會(huì)較小,那為什麼要用這種方式表示小數(shù)呢?? 簡(jiǎn)單地說就是運(yùn)算速度較快,定點(diǎn)小數(shù)的運(yùn)算就是標(biāo)準(zhǔn)二進(jìn)位的運(yùn)算,因此很簡(jiǎn)單,硬體製作起來也很便宜,浮點(diǎn)小數(shù)就比較複雜,軟體模擬比較慢,硬體也比較貴。 自然界中隨便一個(gè)數(shù)字,例如十進(jìn)位 0.1 這個(gè)數(shù)字當(dāng)使用二進(jìn)位定點(diǎn)表示法時(shí),可能會(huì)有誤差,原因是是十進(jìn)位 0.1 這個(gè)數(shù)字用二進(jìn)位表示時(shí)會(huì)是 0.000110011001100110011... 的一個(gè)循環(huán)小數(shù),以上圖的表示法來說小數(shù)以下只能表示八位數(shù),也就是 0.00011001,這個(gè)數(shù)字和原來希望表示的數(shù)字會(huì)有一點(diǎn)點(diǎn)的誤差,讓我們把這個(gè)數(shù)字換回十進(jìn)位來看看:也就是 1/256 + 1/32 + 1/16 = 25/256 = 0.09765625,是蠻接近 0.1 的,不是嗎,誤差一定小於 1/256,而且有一個(gè)特性就是實(shí)際表達(dá)出來的數(shù)字的絕對(duì)值永遠(yuǎn)小於或是等於原來要表達(dá)的數(shù)字的絕對(duì)值。 浮點(diǎn)小數(shù)表示法:
所謂二進(jìn)位的浮點(diǎn)小數(shù)表示法 (或是浮點(diǎn)數(shù), floating point number) 簡(jiǎn)單地講和我們十進(jìn)位中常用的
科學(xué)記號(hào)表示法是類似的,十進(jìn)位中我們用十的冪次 (power) 及 0 至 1 之間的小數(shù)來表示一個(gè)任意的實(shí)數(shù),例如:12345.6789 表示為 0.123456789 * 10^5。
在二進(jìn)位中我們一樣可以將一個(gè)二進(jìn)位數(shù)字 1101110.11011 表示為 0.110111011011 * 2^7,這樣子的表示法和定點(diǎn)表示法之間好像沒有什麼不同嘛!! 對(duì)!! 這兩個(gè)數(shù)值的大小當(dāng)然是完全一樣的,那為什麼要用浮點(diǎn)表示法呢?? 請(qǐng)注意在定點(diǎn)小數(shù)表示法之中我們看到它的缺點(diǎn)是絕對(duì)值太大的數(shù)字會(huì)被截?cái)?(正確的名稱是溢位,overflow) 位數(shù)不夠多無法表達(dá)大於範(fàn)圍的數(shù)字, 絕對(duì)值太小的數(shù) (例如:0.000000001) 也會(huì)被截?cái)?(正確的名稱是無條件捨去,truncation) 只能表達(dá)近似的值。
如果是這樣子的話,不知道你有沒有想過...
對(duì)於一個(gè)很大的數(shù)字 (例如 123456789012) 定點(diǎn)表示法保証小數(shù)點(diǎn)以後一定有固定的幾個(gè)位數(shù)來表示, (例如 123456789012.00000011) 可是這樣子的精確度對(duì)於大部份的應(yīng)用來說是沒什麼意義的,試想太陽到地球的距離多一公里少一公里真的有關(guān)係嗎?? 光速每秒鐘快一公尺又何妨?? 對(duì)於一個(gè)很小的數(shù)字 (例如 0.0000000012) 來說定點(diǎn)表示法可能因?yàn)樾?shù)點(diǎn)後沒有足夠的位數(shù)來記錄而將其省略,上面這個(gè)數(shù)字就變成 0 了。如果你說水中含有 0.0000000012 莫耳的氰化鈉,因?yàn)樾?shù)點(diǎn)後位數(shù)不足而把它當(dāng)為 0,這不太好吧!! 這時(shí)浮點(diǎn)數(shù)表示法就有它的妙用了,以第一例中一個(gè)很大的數(shù)字而言:浮點(diǎn)數(shù)由最重要的位數(shù)開始只保留一定的位數(shù),例如 123456789012.00000011 可用 .1234567890 * 10^12 來表示就夠了,這個(gè)表達(dá)方法所記錄的數(shù)字和實(shí)際的數(shù)字會(huì)有誤差,但是百分比誤差不大。以第二例而言: 0.0000000012 可用 0.12 * 10^(-8) 來表示,不需要浪費(fèi)許多位元記錄 "0",只需記 12 以及 -8 即可精確地表達(dá)這個(gè)很小的數(shù)字。
舉例來說,一種簡(jiǎn)單的二進(jìn)位浮點(diǎn)表示法可以一個(gè)位元記錄正負(fù)號(hào),七個(gè)位元二的補(bǔ)數(shù)記錄 2 的冪次, 24 個(gè)位元記錄小數(shù),共 32 位元,如下圖:
若有一個(gè)以此種表示方法的二進(jìn)位數(shù)值:
- 0 0001110 110000000000000000000000
代表十進(jìn)位的 0.75 * 2^14 這個(gè)數(shù)字。
注意:
- 和前面的定點(diǎn)小數(shù)表示法一樣,浮點(diǎn)小數(shù)表示法在表達(dá)任意一個(gè)小數(shù)的時(shí)候,也常常會(huì)有一些誤差,而且實(shí)際所表示的數(shù)字的絕對(duì)值會(huì)小於或是等於原來希望表達(dá)的那個(gè)數(shù)字的絕對(duì)值。
總結(jié)
以上是生活随笔為你收集整理的如何用二进制表示一个小数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。