因為他們用的不是浮點數,而是定點數。
定點、浮點,“點”是什麼意思?“點”就是小數點。
把小數點固定,就是定點數。當我們表示整數時,我們把小數點固定在最右面。
把小數點浮動,就是浮點數。浮點在哪兒?這個在 IEEE 浮點數標準裡面定義的。
如何精確的表示小數呢?其中一種方案就是定點數。拿 8bit 舉例吧。我們可以把小數點定在中間,用 4bit 表示整數部分,4bit 表示小數部分。 這樣構造方式(專業點我們稱他為資料結構,一般語言把整數和小數稱為簡單資料型別,其實他們一點都不簡單,而且比那些稱為複合資料型別的字串都要複雜的多),我們可以精確的表示 2^8 = 256 個小數。
因為他們用的不是浮點數,而是定點數。
用一般的程式語言(比如C、python)進行浮點數運算,把幾個兩位小數簡單的加減幾次就會出現誤差。在你的問題中,你混淆了浮點數、小數、定點數、整數。定點、浮點,“點”是什麼意思?“點”就是小數點。
把小數點固定,就是定點數。當我們表示整數時,我們把小數點固定在最右面。
把小數點浮動,就是浮點數。浮點在哪兒?這個在 IEEE 浮點數標準裡面定義的。
如何精確的表示小數呢?其中一種方案就是定點數。拿 8bit 舉例吧。我們可以把小數點定在中間,用 4bit 表示整數部分,4bit 表示小數部分。 這樣構造方式(專業點我們稱他為資料結構,一般語言把整數和小數稱為簡單資料型別,其實他們一點都不簡單,而且比那些稱為複合資料型別的字串都要複雜的多),我們可以精確的表示 2^8 = 256 個小數。
最後,安利2篇文章:程式碼之謎(四)- 浮點數(從驚訝到思考)程式碼之謎(五)- 浮點數(誰偷了你的精度?)