兩張圖帶你入門數值科學

兩張圖帶你入門數值科學

5 人贊了文章

先來說說封面的問題:

a = 100 + 1/3 - 100

b = 1/3

問 a == b 的結果

接觸過編程的應該都知道這題答案是False, 但是為什麼呢?

為什麼 a = 0.3333333333333286,是以286結尾而不是其他數呢?

計算機中的小數使用浮點數floating point 表示的,而且是2進位

↓總精度p(包括小數點前的1位和後面的p-1位)↓

1/3 = 0.01010101010101010101010101010101010101010101010

而且這個精度是固定的,分配給一個浮點數的內存是有限的

1/3 = 1.010101010101010101010101010101010101010101010*2^(-2)

這個是normalize之後的狀態

而我們加了100之後

a = 1.0001010101010101010101010101010101010101010101010*2^(2)

↑加進來的100↑ ↑溢出的精度↑

因為加進來了3個精度,而p的精度又是固定的,所以後面的010就溢出了,系統直接扔掉了

而減了100之後

a = 1.010101010101010101010101010101010101010101000*2^(-2)

↑多出的精度↑

減了100之後,就少了3個精度,最後多出來的3個精度用0補齊,於是就000了

這時我們再換成小數

a = 0.3333333333333286

這就是為什麼(100+1/3 -100)!= 1/3

而且最後末尾的數不是000而是286

根據系統,變成軟體的不同可能這個後面的多出來數字會不一樣,因為浮點數的種類不一樣。

浮點數種類由以下四個值決定

eta,p,L,U

分別表示

base:進位數和底數(保持進位數和底數的一制在進位時就只要移動小數點就可以了,比如1.22×100=122,直接移動小點就可以×100,十進位如此,在其他進位中同理)

precisison:精度,也就是一共有多少位可以存儲

Low: 最小指數

up: 最大指數

下次如果面試問到這個問題不要只回答False,把這一套理論講給你的面試官聽,錄取幾率一定大幅提升。

最後為了不做標題黨,送上兩張完整的數值科學圖鑑。

這是圖1:上文內容就用到了紅色方塊中的知識

這個是圖2

然後這就是計算機數值科學的入門了,所有入門知識都在這裡了。

ps:

好吧,以上這兩張其實是開卷考的所用的小抄

趕緊趁著考完,在沒忘光之前寫一篇hhh

喜歡的話,就點個贊和評論吧!

推薦閱讀:

TAG:計算機科學 | 計算機技術 | 信息技術IT |