計算機系統中的浮點數

2022-03-02 08:17:46 字數 2972 閱讀 6778

人類世界的小數的表示形式

1、我們最習慣的小數表示形式是十進位制,形式為:

它的值為:

2、小數的二進位制表示法,形式為:

它的值為:

ieee浮點標準

在計算機系統中,因為有位元組的限制(c語言中float型別佔4位元組,double型別佔8位元組),小數的表示要複雜的多。ieee制定的浮點標準得到了所有的計算機的支援。

ieee浮點標準用如下形式表示乙個數:

符號(sign)s,1為負數,0為正數。數值0的符號位解釋做特殊情況處理;

尾數(significand 有效數)m是乙個小數,範圍為1~2-ε 或 0~1-ε (即 [1,2) 或 [0,1) ,詳情請看「浮點數的型別」部分)

階碼(exponent 指數)e的作用是對浮點數加權,這個權重是2的e次冪(可能是負數)

標準浮點格式(浮點有3個字段組成)有以下兩個型別:

32位的單精度:s、exp和frac欄位分別為1位、8位、23位

64位的雙精度:s、exp和frac欄位分別為1位、11位、52位

ieee浮點數的型別

依據階碼字段是否全為0、全為1分為以下三種:

1、規格化的值:exp欄位(階碼字段)的位模式不全為0,或不全為1.

階碼e=e-bias其中,e是exp欄位表示的無符號數,bias是偏置值2^(k-1)-1(單精度為127,雙精度為1023)。階碼e以此方式來表示成有符號數。因此得到e的範圍:單精度-126~127,雙精度-1022~1023

若欄位frac(尾數域)為

則定義尾數m=1+f,其中f=

。即尾數域僅僅表示小數點後面的部分,隱含小數點前面為1。

2、非規格化的值:當階碼字段全為0

階碼e=1-bias

尾數m=f,不包含隱含的開頭1

目的是表示數值0;表示非常接近與0.0的數

3、特殊值:階碼字段全為1

當尾數域全為0,表示無窮大或無窮小

當尾數域不全為0,結果值被稱為nan(not a number)

我們用正數範圍內的示例,來說明上面的三種型別的重大意義

e:假定階碼字段是乙個無符號整數表示的值

e:偏置之後的階碼值

2^e:階碼的權重數

f:尾碼字段描述的小數值

m:尾數值

v:小數值 v=2^e * m

ieee浮點表示的特點

1,最大非規格化數7/512 到 最小規格化數8/512的平滑轉變;

2,若將上圖中浮點數的位表示式解釋為無符號整數,它們就是按公升序排列的,就像它們表示的浮點數一樣。(ieee如此設計格式就是為了浮點數能夠使用整數排序函式來進行排序)

例如:

typedef unsigned char *type_pointer;

void show_types(type_pointer start,int

len)

intmain()

輸出:00 00 80 3f

分析:這個程式執行在windows 32位機上。window系統是小端法(數值的低位元組放在記憶體的前端)機器。

對於的二進位制表示為:00111111 10000000 00000000 00000000

float的第1位為符號位:0;第2至第9位為階碼位,供8位:e=127-127=0;後面的23位為尾碼,m=1+0=1。

所以,(-1)0*1*20

=1.0

浮點數的捨入方式

ieee浮點格式定義來四種不同的捨入方式。預設的捨入方式是:偶數捨入。

偶數捨入(round-to-even):找最接近的數值,捨入到這個值;如果有兩個可能的值,將數字向上或向下捨入,使得到的結果的最低有效數字是偶數。

例如,將下面二進位制捨入到小數後一位:

11.001(2)->捨入:11.0(2)  11.0是最接近的數值

10.010(2)->捨入:10.0(2)      10.0 和 10.1都是最接近的值,但是10.0的最低位為偶數

10.110(2) ->捨入:11.0(2)      10.1 和 11.0 都是最接近的值,但是11.0的最低位為偶數

浮點運算

我們將x +f y定義為round(x + y)

,這是對實際運算的精確結果進行捨入後的結果。

浮點加法的特點:

1、浮點加法不具有結合性。(由於可能發生溢位,或者捨入而失去精度)

float f1=(3.14+10000000000)-10000000000

;

float f2=3.14+(10000000000-10000000000

); printf(

"%f %f

",f1,f2);

輸出:3.139999 3.140000

2、浮點加法滿足了單調性。

無符號和補碼加法不具有這個實數加法的屬性(因為溢位的原因)

必須非常小心地使用浮點運算,因為浮點運算只有有限的範圍和精度,而且不遵守普遍的算術屬性,比如結合性。

不能表示 vs 不能精確表示

在浮點數的表示範圍內,有多於 99.999…% 的數在計算機中是不能表示的。從數量級分析一下,32bit 浮點數的表示範圍是 10 的 38 次

方,而表示個數呢,是 10 的 10 次方。 能夠被表示的數只有 1/100000000…. (大概有30個零)。詳細內容請見「**之謎(五)- 浮點數(誰偷了你的精度?)」

計算機系統 浮點數

浮點數 1.二進位制小數 二進位制小數點右側的 位 表示2的分數冪次 負冪 竅門 小數部分寫成分數,分母為2 k,k為小數字,分子為小數部分二進位制的值。即 101 5 8 0.625 表示範圍 只能精確表示諸如x 2 k的數 其它的值只能近似表示 2.ieee浮點數 數字形式 符號位s 確定了這個...

計算機系統 整數與浮點數 詳解 一

小結整數分為無符號數和有符號數。整數在計算機上的運算是模運算,形成的數學結構稱為阿貝爾群,阿貝爾群具有以下特點 滿足運算的交換律和結合律公理 整數具有單位元 0 整數具有逆元 由於模運算導致阿貝爾群產生,從而導致了整數與浮點數在運算性質上的極大不同。整數支援加法和乘法的交換律 結合律 而浮點數因為精...

計算機系統第二章 浮點數

二進位制小數 底權公式 1011.101 8 2 1 0.5 0.125 11.625 竅門 小數部分寫成分數,分母為2 k,k為小數字數,分子為小數部分二進位制的值,即101 5 8 0.625 觀察 小數點右移一位 乘2 小數點左移一位 除2 二進位制小數表示範圍 只能精確表示諸如x 2 k的數...