單雙精度浮點數

2021-06-06 01:14:44 字數 1442 閱讀 9997

浮點數並不一定等於小數

,定點數也並不一定就是整數。所謂浮點數就是小數點在邏輯上是不固定的,而定點數只能表示小數點固定的數值,具用浮點數或定點數表示某哪一種數要看使用者賦予了這個數的意義是什麼。

c++中的浮點數有6種,分別是:

float:單精度,32位

unsigned float:單精度無符號,32位

double:雙精度,64位

unsigned double:雙精度無符號,64位

long double:高雙

精度,80位

unsigned long double:高雙精度無符號,80位

乙個浮點數a由兩個數m和e來表示:a = m × b^e。在任意乙個這樣的系統中,我們選擇乙個基數b(記數系統的基)和精度p(即使用多少位來儲存)。m(即尾數)是形如±d.ddd...ddd的p位數(每一位是乙個介於0到b-1之間的整數

,包括0和b-1)。如果m的第一位是非0整數,m稱作規格化的。有一些描述使用乙個單獨的符號位(s 代表+或者-)來表示正負,這樣m必須是正的。e是指數。

(1) 單精度浮點數(single)

用來表示帶有小數部分的實數,一般用於科學計算。

占用4個位元組(32位)儲存空間,包括符號位1位,階碼8位,尾數23位。其數值範圍為3.4e-38~3.4e+38,單精度浮點數最多有7位十進位制有效數字,單精度浮點數的指數用「e」或「e」表示。

單精度浮點數有多種表示形式:±n.n(小數形式) ±n e ±m(指數形式) ±n.n e ±m (指數形式)

如果某個數的有效數字位數超過7位,當把它定義為單精度變數時,超出的部分會自動四捨五入。

(2)雙精度浮點數(double)

用8個位元組(64位)儲存空間,包括符號位1位,階碼11位,尾數52位。

選用單精度資料,是說你讓電腦用較少的空間存放資料,表現為精確到小數點後5位,並且第五個小數還是四捨五入得到的,如果你用雙精度定義資料,是說你用較多的空間存放同乙個數,表現為小數點後較多的位數,同樣最後一位仍然是四捨五入得到。這就是區分單雙精度的原因。

例項

例如:

2.345 e 67 這是乙個十進位制規格化浮點數,前導數字就是2 。

就只有乙個「隨機」的浮點數而言,討論其分布式沒有意義的,我們要討論的是充分多個「隨機」數進行的一系列運算後產生的浮點結果的前導數字分布。

假設現在有一巨大的浮點數集,依此對數集中每個浮點數都乘以2,其中有乙個十進位制浮點數f,它的前導數字是1,那麼它底數可能的值範圍就是1.000…~1.999…,乘以乙個數字2,那麼它的底數就變成2.000…~3.999…,很明顯乘以2以前前導數字是1的浮點個數與現在前導數字是2、3的浮點個數相同。

用單精度型資料和雙精度型資料表示13.25。

單精度表示13.25: (13.25)10=1*101+3*100+2*10-1+2*10-2

單雙精度浮點數的IEEE標準格式

目前大多數高階語言 包括c 都按照ieee 754標準來規定浮點數的儲存格式,ieee754規定,單精度浮點數用4位元組儲存,雙精度浮點數用 8位元組儲存,分為三個部分 符號位 階和尾數。階即指數,尾數即有效小數字數。單精度格式階佔8位,尾數佔24位,符號位1位,雙精度則為11為階,53 位尾數和1...

浮點數精度問題

一 例子 首先我們去編譯器試試 double a 1.9 通過新增監視檢視a的值 會發現a的值是1.8999999 二 開始今天的學習 在最開始學c 的時候並沒有對浮點數進行很深入的學習,認為浮點不就是小數嘛,首先在c 的巨集裡面有 flt max 和 flt min 的定義,float是四位元組的...

浮點數精度之謎

話要從業務 裡的bug說起,大致過程是前端運算 2.07 1 之後結果卻是1.0699999999999998,老司機們都知道是浮點數運算的精度丟失導致的,在檢視了下具體 果然處理不當。因此我深究一番,並誕生了此文。此處重點強調兩個認識誤區 首先不得不說說浮點數的表示方法,任何數在計算機面前都會被處...