回归年和朔望月都不是整数天,历法的精度全靠分数运算撑着。从更相减损术求最大公约数,到十九年七闰,再到祖冲之的密率 355/113,古人的分数功夫一路走到了当时世界的顶端。
原典
故曰:一岁三百六十五日、四分日之一,一岁一内极,一外极。
三十日、十六分日之七,月一外极,一内极。
——《周髀算经》卷上
这段话说的是什么
天文计算的本质,是把"除不尽"的量算准。
日月在天上走,走的不是整数天。太阳从冬至回到冬至,要 365 天多一点;月亮从朔到朔,要 29 天多一点。这个"多一点"就是分数。谁把这个分数估得准,谁的历法就准;谁的历法准,谁就能提前告诉皇帝明年哪天该祭天、哪天该下地——在天人感应的古代,这是王朝的正统性所在。
所以《周髀算经》谈日月运行,谈的不是诗意,而是算账。它要给出一套可操作的程序:把观测到的周期写成带分数,再用分数的四则运算推出各种有用的结论——一年有多少个月、多少年该加几个闰月、什么时候是朔、冬至会漂到哪一天。这一讲,我们就跟着古人把这些账亲手算一遍。
为什么天文计算离不开分数
因为天上最重要的两个周期,都不是整数天。
第一个是回归年,即太阳两次经过冬至的间隔。现代值是 365.2422 天。古四分历取的是 365.25 天,写成带分数就是
36541(1)
写成假分数则是
36541=4365×4+1=41461(2)
第二个是朔望月,即月亮两次朔之间的间隔。现代值是 29.5306 天。四分历取的是
29940499(3)
分母 940、分子 499,看着像是随便凑的数。其实不是——它是从"一年 365 又 1/4 天"和"十九年七个闰月"这两条假设里,用分数运算严格推出来的。下面我们会亲手把 499 和 940 算出来,这是本讲最漂亮的一步。
关键判断:古代天文学里,分数不是"除不尽的残留物",而是正式的工作语言。 天文学家整天在跟分数打交道:把观测值写成分数、通分比较、约分化简、做分数的加减乘除。这套功夫练不好,历法就做不出来。
古人的分数记法:筹算分数
现代人写 a/b,古人说的是"实分之法"。
中国古代数学的乘除法用的是"实"和"法"两个字:实是被除数,也就是分子;法是除数,也就是分母。"以法除实"就是做除法,《九章算术》通篇都是这种说法。至于"分数"这个词,字面意思就是"分出来的数"——把一个整体等分成若干份。
筹算(用竹棍摆出的算式)的记法很直观:分子摆上面,分母摆下面。比如 29940499,在算筹上就是上排 499、下排 940,旁边另摆整数 29。这跟今天横着写 940499 意思完全一样,只是排布方向不同。也就是说,中国古代的分数是"竖着写"的;欧洲要到阿拉伯数学传入之后才普遍用横线。这一条,东西方算是殊途同归。
约分术:怎么把一个大分数变小。
《九章算术·方田》章给约分定了一套程序,原文是:
可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。
翻译过来:分子分母都能被 2 整除,就先同时除以 2;不能整除,就把分子和分母并排放着,用大的减小的,反复减下去,直到两数相等为止;这个相等的数就是最大公约数,古人叫"等数",拿它去约分。
这个"更相减损",就是今天的辗转相除法,也就是欧几里得算法。两者只有形式上的差别——一个用减法,一个用除法,本质是同一个递归过程。这是中国古代数学对世界的硬核贡献之一,比欧洲早了大约一千五百年。
带分数和假分数。
带分数 acb 化成假分数,公式是
acb=cac+b(4)
反过来,假分数 nm 化成带分数,就是拿 m 去除 n:商是整数部分,余数当新分子,分母不变。这两下子是分数运算里最基本的"变形",古人也用得极熟。
示意图

