計算機中的浮點數

2021-10-09 16:38:07 字數 1517 閱讀 7087

寫這篇blog,是因為在上工程碩士數學時候,又開始講到了浮點數的儲存,運算和精度的問題。這個問題已經見了好多次了,從微機原理的課到計算機視覺處理矩陣時候的conditioning,到這次。但感覺一直都沒有理清楚。所以這次嘗試梳理一下。

一般主要分為兩種形式,這裡以8位的儲存進行解釋:

所以用浮點數表示數時,乙個浮點數的動態範圍和其精度是不能兼得的。

附上乙個知乎(真格量化)看到的圖,圖里簡潔地表示出了,越靠近0,每乙個離散點代表的實數範圍越小,而越遠離0,乙個離散點代表的實數區域就越大。

這裡附上課程ppt的乙個典型問題:

答案為用定點法才可以準確計算。這是由於定點法剛好可以準確表示出0.1875,但是對於浮點數,在10之後,最小變化量δ

=0.25

\delta=0.25

δ=0.25

,所以無法準確計算。

但這決不能說明定點法優於浮點法,只是乙個題目的故意設計而已,體現出浮點數的精度問題而已。

2​加上階碼,整體結果為 110, 0100 011

最終結果為 110 0100 12 = 23 *1.010012 = 1010.012=10.25

這裡那一頁上課的ppt作為例子,這是在計算兩個平面的投影關係時匯出的乙個問題,下一步需要進行svd分解。

但我們觀察左邊的矩陣,由於同時包含了1,x項,和xy這樣相乘的二次項,會導致整個矩陣的數值相差巨大,對求解的數值穩定性和誤差十分不友好。這就回到了上面我們說到的浮點數的取值範圍和表示精度是不可兼得的

所以這裡採取的一般做法都是把他轉化到[-1,1]這樣乙個對稱的區間,因為在[0,1],和[-1,0]這樣的兩個區間內部的精確度應該是一樣的,所以為了不因為過度壓縮導致的誤差,採取這樣乙個對稱區間進行計算。

計算機中浮點數的表示

浮點數就是有小數點的數。在c語言中有三種浮點數,分別為float,double和long double。下面分析一下其實現。include int main int argc,char argv 這是乙個簡單的c語言程式,定義了三個不同型別的變數a b c。編譯後用gdb除錯下 gdb p size...

計算機中浮點數的表示

在c語言中浮點數有兩個size,32位和64位。其中32位浮點數 第1位是signflag 符號位 2 9位是階碼位 exponent 10 32位是尾數字 significand 64位分別是第1位,2 12位,13 64位。浮點數大小的公式是 x 1 2 e m e exp 2 1 將 exp ...

浮點數在計算機中的表示

浮點數在計算機中的表示 最後編輯於 2010 4 13 計算機中數字是以0和1二進位制儲存的,我們熟悉的是整數的如何在計算機中表示,那麼浮點數是如何表示的呢?一 轉換 我們先來看看如何將十進位制的浮點數轉換成二進位制。乙個十進位制的浮點數,例如 abcd.efg 其中a g為0.9 其值用多項式為 ...