原生程式 / 互動案例 / 閱讀約 18 分鐘

Windows 小算盤:為什麼 200 + 10% 等於 220?

使用 REA 分析 Windows 小算盤的百分號鍵。比較加法和乘法,分析分支,並測試雙運算元示範。

本頁內容

01. 拆解之前,先試一試

保持兩個數字為 200 和 10。按「套用 %」,第二個數字變成 20;再按「接著 =」,結果是 220。切換到乘法再試一次:第二個數字變成 0.1,最終結果是 20。

百分比實驗動手 / 觀察 / 解釋
標準模式 / 百分比01 / 輸入

200 + 10%

10

按 %,看看第二個數字如何變化。

用同樣的兩個數字,先試加法,再試乘法。

雙運算元百分比實驗,並非完整的 Windows 小算盤模擬器。

你將做出什麼

一個雙運算元百分比實驗,以及同時檢查中間狀態和最終結果的測試矩陣。

分析之前

實驗無需設定。若要分析二進位檔案,請準備可供分析的 Windows 小算盤安裝包,並設定好原生分析後端。微軟公開原始碼可用於額外交叉核對。 設定 REA →

02. 紀錄按鍵順序

先明確問題:使用者輸入 200、選擇加法、輸入 10、按百分號、再按等號時,究竟發生了什麼?紀錄按百分號和等號後各自顯示的內容。中間運算元比單看最終答案提供更多線索。

這是標準模式的行為。請把模式、版本和按鍵順序寫進測試紀錄。重複按等號、省略運算元或再次按百分號都會引入額外狀態;第一個實驗先不涉及這些情況。

複製這段分析提示詞
使用 REA 分析 Windows 小算盤標準模式下的百分比行為。比較 200 + 10 % = 與 200 × 10 % = 兩個按鍵序列。找出安裝模組中負責算術的部分,再追蹤百分比分支,以及隨運算子變化的運算元變換。分別紀錄實際觀察到的指令、對原始碼的解釋和真實 GUI 輸入結果。

03. 計算邏輯未必在啟動程式裡

開啟一個名字看似正確的可執行檔案還不夠。如果它把任務轉交給另一個應用程式,就沿著呼叫繼續進入已安裝的套件。紀錄實際分析的檔案及其雜湊值。

上游分析發現,算術邏輯位於 CalcViewModel.dll,而非小型啟動程式 calc.exe。報告由分析人員輔助選擇函式。微軟公開原始碼幫助解釋了運算子 ID,但未證明該原始碼對應已安裝二進位檔案的確切提交。

  • 哪個檔案包含算術分支?
  • 什麼決定執行百分比操作,什麼紀錄上一個運算子?
  • 前一個數值和目前輸入存在哪裡?
  • 各個分支會呼叫哪些算術輔助函式?

04. 先重建運算元變換

對於加減法,輸入的百分比相對於第一個數字計算;對於乘除法,則變成除以 100 後的小數。之後才套用待執行的運算子。實作和介面都應把這兩個階段分開。

實驗要求分別按百分號和等號,讓你看清狀態變化。修改任一輸入或切換運算子,都會開啟新的計算流程。它接受兩個有限數值,而非任意計算表示式。

複製這段分析提示詞
只實作標準模式下的雙運算元百分比行為:+ 和 − 將目前輸入變為 entry × (first / 100);× 和 ÷ 將其變為 entry / 100。保留變換後的運算元以供測試。只在按等號時套用待執行的運算子。處理除以零、空輸入和重設。不要聲稱相容重複按鍵或科學模式。

05. 測試中間值,而不只是最終答案

兩個錯誤有時會相互抵消,得到看似正確的最終答案。先斷言變換後的運算元,再斷言結果。納入減法、除法、零和第一個數字為負數的情況,避免測試僅靠寫死程式碼中的熟悉的加法範例就能通過。

如果你在 Windows 上實際執行得到不同結果,先核對模式和精確輸入順序,再修改公式。儲存按鍵序列和顯示狀態。上游報告並未聲稱完成了原版 Windows GUI 輸入驗證,不要把它當成已經做過的測試。

06. 比較已知結果

將這些結果作為明確的檢查點。與它們一致,只能支持這一小段規則,不能證明與整個應用程式相容。

按鍵序列按 % 後按 = 後
200 + 10 % =20220
200 − 10 % =20180
200 × 10 % =0.120
200 ÷ 10 % =0.12,000
50 + 20 % =1060
6 × 6 % =0.060.36
200 ÷ 0 % =0無定義

將兩個檔案儲存在同一資料夾,用 Node.js 執行驗證指令碼,無需安裝套件。

終端機
node check-case-labs.mjs

07. 到底驗證了什麼?

本站針對自己實作的雙運算元計算執行數值測試,包含微軟公開的範例。我們沒有執行微軟的測試套件,也沒有自動操作已安裝的 Windows 應用程式。重複按百分號、重複按等號、完整表示式解析和科學模式均不在示範範圍內。

檢視本站紀錄的數值測試結果 →

來源: REA 的計算機證據報告 · 微軟固定版本的百分比分支。教學、圖示和瀏覽器實驗均獨立編寫。

下一個實驗恐龍游戲為什麼越跑越快? →

第一次使用這個工具? REA 是什麼? · 我們如何查核教學