∫π每天一道数学题
← 返回周髀算经
周髀算经 · 第 5 讲 · 2026-10-11 · 约 14 分钟

天文计算中的分数技巧

回归年和朔望月都不是整数天,历法的精度全靠分数运算撑着。从更相减损术求最大公约数,到十九年七闰,再到祖冲之的密率 355/113,古人的分数功夫一路走到了当时世界的顶端。

原典

故曰:一岁三百六十五日、四分日之一,一岁一内极,一外极。

三十日、十六分日之七,月一外极,一内极。

——《周髀算经》卷上

这段话说的是什么

天文计算的本质,是把"除不尽"的量算准。

日月在天上走,走的不是整数天。太阳从冬至回到冬至,要 365 天多一点;月亮从朔到朔,要 29 天多一点。这个"多一点"就是分数。谁把这个分数估得准,谁的历法就准;谁的历法准,谁就能提前告诉皇帝明年哪天该祭天、哪天该下地——在天人感应的古代,这是王朝的正统性所在。

所以《周髀算经》谈日月运行,谈的不是诗意,而是算账。它要给出一套可操作的程序:把观测到的周期写成带分数,再用分数的四则运算推出各种有用的结论——一年有多少个月、多少年该加几个闰月、什么时候是朔、冬至会漂到哪一天。这一讲,我们就跟着古人把这些账亲手算一遍。

为什么天文计算离不开分数

因为天上最重要的两个周期,都不是整数天。

第一个是回归年,即太阳两次经过冬至的间隔。现代值是 365.2422 天。古四分历取的是 365.25 天,写成带分数就是

36514(1)365\frac{1}{4} \qquad (1)

写成假分数则是

36514=365×4+14=14614(2)365\frac{1}{4} = \frac{365 \times 4 + 1}{4} = \frac{1461}{4} \qquad (2)

第二个是朔望月,即月亮两次朔之间的间隔。现代值是 29.5306 天。四分历取的是

29499940(3)29\frac{499}{940} \qquad (3)

分母 940、分子 499,看着像是随便凑的数。其实不是——它是从"一年 365 又 1/4 天"和"十九年七个闰月"这两条假设里,用分数运算严格推出来的。下面我们会亲手把 499 和 940 算出来,这是本讲最漂亮的一步。

关键判断:古代天文学里,分数不是"除不尽的残留物",而是正式的工作语言。 天文学家整天在跟分数打交道:把观测值写成分数、通分比较、约分化简、做分数的加减乘除。这套功夫练不好,历法就做不出来。

古人的分数记法:筹算分数

现代人写 a/ba/b,古人说的是"实分之法"。

中国古代数学的乘除法用的是"实"和"法"两个字:实是被除数,也就是分子;法是除数,也就是分母。"以法除实"就是做除法,《九章算术》通篇都是这种说法。至于"分数"这个词,字面意思就是"分出来的数"——把一个整体等分成若干份。

筹算(用竹棍摆出的算式)的记法很直观:分子摆上面,分母摆下面。比如 2949994029\dfrac{499}{940},在算筹上就是上排 499、下排 940,旁边另摆整数 29。这跟今天横着写 499940\frac{499}{940} 意思完全一样,只是排布方向不同。也就是说,中国古代的分数是"竖着写"的;欧洲要到阿拉伯数学传入之后才普遍用横线。这一条,东西方算是殊途同归。

约分术:怎么把一个大分数变小。

《九章算术·方田》章给约分定了一套程序,原文是:

可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。

翻译过来:分子分母都能被 2 整除,就先同时除以 2;不能整除,就把分子和分母并排放着,用大的减小的,反复减下去,直到两数相等为止;这个相等的数就是最大公约数,古人叫"等数",拿它去约分。

这个"更相减损",就是今天的辗转相除法,也就是欧几里得算法。两者只有形式上的差别——一个用减法,一个用除法,本质是同一个递归过程。这是中国古代数学对世界的硬核贡献之一,比欧洲早了大约一千五百年。

带分数和假分数。

带分数 abca\dfrac{b}{c} 化成假分数,公式是

abc=ac+bc(4)a\frac{b}{c} = \frac{ac + b}{c} \qquad (4)

