日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浮点数一些设计原理

發布時間:2023/12/6 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浮点数一些设计原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要:本篇文章會講述浮點數的設計原理,比如如何存儲二進制的問題,從而幫助我們更好的編碼。

__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 存儲為例來講解存儲。

SignExponentMantissa
1bit8bits23bits
  • Sign:表示浮點數是正數還是負數。__0__表示正數,__1__表示負數
  • Exponent:指數部分。類似于科學技術法中的M*10^__N__中的 N,要注意規定 01111111 = 2^0 也就是 0,所以指數部分可以表達: -128 - 127。
  • Mantissa:基數部分。浮點數具體數值的實際表示。

嘗試把 3.1 轉換成二進制存儲:

  • 是正數第一位是 0。
  • 3 轉換成二進制 11。
  • 0.1 轉換成二進制,__0.1 __ 轉換成 0.0625+0.007825+0.00390625... 即 2^-3+2^-4+2^7....,二進制為 .00011001100110011001100 ,是1100無限循環,保留到23位。(這里確實有點繞,不理解的單獨查資料能更快了解。也就是這里導致小數在計算機里的存儲會不準確,是一個近似值。
  • 整數和小數合并為 11.0001100110011001100110 , 然后保證小數點以前只有一位數,1.10001100110011001100110 * 2^1
  • 合并后小數點前的一位數是要舍去的,由于我們上一個步驟,小數點前的數字總會為 1,所以為了減少存儲我們舍去 . 前的為1數字,最后得 .100011001100110011001100 * 2^1
  • 指數轉換,由上一步得指數為 __2^1 __,由于規定 01111111 = 2^0(這樣的目的就是為了,指數可以為正也可以為負), 2^110000000 ,合并后得 10000000 10001100110011001100110
  • 添上第一位代表正負 0 10000000 10001100110011001100110 最終__ 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

    總結

    以上是生活随笔為你收集整理的浮点数一些设计原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。