浮点数一些设计原理
摘要:本篇文章會講述浮點數的設計原理,比如如何存儲二進制的問題,從而幫助我們更好的編碼。
__1. deading code __
console.log(1.0-0.9 == 0.1); //輸出 false console.log(1.0-0.9, 0.1); //輸出 0.09999999999999998 0.1 //所以判斷浮點運算結果前要對參數進行精度縮小,縮小精度會四舍五入。 console.log(parseFloat((1.0-0.9).toFixed(10)) == 0.1); //輸出 true console.log(parseFloat((1.0-0.9).toFixed(10)),0.1) //輸出 0.1 0.1 復制代碼所以使用 JavaScript 設計浮點數計算時,要考慮小數不準確的問題。
2.浮點數二進制存儲
如 32 存儲為例來講解存儲。
| 1bit | 8bits | 23bits |
- Sign:表示浮點數是正數還是負數。__0__表示正數,__1__表示負數
- Exponent:指數部分。類似于科學技術法中的M*10^__N__中的 N,要注意規定 01111111 = 2^0 也就是 0,所以指數部分可以表達: -128 - 127。
- Mantissa:基數部分。浮點數具體數值的實際表示。
嘗試把 3.1 轉換成二進制存儲:
其中最重要的部分是小數轉二進制,像 0.5、0.25、0.125 這樣的小數轉化二進制為 0.1、0.01、0.001 ,但是 0.1、0.2 就不好表示了。如果不理解百度有在線二轉十進制 地址
驗證的網址:https://www.h-schmidt.net/FloatConverter/IEEE754.html
3.猜想
語言還沒有組織好。
我的博客:http://liangtongzhuo.com
轉載于:https://juejin.im/post/5a31f1906fb9a04514640e0e
總結
- 上一篇: 一张图解决Android Studio
- 下一篇: UITableView的使用及代理方法