反过来,假分数 mn\dfrac{m}{n} 化成带分数,就是拿 mm 去除 nn:商是整数部分,余数当新分子,分母不变。这两下子是分数运算里最基本的"变形",古人也用得极熟。

示意图

天文计算中的分数:历法精度从分数来

天文计算中的分数——左边是四分历的回归年与朔望月长度,右边是古人做分数运算的三样基本技巧:通分、约分、带分数与假分数互化。

古人的算法:三个算例

光看公式不算会,拿到手能算出来才算会。下面三个例子,数字全部来自《周髀算经》的四分历体系。

算例一:朔望月为什么是 2949994029\dfrac{499}{940}

这个分数不是凑的,是推出来的。

四分历有两条基本假设:一年 =36514= 365\dfrac{1}{4} 天;十九年七个闰月,也就是 19 个回归年恰好等于 235 个朔望月。

先算 19 年一共多少天:

19×14614=277594(5)19 \times \frac{1461}{4} = \frac{27759}{4} \qquad (5)

19 年有 235 个月,所以一个月是

277594÷235=277594×235=27759940(6)\frac{27759}{4} \div 235 = \frac{27759}{4 \times 235} = \frac{27759}{940} \qquad (6)

再把 27759940\dfrac{27759}{940} 化成带分数:

27759940=29+27759−29×940940=29+499940(7)\frac{27759}{940} = 29 + \frac{27759 - 29 \times 940}{940} = 29 + \frac{499}{940} \qquad (7)

因为 29×940=2726029 \times 940 = 27260,而 27759−27260=49927759 - 27260 = 499。看,499 和 940 一个不差地出来了:940=4×235940 = 4 \times 235 来自"十九年二百三十五个月",而 499 就是除出来的余数。

验算一下:27759940=29.53085…\dfrac{27759}{940} = 29.53085\ldots 天,与现代朔望月 29.53059 天只差约 22 秒。两千年前能算到这一步,够狠了。

算例二:一年有多少个朔望月

这个除法会把"十九年七闰"逼出来。

一年的月数 = 一年的天数 ÷ 一个月的天数:

14614÷27759940=14614×94027759(8)\frac{1461}{4} \div \frac{27759}{940} = \frac{1461}{4} \times \frac{940}{27759} \qquad (8)

分数除法就是颠倒相乘。接着把分子分母各自乘开:

1461×9404×27759=1373340111036(9)\frac{1461 \times 940}{4 \times 27759} = \frac{1373340}{111036} \qquad (9)

现在约分。用更相减损术(也就是辗转相除法)求 13733401373340 与 111036111036 的最大公约数,得到 58445844(因为 5844×235=13733405844 \times 235 = 1373340,5844×19=1110365844 \times 19 = 111036)。于是分子分母同时约掉 5844:

1373340111036=23519(10)\frac{1373340}{111036} = \frac{235}{19} \qquad (10)

最后把 23519\dfrac{235}{19} 写成带分数:

23519=12+719=12719(11)\frac{235}{19} = 12 + \frac{7}{19} = 12\frac{7}{19} \qquad (11)

因为 19×12=22819 \times 12 = 228,235−228=7235 - 228 = 7。

结论:一年有 1271912\dfrac{7}{19} 个朔望月。 整数部分 12 说明一年有 12 个月;余下的 719\dfrac{7}{19} 说明每 19 年会积出 19×719=719 \times \dfrac{7}{19} = 7 个多出来的月——这就是"十九年七闰"。注意:这个规矩不是背下来的,是分数运算自己跑出来的。

顺带对一下示意图里的数:23519≈12.3684\dfrac{235}{19} \approx 12.3684,与"365.25÷29.53≈12.37365.25 \div 29.53 \approx 12.37"完全吻合。

算例三:十九年七闰到底有多准(历法周期验算)

章法再漂亮,也得跟天对上账。

按四分历自己的设定,19 年 =235=235 个月是严格相等的:

19×14614=277594=6939.75 天,235×27759940=277594=6939.75 天(12)19 \times \frac{1461}{4} = \frac{27759}{4} = 6939.75 \text{ 天}, \qquad 235 \times \frac{27759}{940} = \frac{27759}{4} = 6939.75 \text{ 天} \qquad (12)

