浮點數計算機內表示及計算

2021-09-02 19:27:08 字數 1683 閱讀 9280

浮點數即帶有小數的數,是不精確的

在計算機內表示:f = (-1)^s * m * 2^e 

s(符號數)

e(指數)

m(尾數)

表示公式

偏移量18

23(-1)s*2(p-127)*1.m

1271

1152

(-1)s*2(p-1023)*1.m

1023

例如:浮點數4.5計算機內表示為:

100.1=(-1)^0 * 1.001 * 2^2

s=0m=001(有效位不帶整數部分的1,只記錄小數部分)

e=2+127(偏移量)=129

最終表示:

0 10000001 00100000000000000000000

浮點數運算:

先介紹二進位制運算

對於有符號數而言:

(1)二進位制的最高位是符號位:0表示正數,1表示負數

(2)正數的原碼、反碼、補碼都一樣;

(3)負數的反碼 =  它的原碼符號位不變,其他位取反(0 ->1 ; 1->0 );

(4)負數的補碼 = 它的反碼 +1;

(5)0的反碼、補碼都是0;

(6)在計算機運算的時候,都是以補碼的方式來運算的;

具體例子可見:

其中補碼計算時要計算符號位,補碼運算結果的符號位為0,則得到的結果就是該正數,若結果的符號位為1,則對結果進行逆運算得到原碼,即減一取反。

浮點數計算規則(引用自

設x=mx*2^ex,y= my*2^ey,求x±y=?

•規則:

–對階:de=ex-ey;小階向大階看齊。

–實現尾數的加(減)運算。

–規格化處理

•如果結果的兩個符號位的值不同,表示運算尾數結果溢位,應「右規」,即尾數結果右移一位,階碼+1

•如果最高數值位與符號位相同,應「左規」,此時尾數連續左移,直到最高數值位與符號位的值不同為止;同時從階碼中減去移位的位數

–捨入處理

–檢查是否溢位

例:•x=2^(010)·0.11011011,    y=2^(100)·(-0.10101100)

•計算過程:

–①對階操作:階差△e=[ex]補+[-ey]補=00010+11100=11110

x階碼小,mx右移2位,保留階碼e=00100

[mx]補=00 00110110 11

–②尾數相加:[mx]補+[my]補=00 00110110 11+11 01010100

=11 10001010 11

–③規格化操作:左規,移一位,結果=11 00010101 10

階碼減1,e=00011

–④捨入:附加位最高位為1,在結果的最低位+1,

得新結果[m]補=11 00010110,m=-0.11101010

–⑤判溢位:階符為00,不溢位,最終結果為

x+y=2011·(-0.11101010)

例子:double x=0.04,y=0.03;

x-y=0.010000000002 不等於0.01

所以程式中不能對浮點數進行邏輯大小判斷。

設計金額的都要用bigdecimal。

計算機浮點數 float 表示

這篇文章講得比較淺顯易懂,所以轉一下。必須對計算機原理的原碼 反碼 補碼 移碼有個清晰的認識,另外參考一下ieee754,否則也會有不明白的地方。括號內為本人看法或觀點。我想浮點數的實現與編譯器也會有很大關係的。前兩天仔細看了看,覺得研究計算機如果不說說如何表示浮點數就太不厚道了.很多人也寫過,這裡...

計算機浮點數 float 表示

2007 09 09 17 07 3674人閱讀收藏 舉報 先說說32 位的 float型.乙個浮點數 x,在計算機中表示為 x a 2 e 這裡 e 代表指數,a 代表尾數,在 計算機內部,他們都是用二進位制表示的.其中a 用二進位制的科學表示法 表示,由於科學表示法第一位總是1 0除外 所以第一...

計算機的浮點數表示

假設有乙個浮點數 float fl 3.14159267 和圓周率很像啊 它在計算中的是怎樣儲存的呢?步驟1 轉換為二進位制表示,浮點數分為整數部分和小數部分,對於該浮點數來說,整數部分為3,浮點數部分為0.14159267.這裡假設fl是4個位元組,32位浮點數表示.十進位制 二進位制 3 000...