原生程序 / 交互案例 / 阅读约 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 是什么? · 我们如何核查教程