python3中浮點數相減問題(大部分時候只需要關注整數的二進制形式就行了)


首先直接上判斷方法:一切判斷直接將整數部分裝化成二進制,如果位數相等則相減后的值是等於的,如果不相等,相減大的結果一定不等於你要比較的結果。
    如66.6-60.6==6.0的情況,66.6的二進制:1000010.100110011001100110011001100110011001100110011
                           60.6的二進制: 111100.10011001100110011001100110011001100110011001101  
                           6.0的二進制:  110
大家可以看到60.6的整數長度比66.6少一位,而浮點數是保存為4字節32位的,其中第一位是符號位,后面的23位用來保存尾數,尾數就是整數和小數部分組成的,於是上面的答案就出來了,整數短一位,小數保留時肯定會多一位,而整數轉化成十進制計算是沒有精度損耗的,但是小數卻因為缺多了一位導致有精度損耗,所以66.6-60.6結果不可能等於6.0,只能是大於或者小於6.0,以此題為例子,由於60.6小數保留長所以相減的結果小於6.0.

總結:其他任何情況自行按上面的計算,第一步:直接將整數轉化成二進制,看位數是否相等,再看23(整數位和小數位的總長)  
其次:你輸入的數最終保存的樣子和取出來計算的樣子並不是你看到的60.6,而是變化了,雖然你看到的你敲的是60.6。

找到一個合適的圖片:
附上圖片:
    

浮點數在計算機中的存儲分為三個部分: 
   1. 符號位(sign):float和double符號位均為1位,0代表正數,1代表負數 
   2. 指數位(exponent):存儲科學計數法中的指數部分,采用移位存儲 
   3. 尾數位(fraction):存儲科學計數法中的尾數部分


float 的存儲方式如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM