為什麼浮點資料表示有誤差?

2020-10-09 11:00:18

首先先說下計算機記憶體裡的儲存:

記憶體中最小的單位 位/位元(bit)  二進位制數序列中的一個0或一個1就是一個位元,在電腦中,一個位元對應著一個電晶體。

二進位制即常說的0和1兩個數碼來表示的數 基數為2,進位規則是  「逢二進一」

十進位制數則用0、1、2、3.........9 , 這十個數來表示。十進位制(計du數法)是以10為基礎數位系統,進位規則是 「滿十進一」

Java中基本資料型別:四類八種:

             

double float屬於浮點資料型別 然而在實際的開發中會發現有誤差

public class TestDemo {
    public static void main(String args[]){
        double a=2.9;
        float f=2.4f;
        System.out.print("計算結果:");
        System.out.println(a-f);
    
    } 
}

計算的結果怎麼和預想的不一樣啊 (嗯。。。腦殼疼)

從計算機的儲存原理解釋浮點數為何會產生誤差:

 都知道計算機內部是以二進位制進行儲存的,因此十進位制的有限位的小數在進來之後,會在計算機內部會顯示是一個無限位的小數。

Ps:十進位制2.9轉換為二進位制10.1110011001100..................1100無限迴圈

      : 

   Ps:計算機儲存浮點數的精度有限,例如float可以保留十進位制最多7位(二進位制23位)有效數位,

      double可以保留十進位制15-16位元(二進位制52位)有效數位。那有效數位以後的位就被忽略了。

所以現在清楚浮點資料儲存是如何產生誤差的了吧。