計算機的小數運算

2021-10-02 14:02:22 字數 3375 閱讀 8902

浮點數如何保證計算的精度

十六進製制的使用

規則:小數點後面部分的位權,第 1 位是 2 的-1 次冪、第 2 位是 2 的-2 次冪

這一規律並不僅限於二進位制數,在十進位制數和十六進製制數中也同樣適用

例子

將 1011.0011 轉換為十進位制的數?

圖:

負指數冪的推導0 指數冪推導

零指數冪推導:

圖:

//result = 10.000002

public

static

void

show1()

system.out.

println

(sum)

;}

二進位制數轉換為十進位制小數對應表

圖:

原因彙總

(1)計算機這個功能有限的機器裝置,是無法處理無限迴圈的小數的

(2)不管增加多少位, 2 的-○○次冪怎麼相加都無法得到 0.1 這個結果(確實存在無法轉換)

(3)無法用十進位制數來表示 1/3 是一樣的道理。1/3 就是 0.3333…

分類

雙精度浮點數型別用 64 位

單精度浮點數型別用 32 位來表示全體小數

浮點數具體組成

浮點數是指用符號、尾數、基數和指數這四部分來表示的小數

圖:

引用:雙 精 度 浮 點 數 能 夠 表 示 的 正 數 範 圍 是 4.94065645841247×10-324~1.79769313486232×10 308 ,負 數 範 圍 是-1.79769313486232×10 308 ~ -4.94065645841247×10-324 。 單 精 度 浮 點 數 能 夠 表 示 的 正 數 範 圍 是1.401298×10 -45 ~3.402823×10 38 ,負數範圍是-3.402823×10 38 ~-1.401298×10-45 。

不過,正如正文中所介紹的那樣,在這些範圍中,有些數值是無法正確表示的

符號部分: 是指使用乙個資料位來表示數值的符號。該資料位是 1時表示負,為 0 時則表示「正或者 0」。

尾數部分: 用的是「將小數點前面的值固定為 1 的正規表示式」

圖:

正規表示式:按照特定的規則來表示資料的形式即為正規表示式。除小數之外,字串以及資料庫等

指數部分: 用的則是「excess 系統表現」

好處:使用 8 位二進位制數 00000000 - 11111111(十進位制數 255)就能夠表示對應的正、負情況了

對應圖:

無視這些錯誤。根據程式目的的不同,有時一些微小的偏差並不會造成什麼問題

例如:假設使用計算機設計工業製品。將 100 個長 0.1 公釐的零件連線起來後,其長度並非一定要是10 公釐,10.000002 公釐也沒有任何問題。一般來講,在科學技術計算領域,計算機的計算結果只要能得到近似值就足夠了。那些微小的誤差完全可以忽略掉

分析:計算機在進行小數計算時可能會出錯,但進行整數計算(只要不超過可處理的數值範圍)時一定不會出現問題

例項:decimal的原理就是把小數放大10的n次方倍,將小數點移動到後面,這樣利用都是整數,就保證了精度。

bigdecimal 由任意精度的整數非標度值 和32 位的整數標度 (scale) 組成。如果為零或正數,則標度是小數點後的位數。如果為負數,則將該數的非標度值乘以 10 的負scale 次冪。因此,bigdecimal表示的數值是(unscaledvalue × 10-scale)。

定義:8421 bcd碼是最基本和最常用的bcd碼,它和四位自然二進位製碼相似,各位的權值為8、4、2、1,故稱為有權bcd碼。和四位自然二進位製碼不同的是,它只選用了四位二進位製碼中前10組**,即用0000~1001分別代表它所對應的十進位制數,餘下的六組**不用

好處:相對於一般的浮點式記數法,採用bcd碼,既可儲存數值的精確度,又可免去使計算機作浮點運算時所耗費的時間。

例如:」93.14「

9用4位二進位制數碼表示為:1001

3用4位二進位制數碼表示為:0011

1用4位二進位制數碼表示為:0001

4用4位二進位制數碼表示為:0100

組合得到93.14得bcd碼:10010011.00010100

思路:因為可以精確的使用二進位制數字表示了十進位制的數了,那麼相應的四則運算自然亦不成問題

方式:只需在數值的開頭加上 0x(0 和 x)就可以表示十六進製制數

好處:通過使用十六進製制數,二進位制數的位數能夠縮短至原來的 1/4。位數變少之後,看起來也就更清晰了

摘取bigdecima 原始碼展示:

private

static

final

long

longlong_ten_powers_table =

,//10^19

,//10^20

,//10^21

,//10^22

,//10^23

,//10^24

,//10^25

,//10^26

,//10^27

,//10^28

,//10^29

,//10^30

,//10^31

,//10^32

,//10^33

,//10^34

,//10^35

,//10^36

,//10^37

,//10^38

};

計算機的運算方法

考慮到指標的本質是無符號整型,於是歸根結底來說就兩個型別 整型和浮點型 儲存 這個環節以4bit的有符號整型為例 現今計算機中的int幾乎全部以補碼形式儲存,是因為補碼自有他的精妙所在,為了闡述這種精妙,需要引入原碼,反碼的概念,但這兩個東西是已經被淘汰掉的儲存形式,因此沒必要記憶它們,目前來看,原...

計算機中小數的儲存

我們在最初學習c語言的時候,學習資料型別的時候接觸到了浮點數,知道了它被用來儲存小數,但是為什麼在計算機中小數要稱為浮點數呢?在c語言中文網上,我知道了資料的儲存分為定點數和浮點數,它們的命名方式也取決於它們儲存資料的方式 c語言小數儲存的方法有兩種 定點數和浮點數 定點數 顧名思義,定點數就是小數...

計算機的邏輯運算

上一節 十六進製制與資料寬度 我們提到,計算是有寬度的。比如 乙個二進位制數 1111 1111 1111 1111 b 我們用4位,4位書寫形式ffff這樣比較簡單。計算機除了算術運算外,還有邏輯運算,只有二進位制才能進行邏輯運算。邏輯運算只有對與錯,成與敗兩個結果 也就是0和1 0 0 0 0 ...