沙漠中的魚

          欲上天堂,先下地獄
          posts - 0, comments - 56, trackbacks - 0, articles - 119
            BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

          日歷

          <2025年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          公告

          一個批著狼皮的羊

          開源框架

          數據結構和算法

          瀏覽器內核

          資料下載

          搜索

          •  

          積分與排名

          • 積分 - 184612
          • 排名 - 316

          您的小數點到哪里去了

          Posted on 2011-04-21 23:36 沙漠中的魚 閱讀(425) 評論(0)  編輯  收藏 所屬分類: JavaJava基礎

          Java 語言支持兩種基本的浮點類型: floatdouble ,以及與它們對應的包裝類 FloatDouble 。它們都依據 IEEE 754 標準,該標準為 32 位浮點和 64 位雙精度浮點二進制小數定義了二進制標準。

          IEEE 754 用科學記數法以底數為 2 的小數來表示浮點數。IEEE 浮點數用 1 位表示數字的符號,用 8 位來表示指數,用 23 位來表示尾數,即小數部分。作為有符號整數的指數可以有正負之分。小數部分用二進制(底數 2)小數來表示,這意味著最高位對應著值 ?(2 -1),第二位對應著 ?(2 -2),依此類推。對于雙精度浮點數,用 11 位表示指數,52 位表示尾數。IEEE 浮點值的格式如圖 1 所示。


          圖 1. IEEE 754 浮點數的格式
          圖 1. IEEE 754 浮點數的格式

          因為用科學記數法可以有多種方式來表示給定數字,所以要規范化浮點數,以便用底數為 2 并且小數點左邊為 1 的小數來表示,按照需要調節指數就可以得到所需的數字。所以,例如,數 1.25 可以表示為尾數為 1.01,指數為 0: (-1) 0*1.01 2*2 0

          數 10.0 可以表示為尾數為 1.01,指數為 3: (-1) 0*1.01 2*2 3

           

          一個十進制數能否用二進制浮點數精確表示,關鍵在于小數部分。我們來看一個最簡單的小數(轉)IEEE754能否精確表示。按照乘以2取整數位的方法,有:

          (轉)IEEE754

          得到一個無限循環的二進制小數(轉)IEEE754,用有限位無法表示無限循環小數,因此,(轉)IEEE754無法用IEEE 754浮點數精確表示。從中也可以看到:由于

          (轉)IEEE754

          這四個數也無法精確表示。同理:

          (轉)IEEE754

          也無法用IEEE 754浮點數精確表示。

          在以0.1~0.9結尾的9個小數中,只有0.5可以精確表示:(如)(轉)IEEE754,而其他均無法進行精確轉換。

          主站蜘蛛池模板: 龙井市| 肃北| 洞口县| 晋城| 南城县| 嘉义县| 建湖县| 太白县| 徐闻县| 新晃| 隆尧县| 山西省| 卢湾区| 甘孜县| 阿图什市| 社旗县| 旺苍县| 南溪县| 玉树县| 林西县| 庄浪县| 桂林市| 招远市| 涡阳县| 徐汇区| 五家渠市| 天津市| 从化市| 曲阳县| 肇庆市| 平遥县| 安化县| 永靖县| 麻城市| 五寨县| 绍兴县| 惠水县| 西安市| 汉中市| 丰宁| 台南县|