首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

計算機系統原理(十二)浮點數捨入規則、Java 實例驗證與浮點運算特性

     編輯:組合語言

前言

上一章介紹了 IEEE 754 標準,本章聚焦浮點運算中的捨入問題及運算特性。許多十進制小數(如 0.3)無法用二進制精確表示,必須捨入。

浮點數捨入的四種模式

IEEE 754 定義四種捨入模式:

  1. 向偶數捨入(默認):最接近值;若恰好在中間,選擇最低有效位為 0 的值(即偶數)。如 1.5→2,0.1→0。
  2. 向零捨入:截斷,向 0 方向。1.5→1,-1.5→-1。
  3. 向上捨入:向 +∞ 方向。1.5→2,-1.5→-1。
  4. 向下捨入:向 -∞ 方向。1.5→1,-1.5→-2。

除向偶數捨入外,其他三種有明確邊界關係。向偶數捨入能使統計誤差抵消,是 IEEE 默認模式(Round to Nearest)。

Java 中的捨入行為驗證

編寫 Java 程序測試 float 捨入,輸入二進制表示為 10.10011... 的數值,觀察捨入結果:

結果證實:Java 採用「向最近值捨入,中間值向偶數」策略。正負數捨入位模式相同,僅符號位不同。

浮點運算的數學特性缺失

IEEE 規定:運算結果 = 精確結果的捨入值。這導致:

  • 結合律失效:(a + b) + c != a + (b + c)。例:1f + 1e10f - 1e10f = 0.0,但 1f + (1e10f - 1e10f) = 1.0。
  • 乘法結合律、分配律同樣失效。

因此編譯器無法進行如 t = b + c; x = a + t; y = t + d; 這類浮點優化,否則可能引入誤差(如金融系統不可接受)。

小結

本章完成浮點數專題:表示、捨入、運算特性。下一章進入匯編語言(3.x 系列),將更貼近程序實際運行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved