單精度浮點數中的「單」和「浮點」是什麼意思?

他們是從何而來的?


「浮點」是相對「定點」而來的。即小數點的位置是浮動的,而不是定死的。

如果要同時保存下:

100000000000.0
0.000000000001

定點數形式至少得保存成:

100000000000.000000000000
000000000000.000000000001

一個〇都不能漏,必須原原本本保存下來。小數點的位置是固定的。

浮點數形式則可以保存成:

小數 1 指數 11
小數 1 指數 -12

即按照 fraction 	imes n^{exponent} 保存。這個例子中,浮點數的小數部分都是 1,改變(浮動)的是小數點的位置(指數部分)。

「單精度」單獨看來比較難理解,但是綜合所有「X精度」來看:

  • 16 位:半精度(Half)
  • 32 位:單精度(Single)
  • 64 位:雙精度(Double)
  • 128 位:四精度(Quadruple)

應該是「單倍」的意思。


單精度:總字長是 32bit,雙精度是 64bit

浮點:存儲的形式是1.mathrm{xxxxxxx}	imes 2^m,小數點的位置是不固定的


單精度就是有效數字23個bit,雙進度就是有效數字53個bit。浮點的意思就是你可以把小數點放在這有效數字那麼多個bit的中間、前面多少個0,或者後面多少個0那裡。小數點是浮的,叫浮點。


單,雙精度其它答案都解答,不廢話了,我想再說說浮點。

數的表示分為 浮點表示 和 定點表示

定點表示:小數點的位置是固定的,不能移動

比如, 0.0050618 這個數,它就是這麼大,它的小數點是不能移動的。如果你移動了它的小數點,這個數就變了,就不再是它原來的樣子。

浮點表示: 小數點的位置是可以移動的

再比如,0.0050618這個數,0.0050618是它的定點表示,0.50618*10(-2)[10的負二次方哈]是其浮點表示。其中,最為關鍵的就是50618和-2這兩個東東,包含了這個數的全部信息。50618稱為尾數,-2稱為階碼。

浮點,就是說其小數點可以隨意移動,但是還是表示那個數。0.0050618可以表示成0.50618*10(-2),也可以表示成0.050618*10(-1),等等。

使用比較多的是規範化浮點數,就是小數點後的那個數不能等於零,0.0050618的規範化浮點數就是0.50618*10(-2)


關於浮點的解釋在最後一段,"記住"那一部分。來自C++ Primer plus


http://en.wikipedia.org/wiki/IEEE_floating_point


推薦閱讀:

你為什麼喜歡編程?
Concept 對 C++ 有什麼影響,它和 Rust 的泛型 Bound 和 Trait 有點類似?
有哪些鍛煉編程能力的 C++ 項目?
Rust 和 C++ 有哪些優劣?
我是初學c++者,我想達到熟練使用c++的程度,我就想知道達到什麼地步才能算是熟練使用呢?

TAG:編程語言 | 中央處理器CPU | C編程語言 | C |