天文计算中的分数——左边是四分历的回归年与朔望月长度,右边是古人做分数运算的三样基本技巧:通分、约分、带分数与假分数互化。
古人的算法:三个算例
光看公式不算会,拿到手能算出来才算会。下面三个例子,数字全部来自《周髀算经》的四分历体系。
算例一:朔望月为什么是 29940499
这个分数不是凑的,是推出来的。
四分历有两条基本假设:一年 =36541 天;十九年七个闰月,也就是 19 个回归年恰好等于 235 个朔望月。
先算 19 年一共多少天:
19×41461=427759(5)
19 年有 235 个月,所以一个月是
427759÷235=4×23527759=94027759(6)
再把 94027759 化成带分数:
94027759=29+94027759−29×940=29+940499(7)
因为 29×940=27260,而 27759−27260=499。看,499 和 940 一个不差地出来了:940=4×235 来自"十九年二百三十五个月",而 499 就是除出来的余数。
验算一下:94027759=29.53085… 天,与现代朔望月 29.53059 天只差约 22 秒。两千年前能算到这一步,够狠了。
算例二:一年有多少个朔望月
这个除法会把"十九年七闰"逼出来。
一年的月数 = 一年的天数 ÷ 一个月的天数:
41461÷94027759=41461×27759940(8)
分数除法就是颠倒相乘。接着把分子分母各自乘开:
4×277591461×940=1110361373340(9)
现在约分。用更相减损术(也就是辗转相除法)求 1373340 与 111036 的最大公约数,得到 5844(因为 5844×235=1373340,5844×19=111036)。于是分子分母同时约掉 5844:
1110361373340=19235(10)
最后把 19235 写成带分数:
19235=12+197=12197(11)
因为 19×12=228,235−228=7。
结论:一年有 12197 个朔望月。 整数部分 12 说明一年有 12 个月;余下的 197 说明每 19 年会积出 19×197=7 个多出来的月——这就是"十九年七闰"。注意:这个规矩不是背下来的,是分数运算自己跑出来的。
顺带对一下示意图里的数:19235≈12.3684,与"365.25÷29.53≈12.37"完全吻合。
算例三:十九年七闰到底有多准(历法周期验算)
章法再漂亮,也得跟天对上账。
按四分历自己的设定,19 年 =235 个月是严格相等的:
19×41461=427759=6939.75 天,235×94027759=427759=6939.75 天(12)
两边分毫不差。这说明四分历内部是自洽的——不是巧合,因为 94027759 本来就是这么反推出来的。
但"内部自洽"不等于"跟天对上"。拿现代观测值来检验:
19×365.2422=6939.6018 天,235×29.530589=6939.6884 天(13)
两者相差
6939.6884−6939.6018=0.0866 天≈2.1 小时(14)
也就是说,每 19 年,朔望月和回归年之间会滑掉大约 2 小时。 而四分历自己取的回归年 365.25 天,比真实值每年多了
365.25−365.2422=0.0078 天(15)
攒上 1000 年就是 0.0078×1000=7.8 天。历史上四分历用了三四百年之后,历书上算的冬至跟实际观测的冬至就对不上了,逼着后人一次次改历。这个"对不上"的账,正是古人用分数一点一点算出来的。
连分数:用一串整数逼近一个数
一个除不尽的数,最好的处理办法是拿一串越来越准的分数去逼近它;而连分数能告诉你哪几个分数最值得取。
把 365.2422 展开成连分数,得到
365.2422=[365; 4, 7, 1, 3, 4,…](16)
每截断一次,就给出一个逼近分数,数学上叫"收敛项"。依次算出来是:
| 收敛项 | 数值 | 每年误差 |
|---|
| 41461 | 365.25 | +0.0078 天 |
| 2910592 | 365.2414 | −0.0008 天 |
| 3312053 | 365.24242 | +0.00022 天 |
| 12846751=365+12831 | 365.2421875 | −0.0000125 天 |
注意第一行:41461 就是四分历。 它排在连分数的最前面,说明四分历是"最粗但最省事"的一个近似——误差一年 0.0078 天,四年才攒出 0.03 天,日常生活根本看不出来。而 12831 已经好到每年只差 1.08 秒,对应的正是历史上用过的"一百二十八年三十一闰"。古人没有连分数的理论,但他们在反复调历的过程中,实际上就是沿着这条链在往前走。
分数近似的巅峰:祖冲之的密率
一个分数能逼近到什么程度,取决于你把分子分母放到多大;这条路的尽头,站着 355/113。
圆周率 π 是无理数,写不成有限分数,只能逼近。中国古代给出的值,正好是一条清晰的升级线:
- 周三径一(古率):π≈3,误差约 0.1416;
- 徽率(刘徽):π≈3.14=50157,误差约 0.0016;
- 祖冲之:约率 722≈3.142857,密率 113355≈3.14159292。
密率的误差是多少?
113355−π=∣3.141592920−3.141592654∣≈2.7×10−7(17)
小数点后六位都对上了。 而 722 的误差是 1.26×10−3,密率比它准了四千多倍。
为什么偏偏是 355/113?因为 π 的连分数是
π=[3; 7, 15, 1, 292,…](18)
它的收敛项依次是 722、106333、113355。其中 15 这个数比较大,意味着 722 之后紧跟着一个特别好的近似——113355 就是在这一步蹦出来的。分母只有三位数,精度却达到了小数点后六位;欧洲要到一千一百多年之后,才有人重新得到同样精度的结果。
你看,从四分历的 41461 到祖冲之的 113355,用的是同一套功夫:把不能整除的量写成分数,然后一代一代往上逼近。 这就是为什么我们要用整整一讲来讲分数——它不是初中阶段的过渡章节,而是中国古代数学真正的主战场。
现代数学视角
古代的分数运算,与今天高中所学的代数运算是一回事,只是载体不同。
古人做分数,做的其实是三件事:通分(统一分母,才能加减)、约分(求最大公约数)、化带分数为假分数(统一形式,才能乘除)。这三件事串起来,就是今天分式运算的全部骨架。
只要把数换成含字母的式子,分数就变成分式,运算规则一字不变:
x−11−x+11=(x−1)(x+1)(x+1)−(x−1)=x2−12(19)
这一步"通分再合并",和古人把 940499 通分是同一个动作,只是分母从 940 换成了 (x−1)(x+1)。
再往上走,分式运算还会变成积分的基本工具:
∫x2−11dx=∫21(x−11−x+11)dx(20)
这叫部分分式分解,核心思想是"把一个大分式拆成几个简单分式之和"——而拆分的合法性,靠的仍然是通分反过来用。
在高中数学体系里的位置
思想延伸:从"更相减损术"求最大公约数,到用连分数逼近无理数,体现的是逼近与化归两大思想——把一个量化归成更简单的形式,或者用一族越来越精的近似去逼近它。这两条思想在解析几何(用切线逼近曲线)、数列(递推与极限)里会反复出现。
运算练兵场:分式的化简与求值、通分、约分、带分数与假分数互化。这是整册教材里出现频率最高、也最容易掉分的操作。
综合题常客:分式与不等式、分式与数列、部分分式与求和。比如裂项相消 n(n+1)1=n1−n+11,用的正是"把一个大分式拆成两个简单分式之差"的同一门手艺。
思考与拓展
- 用更相减损术(辗转相除法)求 1071 与 462 的最大公约数,并说明这个算法为什么一定会停下来。
- 四分历取一年 365.25 天,每 1000 年多算 7.8 天。如果改用"一百二十八年三十一闰",也就是一年 365+12831 天,1000 年后累积误差又是多少天?
- 把 19235 化成小数(保留 4 位),验证它等于"一年 12197 个月";再用它算出 19 年、38 年各有多少个闰月。
- 已知 n(n+1)1=n1−n+11,求 2×31+3×41+⋯+19×201 的值。
一句话总结
分数运算——古代天文学家算准日月周期的看家本领;从四分历的 1461/4 到祖冲之的 355/113,中国数学的精度就藏在这些分子分母里,而它今天仍然是代数运算的第一块基石。
— Y. · 2026-10-11