两边分毫不差。这说明四分历内部是自洽的——不是巧合,因为 27759940\dfrac{27759}{940} 本来就是这么反推出来的。

但"内部自洽"不等于"跟天对上"。拿现代观测值来检验:

19×365.2422=6939.6018 天,235×29.530589=6939.6884 天(13)19 \times 365.2422 = 6939.6018 \text{ 天}, \qquad 235 \times 29.530589 = 6939.6884 \text{ 天} \qquad (13)

两者相差

6939.6884−6939.6018=0.0866 天≈2.1 小时(14)6939.6884 - 6939.6018 = 0.0866 \text{ 天} \approx 2.1 \text{ 小时} \qquad (14)

也就是说,每 19 年,朔望月和回归年之间会滑掉大约 2 小时。 而四分历自己取的回归年 365.25 天,比真实值每年多了

365.25−365.2422=0.0078 天(15)365.25 - 365.2422 = 0.0078 \text{ 天} \qquad (15)

攒上 1000 年就是 0.0078×1000=7.80.0078 \times 1000 = 7.8 天。历史上四分历用了三四百年之后,历书上算的冬至跟实际观测的冬至就对不上了,逼着后人一次次改历。这个"对不上"的账,正是古人用分数一点一点算出来的。

连分数:用一串整数逼近一个数

一个除不尽的数,最好的处理办法是拿一串越来越准的分数去逼近它;而连分数能告诉你哪几个分数最值得取。

把 365.2422 展开成连分数,得到

365.2422=[365; 4, 7, 1, 3, 4,…](16)365.2422 = [365;\ 4,\ 7,\ 1,\ 3,\ 4,\ldots] \qquad (16)

每截断一次,就给出一个逼近分数,数学上叫"收敛项"。依次算出来是:

收敛项数值每年误差
14614\dfrac{1461}{4}365.25365.25+0.0078+0.0078 天
1059229\dfrac{10592}{29}365.2414365.2414−0.0008-0.0008 天
1205333\dfrac{12053}{33}365.24242365.24242+0.00022+0.00022 天
46751128=365+31128\dfrac{46751}{128} = 365 + \dfrac{31}{128}365.2421875365.2421875−0.0000125-0.0000125 天

注意第一行:14614\dfrac{1461}{4} 就是四分历。 它排在连分数的最前面,说明四分历是"最粗但最省事"的一个近似——误差一年 0.0078 天,四年才攒出 0.03 天,日常生活根本看不出来。而 31128\dfrac{31}{128} 已经好到每年只差 1.08 秒,对应的正是历史上用过的"一百二十八年三十一闰"。古人没有连分数的理论,但他们在反复调历的过程中,实际上就是沿着这条链在往前走。

分数近似的巅峰:祖冲之的密率

一个分数能逼近到什么程度,取决于你把分子分母放到多大;这条路的尽头,站着 355/113。

圆周率 π\pi 是无理数,写不成有限分数,只能逼近。中国古代给出的值,正好是一条清晰的升级线:

  • 周三径一(古率):π≈3\pi \approx 3,误差约 0.14160.1416;
  • 徽率(刘徽):π≈3.14=15750\pi \approx 3.14 = \dfrac{157}{50},误差约 0.00160.0016;
  • 祖冲之:约率 227≈3.142857\dfrac{22}{7} \approx 3.142857,密率 355113≈3.14159292\dfrac{355}{113} \approx 3.14159292。

密率的误差是多少?

∣355113−π∣=∣3.141592920−3.141592654∣≈2.7×10−7(17)\left| \frac{355}{113} - \pi \right| = |3.141592920 - 3.141592654| \approx 2.7 \times 10^{-7} \qquad (17)

小数点后六位都对上了。 而 227\dfrac{22}{7} 的误差是 1.26×10−31.26 \times 10^{-3},密率比它准了四千多倍。

为什么偏偏是 355/113?因为 π\pi 的连分数是

π=[3; 7, 15, 1, 292,…](18)\pi = [3;\ 7,\ 15,\ 1,\ 292,\ldots] \qquad (18)

