实验室 · 原生对照
重建计算器的 % 键 —— 试玩两条规则
为何 200 + 10% 得到 220,而 200 × 10% 得到 20?百分号依赖运算符。Microsoft 公开了 Calculator 源码,可用具名符号裁决 REA 发现。本页在 rea.run 托管运维向双规则试玩。
- 遇到 +
-
取第一个数的 10%。
200 的 10% = 20 → 200 + 20 = 220 - 遇到 ×
-
把 10% 变成 0.1。
200 × 0.1 = 20
200 + 10
按 % 看 10 会变成什么。
可读规则(教学摘要)
if (operation == multiply || operation == divide) {
percent = current / 100;
} else {
percent = current * previous / 100;
}
当 previous = 200、current = 10:加法路径得到 20 再得
220;乘法路径得到 0.1 再得 20。
开源裁决
| 项 | 值/链接 |
|---|---|
| 公开树 | microsoft/calculator(MIT) |
| 处理函数(钉住的提交) | scifunc.cpp · IDC_PERCENT |
| 单元测试(钉住) | CalculatorManagerTest.cpp |
| 命令 ID | IDC_MUL 92 (0x5c)、IDC_DIV 91 (0x5b)、IDC_PERCENT 118 (0x76);常数 0x64 = 100 |
case IDC_PERCENT:
{
// 乘/除 → X [op] (Y%)
// 其他 → X [op] (X * Y%)
if (m_nOpCode == IDC_MUL || m_nOpCode == IDC_DIV)
result = rat / 100;
else
result = rat * (m_lastVal / 100);
break;
} 可核对试玩矩阵
| 表达式 | 期望 % | 期望结果 | 本页操作 |
|---|---|---|---|
| 200 + 10% | 20 | 220 | 选 +,按 %,按 = |
| 200 × 10% | 0.1 | 20 | 选 ×,按 %,按 = |
运维步骤
- 先读案例墙短摘要:/zh/showcase/windows-calculator-percent/。
- 打开上方钉住的
scifunc.cpp与测试;在信任截图前先点名分支。 - 若用 REA 检查已安装 Calculator 二进制,请把 Evidence 与公开源码并排。
- 只重建你可控的教学演示——不是教你去改无权修改的系统组件。
用 REA 检查 Windows 计算器的 % 键。
还原 + 与 × 之后的规则,然后做一个同时使用两条规则的小计算器。 教学披露
- 本小部件是百分号规则的交互示意——不是 Windows 计算器界面。
- 主张冲突时,优先以 Microsoft 公开 MIT 树为裁决层。
- 仅授权/教育/互操作研究。见 /zh/compliance/ 与 /zh/faq/legal-boundary/。
相关
| 资源 | 链接 |
|---|---|
| 实验室枢纽 | /zh/lab/ |
| 恐龙速度实验室 | /zh/lab/dino-speed/ |
| 案例墙摘要 | /zh/showcase/windows-calculator-percent/ |
| DX-Ball Evidence | /zh/showcase/dx-ball/ |
| 英文孪生 | /lab/calculator-percent/ |