∫π每天一道数学题
← 返回孙子算经
孙子算经 · 第 50 讲 · 2026-11-05 · 约 10 分钟

斛加三升?一道题把「加多少」逼到小数点后

粟二千三百七十四斛,斛加三升,问共粟几何?答曰二千四百四十五斛二斗二升。这道题短到只有一句话,却把最容易被忽略的事摆到了台面上:「斛加三升」到底加了几个百分点?用答曰一反推,加率必须是百分之三——也就是说每斛实际加了三斗,不是三升。一个字的差别,答案差出六十四斛。

原典

今有粟,二千三百七十四斛,斛加三升。问:共粟几何?

答曰:二千四百四十五斛二斗二升。

术曰:置粟二千三百七十四斛,以一斛三升乘之,即得。

白话翻译

有粟二千三百七十四斛,每斛加三升。问一共多少?

答案是:二千四百四十五斛二斗二升。

术文给的算法是:拿二千三百七十四斛乘「一斛三升」,即得。

这道题的算法只有一步乘法,真正的悬念在:「一斛三升」是什么意思? 是 1+0.003=1.0031 + 0.003 = 1.003,还是 1+0.03=1.031 + 0.03 = 1.03?选错一个零,答案就差了六十四斛。

示意图

斛加三升:两种加率下的一步乘法

图:2374 × 1.003 = 2381.12(与答曰不符);2374 × 1.03 = 2445.22(与答曰精确吻合)

古人的算法

术文只说「以一斛三升乘之」。 这里的「一斛三升」不是重量,而是加率系数——每斛对应的新数量。

问题在于:这系数到底是 1.003 还是 1.03?

先按字面算。 三升 = 0.003 斛,所以系数 1.0031.003:

2374×1.003=2381.1222374 \times 1.003 = 2381.122

即 2381 斛 1 斗 1 升 2 合。

再看答曰:二千四百四十五斛二斗二升,也就是 2445.222445.22。

两者相差

2445.22−2381.122=64.098 斛2445.22 - 2381.122 = 64.098\ \text{斛}

差了整整六十四斛,绝非四舍五入能解释。

反推真实加率。 设每斛加 xx 升,则

2374×(1+x1000)=2445.222374 \times \left(1 + \frac{x}{1000}\right) = 2445.22

解得

x=(2445.222374−1)×1000=30 升x = \left(\frac{2445.22}{2374} - 1\right) \times 1000 = 30\ \text{升}

三斗,不是三升。 验证:

2374×1.03=2445.222374 \times 1.03 = 2445.22

与答曰一字不差。

结论:本题的加率是 3%,即每斛加三斗。原文「斛加三升」与术文「以一斛三升乘之」中的「升」字,从答案反推应为「斗」。这是一处传抄或记载的讹误,但算法本身完全自洽。

现代数学视角

用今天的语言,这是增长率问题。

基数 B=2374B = 2374 斛,增长率 rr,末值 A=2445.22A = 2445.22 斛:

A=B(1+r)A = B(1 + r) r=A−BB=2445.22−23742374=0.03=3%r = \frac{A - B}{B} = \frac{2445.22 - 2374}{2374} = 0.03 = 3\%

3% 这个数字相当好看,也侧面印证了「三斗」的解读——古人编题通常选整齐的比率。

本题的价值在于暴露了一个通用陷阱:古代量制是十进(1 斛 = 10 斗,1 斗 = 10 升),「三升」与「三斗」只差一个进位,却让结果差十倍。今天用小数,0.0030.003 与 0.030.03 的区别全靠小数点后第几位——同样的错误,今天照样有人犯。 做数据分析时把 0.3% 写成 3%,是真实工作中最常见的乌龙之一。

从答案反推参数,也是数学建模的基本功。当模型参数与观测结果对不上时,与其怀疑结果,不如反推参数、检验哪一环出了错。本题正是用这个方法定位到那个「升」字。

高中课本关联

增长率与百分数:r=A−BBr = \dfrac{A-B}{B}。本题是已知首项与末项求增长率的完整范例,且 3% 这个答案非常整齐。

方程反求参数:2374(1+x1000)=2445.222374(1 + \frac{x}{1000}) = 2445.22。列方程解 xx,比反复试算高效得多。

数量级意识:0.0030.003 与 0.030.03 差十倍。让学生各算一遍 2374 的结果,亲眼看到 64 斛的差距——比讲十遍「注意小数点」都管用。

古籍校勘的方法论:本题展示了一种朴素的校勘思路——以算复核。当文字与计算结果矛盾时,可以反过来判断哪一个环节出了错。这种方法在数学史研究中至今在用。

思考与拓展

  1. 算一算:分别按 1.0031.003 与 1.031.03 计算 23742374 的结果,比较两个答案与答曰的差距。

  2. 反推加率:用 x=(2445.222374−1)×1000x = \left(\dfrac{2445.22}{2374} - 1\right) \times 1000 求出加率,验证是否恰为 30 升。

  3. 改加率:若确实是「每斛加三升」(0.3%),答案应该是多少?写成斛斗升合的形式。

  4. 十倍陷阱:把下面几组数分别乘 1.0031.003 与 1.031.03,算出差距:1000、5000、12345。观察基数越大,绝对差距如何变化。

  5. 校勘练习:若另一本题面写「斛加三斗」,答案是多少?这时原文与答曰是否一致?由此说明本题的问题出在哪个字。

一句话总结

2374 乘 1.03 得 2445.22,与答曰分毫不差——「三升」还是「三斗」,一个字的差别,六十四斛的差距。

— Y. · 2026-11-05