它的收敛项依次是 227\dfrac{22}{7}、333106\dfrac{333}{106}、355113\dfrac{355}{113}。其中 15 这个数比较大,意味着 227\dfrac{22}{7} 之后紧跟着一个特别好的近似——355113\dfrac{355}{113} 就是在这一步蹦出来的。分母只有三位数,精度却达到了小数点后六位;欧洲要到一千一百多年之后,才有人重新得到同样精度的结果。

你看,从四分历的 14614\dfrac{1461}{4} 到祖冲之的 355113\dfrac{355}{113},用的是同一套功夫:把不能整除的量写成分数,然后一代一代往上逼近。 这就是为什么我们要用整整一讲来讲分数——它不是初中阶段的过渡章节,而是中国古代数学真正的主战场。

现代数学视角

古代的分数运算,与今天高中所学的代数运算是一回事,只是载体不同。

古人做分数,做的其实是三件事:通分(统一分母,才能加减)、约分(求最大公约数)、化带分数为假分数(统一形式,才能乘除)。这三件事串起来,就是今天分式运算的全部骨架。

只要把数换成含字母的式子,分数就变成分式,运算规则一字不变:

1x−1−1x+1=(x+1)−(x−1)(x−1)(x+1)=2x2−1(19)\frac{1}{x-1} - \frac{1}{x+1} = \frac{(x+1) - (x-1)}{(x-1)(x+1)} = \frac{2}{x^2 - 1} \qquad (19)

这一步"通分再合并",和古人把 499940\dfrac{499}{940} 通分是同一个动作,只是分母从 940 换成了 (x−1)(x+1)(x-1)(x+1)。

再往上走,分式运算还会变成积分的基本工具:

∫1x2−1 dx=∫12(1x−1−1x+1)dx(20)\int \frac{1}{x^2 - 1}\, dx = \int \frac{1}{2}\left( \frac{1}{x-1} - \frac{1}{x+1} \right) dx \qquad (20)

这叫部分分式分解,核心思想是"把一个大分式拆成几个简单分式之和"——而拆分的合法性,靠的仍然是通分反过来用。

在高中数学体系里的位置

思想延伸:从"更相减损术"求最大公约数,到用连分数逼近无理数,体现的是逼近与化归两大思想——把一个量化归成更简单的形式,或者用一族越来越精的近似去逼近它。这两条思想在解析几何(用切线逼近曲线)、数列(递推与极限)里会反复出现。

运算练兵场:分式的化简与求值、通分、约分、带分数与假分数互化。这是整册教材里出现频率最高、也最容易掉分的操作。

综合题常客:分式与不等式、分式与数列、部分分式与求和。比如裂项相消 1n(n+1)=1n−1n+1\dfrac{1}{n(n+1)} = \dfrac{1}{n} - \dfrac{1}{n+1},用的正是"把一个大分式拆成两个简单分式之差"的同一门手艺。

思考与拓展

  1. 用更相减损术(辗转相除法)求 10711071 与 462462 的最大公约数,并说明这个算法为什么一定会停下来。
  2. 四分历取一年 365.25365.25 天,每 1000 年多算 7.87.8 天。如果改用"一百二十八年三十一闰",也就是一年 365+31128365 + \dfrac{31}{128} 天,1000 年后累积误差又是多少天?
  3. 把 23519\dfrac{235}{19} 化成小数(保留 4 位),验证它等于"一年 1271912\dfrac{7}{19} 个月";再用它算出 19 年、38 年各有多少个闰月。
  4. 已知 1n(n+1)=1n−1n+1\dfrac{1}{n(n+1)} = \dfrac{1}{n} - \dfrac{1}{n+1},求 12×3+13×4+⋯+119×20\dfrac{1}{2 \times 3} + \dfrac{1}{3 \times 4} + \cdots + \dfrac{1}{19 \times 20} 的值。

一句话总结

分数运算——古代天文学家算准日月周期的看家本领;从四分历的 1461/4 到祖冲之的 355/113,中国数学的精度就藏在这些分子分母里,而它今天仍然是代数运算的第一块基石。

— Y. · 2026-10-11