# Floating Point Basic 浮點數(Floating Point)和定點數(Fixed Point)是兩種不同的表示小數的方式。 定點數: * 小數點位置不可移動: 在定點數中,小數點的位置是固定的,不可移動。 這意味著無論數值的大小,小數點總是在同一位置。 * 表示範圍受限: 定點數對錶示的範圍有一定限制,特別是在表達非常大或非常小的數值時,可能會有限制。 浮點數: * 小數點位置可移動: 與定點數不同,浮點數的小數點是可以移動的。 這使得浮點數能夠更靈活地表示非常大或非常小的數值。 * 科學計數法表示: 浮點數通常使用科學計數法,其中包括符號位、尾數和指數。 尾數中的最高位元總是規範化為1,從而提高表示效率。 以 1234.56舉例 在這個例子中,整數部分是1234,小數部分是56。 * 定點數: * 定點數:小數點的位置永遠在第4和第5位之間,無法改變。 * 浮點數的例子: * 浮點數:1.23456 x 10^3 ## 二進位科學記號表示法 floating point ![image](https://hackmd.io/_uploads/ryQonqPqa.png) 小數點前面是一個1 只要符合這個規則的,就是 normalized 的 floating point ## single precision ![image](https://hackmd.io/_uploads/r1zHgoPc6.png) 前提: normalized過的floating point ![image](https://hackmd.io/_uploads/H1ONgsPcp.png) * 使用32位元(4位元組)來表示。 * 具體格式為:1位元符號位元 + 8位元指數 + 23位元尾數。 * 範例:假設我們要表示十進制的數 6.75,其二進位表示為 110.11。 在單精度浮點表示中,可以規範為 1.1011 x 2^2。 這個數的單精度表示將包括符號位、指數和尾數的二進位表示。 Sign Bit | Exponent(8位) | Fraction (23位) --------------------------------------- 0 | 10000001 | 10110000000000000000000 ## Double Precision ![image](https://hackmd.io/_uploads/SJJlGiP56.png) * 使用64位元(8位元組)來表示。 * 具體格式為:1位元符號位元 + 11位元指數 + 52位元尾數。 * 例:同樣考慮十進制的數 6.75,其雙精確度浮點表示為 1.1011 x 2^2。 這個數的雙精度表示將包括符號位、指數和尾數的更長二進位表示。 Sign Bit | Exponent(11位) | Fraction(52位) ------------------------------------------- 0 | 10000000001 | 1011000000000000000000000000000000000000000000000000 ## IEEE 754 IEEE 754是一個由IEEE制定的標準,用於定義浮點數的二進制表示、算術運算規則、捨入規則和異常處理等方面的規範。 * 數據格式: * IEEE 754定義了三種常見的浮點數數據格式,分別是單精度(single precision)、雙精度(double precision)和擴展精度(extended precision)。 * 單精度使用32位表示,包括1位符號位、8位指數部分和23位尾數部分。 * 雙精度使用64位表示,包括1位符號位、11位指數部分和52位尾數部分。 * 符號位(Sign Bit): * 符號位表示數字的正負,0表示正數,1表示負數。 * 指數部分(Exponent): * 使用偏移表示法,其中有一個偏移值(bias)被加到實際指數值上,以便能夠表示正數和負數的指數。 * 單精度的偏移值為127,雙精度的偏移值為1023。 * 尾數部分(Significand or Mantissa): * 尾數部分用來表示數字的有效位數,其中對於規範化的浮點數,尾數的最高位隱含為1。 * 特殊值和異常處理: * IEEE 754定義了一些特殊的值,如正無窮大、負無窮大、NaN(Not a Number)等,以處理在浮點運算中可能出現的異常情況。 * 四捨五入和舍入模式: * 定義了不同的舍入模式,如向最近的偶數、向零、向正無窮和向負無窮等,以滿足不同的應用需求。