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