Skip to content

fix(S5-03): 改型卡的累加例子改成真的输出负数,并绑上护栏 - #67

Merged
mira-voss merged 1 commit into
mainfrom
fix/s5-03-accumulate-overflow-example
Sep 21, 2026
Merged

mira-voss merged 1 commit into
mainfrom
fix/s5-03-accumulate-overflow-example

Conversation

@mira-voss

Copy link
Copy Markdown
Contributor

问题(可证伪的事实错误)

lessons/s5-03 任务 2 的改型卡用一个累加例子讲 int 回绕,题面写「手算总和是正数,程序却输出负数」。两个历史版本的数字本机 g++ 实测都回绕成正数:

说法 手算总和 实测 int 输出
累加 1..100000 再乘系数 100000 7050827040000000 +2087268864
n=100000,每项约 10^5 ~10^10 +1410065408

孩子照着跑看不到负数,会得出「没有溢出」的相反结论——正好把本课要防的坑教反。同一个说法还散在三步对照卡和脚手架注释里。

修法

改成 n=100000、每项 80000:手算总和 8000000000(80 亿,正数),int 实测输出 -589934592,真的回绕成负数;80 亿同时超过 unsigned int 上限 4294967295,所以检查器里「unsigned int 还是装不下」那条指正依旧成立。讲义、三步卡、脚手架注释、检查指正、渐进提示统一成同一组数字。

TDD

先写 tests/s5-03-accumulate-overflow-example.test.ts 并确认失败(当时页面里找不到可机检的场景行),再改页面到绿。护栏把例子绑到 int32 回绕计算:

  • 题面写的输出必须等于回绕结果,且必须为负
  • 手算总和必须等于「项数 × 每项」
  • 总和必须同时超过 INT32_MAX 与 UINT32_MAX
  • 旧说法(10^10 量级、乘系数)不得再出现

改数字而不重新验证,这个测试会红。

验证证据

  • bun test:783 pass / 0 fail(64 文件;修复前 777,新增 6 项)
  • 真机浏览器(CSP_E2E_LESSONS=s5-03):s2-typed-cdp.ts 17/17、flow-cdp.ts 19/19、keyboard-cdp.ts 8/8;输出里检查器指正与提示已是新的 80 亿量级说法
  • 证据记进 docs/review/question-verification.json 的 findings,并在 tests/e2e/s5-03-manual-checklist.md 补了本轮复验行

边界

只改事实错误与护栏,未动课程结构、题库、lesson.json、验收矩阵;不涉及在线判题、账号、视频资产或 Node 工具链。

任务 2 的改型卡拿一个累加例子讲 int 回绕,题面写的是「手算总和是正数,
程序却输出负数」。两个历史版本的数字本机 g++ 实测都回绕成正数:

- 「累加 1 到 100000 再乘系数 100000」-> +2087268864
- 「n=100000,每项 10^5」-> +1410065408

孩子照着跑看不到任何负数,会以为「没有溢出」。同一个说法还出现在三步对照卡
与脚手架注释里。

例子改成 n=100000、每项 80000:手算总和 8000000000(80 亿,正数),int 实测
输出 -589934592,真的回绕成负数;80 亿同时超过 unsigned int 上限 4294967295,
所以检查器里「unsigned int 还是装不下」那条指正依旧成立。讲义、三步卡、脚手架
注释、检查指正与提示文案统一成同一组数字。

新增 tests/s5-03-accumulate-overflow-example.test.ts 把例子绑到 int32 回绕计算:
题面写的输出必须等于回绕结果且为负、手算总和必须是项数乘以每项、必须同时超过
int 与 unsigned int 上限,旧说法(10^10 量级、乘系数)不得再出现。证据记进
docs/review/question-verification.json 的 findings。

验证:bun test 783 pass / 0 fail(含新增 6 项);CSP_E2E_LESSONS=s5-03 跑
s2-typed-cdp.ts 17/17、flow-cdp.ts 19/19、keyboard-cdp.ts 8/8,真机浏览器里
检查器指正与渐进提示已是新的 80 亿量级说法。

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@mira-voss
mira-voss merged commit f9e264f into main Sep 21, 2026
2 checks passed
@mira-voss
mira-voss deleted the fix/s5-03-accumulate-overflow-example branch September 21, 2026 10:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant