浮點數學習筆記

2021-07-24 14:00:47 字數 2708 閱讀 5714

乙個機器浮點數由階碼和尾數及其符號位組成:

尾數:用定點小數表示,給出有效數字的位數,

決定了浮點數的表示精度;

階碼:用定點整數形式表示,指明小數點在資料中的位置,決定了浮點數的表示範圍。

(2) 浮點數的標準格式 (n=re.m)

為便於軟體移植,使用 ieee(電氣和電子工程師協會)標準

ieee754 標準:尾數用原碼;階碼用移碼;基為2

•  按照 ieee754 的標準,32位浮點數和64位浮點數的標準格式為 :

s—尾數符號,0正1負

m—-尾數,純小數表示,小數點放在尾數域的最前面。

採用原碼表示。

e—階碼,採用「移碼」 表示;

階符採用隱含方式,即採用「移碼」方法來表示正負指數。

規格化目的:

為了提高資料的表示精度

為了資料表示的唯一性

尾數為r進製的規格化:

絕對值大於或等於1/r

二進位制原碼的規格化數的表現形式:

正數 0.1******

負數 1.1******

補碼尾數的規格化的表現形式:

尾數的最高位與符號位相反

正數 0.1******

負數 1.0******

在計算機內,其純小數部分被稱為浮點數的尾數,對非 0 值的浮點數,要求尾數的絕對值必須 >= 1/2,即尾數域的最高有效位應為1,稱滿足這種表示要求的浮點數為規格化表示:

0.1000101010

把不滿足這一表示要求的尾數,變成滿足這一要求的尾數的操作過程,叫作浮點數的規格化處理,通過尾數移位和修改階碼實現。

規格化處理:

在計算機內,其純小數部分被稱為浮點數的尾數,對非 0 值的浮點數,要求尾數的絕對值必須 >= 1/2,即尾數域的最高有效位應為1,稱滿足這種表示要求的浮點數為規格化表示:

0.1000101010

把不滿足這一表示要求的尾數,變成滿足這一要求的尾數的操作過程,叫作浮點數的規格化處理,通過尾數移位和修改階碼實現。

隱藏位技術:

既然非 0 值浮點數的尾數數值最高位必定為 1,則在儲存浮點數到記憶體前,通過尾數左移, 強行把該位去掉, 用同樣多的尾數字就能多存一位二進位制數,有利於提高資料表示精度,稱這種處理方案使用了隱藏位技術。

0.1100010  1.100010

當然,在取回這樣的浮點數到運算器執行運算時,必須先恢復該隱藏位。

移碼定義:

[x]移 = x0 x1 x2 ··· xn

= 2n + x

乙個規格化的32位浮點數x的真值為:

乙個規格化的64位浮點數x的真值為:

x = ( –1)s×(1.m)×2e-1023

這裡e是真值,e是機器數

例:若浮點數 x 的二進位制儲存格式為(41360000)16,求

其32位浮點數的十進位制值。

解: 0100,0001,0011,0110,0000,0000,0000,0000

數符:0

階碼:1000,0010

尾數:011,0110,0000,0000,0000,0000

指數e=階碼-127=10000010-01111111 =00000011=(3)10  包括隱藏位1的尾數:

1.m=1.011 0110 0000 0000 0000 0000=1.011011

於是有 x=(-1)s×1.m×2e

=+(1.011011)×23=+1011.011=(11.375)10
例: 將十進位制數20.59375轉換成32位浮點數的二進位制格式來儲存

解:首先分別將整數和分數部分轉換成二進位制數:

20.59375=10100.10011

然後移動小數點,使其在第1,2位之間

10100.10011=1.010010011×24     e=4

於是得到: e =e – 127

s=0,e=4+127=131=1000,0011,m=010010011

最後得到32位浮點數的二進位制儲存格式為

0100 0001 1010 0100 1100 0000 0000 0000= (41a4c000)16

例:將十進位制數-0.75表示成單精度的ieee 754標準**

解:-0.75 = -3/4 = -0.112 = -1.1×2-1

=(-1)1×(1 + 0.1000 0000 0000 0000 0000 000)×2-1

=(-1)1×(1 + 0.1000 0000 0000 0000 0000 000)×2126-127

s=1,e= 12610 = 011111102, f = 1000 … 000。

1 011,1111,0 100,0000,0000,0000,0000,0000

b f 4 0 0 0 0 0 h

浮點數筆記

c 中共有3種浮點型別 float double和long double。其中float一般為32位,double為64位,long double 為64位以上。範圍 float和double的具體區別為 float 1bit 符號位 8bits 指數字 23bits 尾數字 double 1bit...

學習筆記 浮點數的表示

一 二進位制定點法 如 0.011 那麼它表示1 8 2 8 3 8 可以看出它並不能精確地表示每乙個小數值,在不提高位的情況下只能盡量選擇最接近的值。比如1 5,十進位制可以表示為0.2,但2進製不能精確表示。二 ieee浮點法 公式 v 1 s m 2 e v表示數值。s表示符號,s 0時為正,...

C Primer 學習筆記 浮點數精度問題

之前做過lff solver的時候遇到了浮點數的精度問題,因為浮點數計算到一定的精度之後的計算結果就全靠運氣了。這個本身是由於浮點數本身是按照科學計數法來儲存的,在座標軸上的分布是很不均勻,越靠近0浮點數越密集,越遠離0浮點數越稀疏,所以在遠離0的大的浮點數存在大數吃掉小數的情況,那麼浮點數的精度 ...