Yi Xing · 683–727

一行

量天的老规矩用了近千年——他派人沿一条南北线摆了四张表,把它量废了

r(t)=Δ1+Δ2l1+l2+(Δ1l1Δ2l2)(12tl1+l2)r(t) = \frac{\Delta_1 + \Delta_2}{l_1 + l_2} + \left(\frac{\Delta_1}{l_1} - \frac{\Delta_2}{l_2}\right)\left(1 - \frac{2t}{l_1 + l_2}\right)
步日躔术 ·《大衍历经》727 · 两个节气不一样长也照样内插:把这条日率从 0 积到 l₁,分毫不差地还原成那一气的盈缩分 Δ₁

一行俗姓张,本名遂,魏州昌乐(今河南南乐)人,襄州都督、郯国公张公谨之孙,父张擅做过武功令。《旧唐书》本传说他少聪敏,博览经史,尤精历象、阴阳、五行之学,还留了一则故事:道士尹崇藏书极富,一行去借扬雄的《太玄经》,几天就送了回来;尹崇说这书我钻研多年还没读通,你怎么这么快就还?一行答「究其义矣」,随手拿出自己写的《大衍玄图》与《义决》——「大衍」这两个字,在他造历之前就已经在他笔下了。武三思慕名要与他结交,他躲了出去,随即出家,隐在嵩山,师事沙门普寂;睿宗即位下敕征他,他称病不应,反倒步行去了荆州当阳山。开元五年(717),玄宗派他的族叔、礼部郎中张洽带着敕书到荆州,把他硬请了出来。

开元九年(721),麟德历接连报错日食,玄宗诏他改历。他做的是一整套:先造仪器,再测天,最后才立法——与率府长史梁令瓒造黄道游仪,开元十三年铸成,又造水运浑天铜仪;开元十二年(724)派太史监南宫说等人分赴各地测影,南到交州、林邑,北到蔚州横野军,其中河南平地上那四张表,是已知最早的一次专为求「北极高一度合地上多少里」而组织的实地丈量——往前埃拉托色尼与波西多尼乌斯都用两地的天象算过地球的大小,可两地之间有多远,他们取的是行旅与航程的估数。开元十五年(727)历稿草成,他就死了,年四十五,谥大慧禅师;书由张说与历官陈玄景整理成历术七篇、略例一篇、历议十篇,开元十七年颁行。《新唐书·历志》给了他一句几乎没给过别人的话:「自太初至麟德,历有二十三家,与天虽近而未密也。至一行,密矣,其倚数立法固无以易也。后世虽有改作者,皆依仿而已。」他留下的数学,一半在那部历里:二十四个长短不等的节气之间怎么逐日内插一张按天顶距逐度给值的晷影表一个要同时装下朔望月与回归年的分母;另一半在他把旧办法推翻的那几段议论里。

一行肖像
《大衍历经》卷端 ·《新唐书》卷二十八上,百衲本二十四史影宋本,商务印书馆 1936 年 · Wikimedia Commons,公有领域。一行没有画像传世,《大衍历经》七篇也没有单行本传世,所以这里放的是他留下的那一页书——他的历经只靠两唐书的历志抄存,而这一页正是它正文的开头。右起第一行题「曆志第十八上」「唐書二十八上」,第二行署的却是「翰林學士……歐陽脩奉敕撰」;接下来一行是上元积年「積九千六百九十六萬一千七百四十筭」,再往下「一曰步中朔術」,第一个常数就是通法三千四十。

生平

  1. 683
    生于魏州昌乐

    俗姓张,名遂。祖父张公谨是唐初功臣,封郯国公;父张擅,武功令。生年由「开元十五年卒,年四十五」倒推。

  2. 约景龙年间
    出家,隐于嵩山

    武三思要与他结交,他逃匿以避之,随即出家,师事沙门普寂。后往荆州当阳山依沙门悟真习梵律。

  3. 求算法于天台山
    国清寺

    《旧唐书》本传所记,年份不详:他为穷大衍之数访师,到天台山国清寺,院僧正在庭中布算,说「今日当有弟子自远求吾算法」。

  4. 717
    奉敕入长安

    开元五年,玄宗令其族叔、礼部郎中张洽赍敕书就荆州强起之。此后屡以政事进言。

  5. 721
    诏改历

    开元九年,麟德历署日食比不效——预报的日食接连落空。玄宗诏他作新历,他「推《周易》大衍之数,立衍以应之」。

  6. 723
    黄道游仪

    与率府长史梁令瓒同造。旧仪只有赤道,量不了黄道上的度数;这一架的黄道环可以沿赤道环挪动,开元十三年铸成。后又造水运浑天铜仪,以水轮驱动,能自击时辰。

  7. 724
    天下测影

    开元十二年,太史监南宫说等人分赴十余处测影。河南平地上那四张表——滑州白马、浚仪岳台、扶沟、上蔡武津——是这一批里最要紧的一组。

  8. 724
    大率三百五十一里八十步,而极差一度

    四站南北相距五百二十六里二百七十步,两头北极出地差一度半,除得每度三百五十一里八十步。旧说「千里差一寸」同时被量废。

  9. 《大衍历经》七篇
    步中朔、发敛、日躔、月离、轨漏、交会、五星

    通法三千四十,策实一百一十一万零三百四十三,揲法八万九千七百七十三。上元积年九千六百九十六万一千七百四十。

  10. 727
    草成而卒,年四十五

    开元十五年。玄宗亲制碑文书于石,出内库钱五十万为起塔于铜人之原,赐谥大慧禅师。

  11. 729
    《大衍历》颁行

    张说与历官陈玄景整理成历术七篇、略例一篇、历议十篇上进,开元十七年起颁于有司。

  12. 733
    「大衍写九执历」那场官司

    开元二十一年,瞿昙譔与陈玄景奏告大衍历抄袭印度的九执历,南宫说也附议。诏李麟、桓执圭取灵台候簿逐条核对:大衍十得七八,麟德才三四,九执一二。于是治了告状人的罪。

  13. 1247
    大衍求一术

    秦九韶《数书九章》立「大衍总数术」,把一次同余方程组一并收拾干净。他说「历家演法颇用之」——历家用它推的正是上元积年。

展品厅

绝大多数展品都可以亲手把玩——这是本馆的立馆之本;少数以叙述为主的,做成故事展签。

镇馆之宝 · 亲手玩

大率三百五十一里八十步,而极差一度

四张八尺表沿一条南北线摆开,量出来的不是「地有多大」,是「北极高一度,地上要走多远」。

1580701.5=105380=35180\frac{158070\,\text{步}}{1.5\,\text{度}} = 105380\,\text{步} = 351\,\text{里}\,80\,\text{步}

开元十二年(724),太史监南宫说奉命在河南的平地上摆了四张表。选址与丈量都写在《新唐书·天文志》里:「择河南平地,设水准绳墨植表而以引度之」——先用水准与绳墨把地找平,再拉绳一段一段量过去。四站自北而南是滑州白马、汴州浚仪岳台、许州扶沟、豫州上蔡武津,差不多落在同一条子午线上。每站记两样东西:夏至日中八尺表的影长,和用覆矩斜望北极量到的「极出地」。四组数是:白马晷一尺五寸七分、极高三十五度三分;岳台一尺五寸三分、三十四度八分;扶沟一尺四寸四分、三十四度三分;武津一尺三寸六分半、三十三度八分。站间距离逐段量出:一百九十八里一百七十九步、一百六十七里二百八十一步、一百六十里一百一十步。唐制一里三百步,三段相加正是十五万八千零七十步,也就是五百二十六里二百七十步——与原文「大率五百二十六里二百七十步」一步不差。两头的极高差一度半,除一下:158070 除以 1.5 得 105380 步,正是三百五十一里八十步。那句「大率三百五十一里八十步,而极差一度」的全部来历就是这一除,一个字的误差也没有。这个数今天看偏大约五分之一(换算先要认定唐尺多长,各家不一:按唐小尺约 0.245 米折,一唐度合 129 公里,折成角度的一度是 131 公里,而今测北纬三十四度处子午线一度是 110.9 公里)。可这件事的分量不在数准。分量在它顺手量废的那条老规矩。《周礼》的土圭法说「日至之景,尺有五寸,谓之地中」,郑玄注得更死:「日景于地,千里而差一寸」——南北相距一千里,正午影子就差一寸。这条规矩用了近千年,是当时一切「由影子推天地大小」的公因子。四站的数一摆,它就散了:全程五百二十六里九,影差二寸零五厘,合二百五十七里差一寸,不是一千里;而且它根本不是个常数——北边那一段四百九十七里才差一寸,中间一段一百八十七里就差一寸,南边一段二百一十四里,三段相差近三倍。反过来看极高:同样三段,每半度分别走了三百九十七里、三百三十六里、三百二十一里,散布在一成多以内。一行自己把这层意思写明了:「其北极去地,虽秒分微有盈缩,难以目校,大率三百五十一里八十步,而极差一度。」——极高的读数也有出入,只是小得眼睛校不出来,所以取个总率。影差散得没法用,极差稳得可以立率,这才是四张表真正量出来的东西。这一批数还能自己对自己:每站另记了「定春秋分」的影长,而春分那天太阳赤纬为零,影长直接给出纬度。拿八尺表反算,白马是北纬 34.80 度、武津 33.43 度;把他们的极高度数按周天三百六十五度四分之一折成角度,是 34.79 度与 33.32 度——四站对下来最大只差 0.21 度。覆矩量的角和圭表量的影,是两件独立的观测,它们互相对得上。往前数,埃拉托色尼与波西多尼乌斯都用两地的天象算过地球的大小,而两地之间有多远,他们取的是行旅与航程的估数;这一次不同的地方只有一条:距离是人一段一段量出来的。

四张表摆在一条线上。挑任意两站,看这一段量出的是多少里差一度、多少里差一寸;旧规矩那条「千里一寸」在旁边比着

四站自北而南是滑州白马、浚仪岳台、扶沟、上蔡武津,差不多在同一条子午线上。每站记两样:夏至日中八尺表的影长,和用覆矩斜望北极量到的「极出地」;站与站之间的距离是拉绳一段段量出来的——「设水准绳墨植表而以引度之」。三段相加十五万八千零七十步,正是五百二十六里二百七十步,与原文一步不差;两端极高差一度半,除得每度三百五十一里八十步,也与原文一字不差。 要看的是两把尺子的对比。极高那一把:三段分别是每度 397.2、335.9、320.7 里,散布在一成多以内,可以拿来立一个总率——一行自己也这么说:「其北极去地,虽秒分微有盈缩,难以目校,大率三百五十一里八十步,而极差一度。」影长那一把就散了:同样三段,每寸分别要走 496.5、186.6、213.8 里,最大与最小差 2.66 倍,全程折下来是 257.0 里差一寸——而《周礼》郑玄注用了近千年的规矩说的是「千里而差一寸」,大了 3.89 倍,而且它根本不是个常数。「而旧说,王畿千里,影差一寸,妄矣」这句话,是这么量出来的。 这批数还能自己对自己:每站另记了定春秋分的影长,而春分那天太阳赤纬为零,影长直接给纬度。拿八尺表反算,白马是北纬 34.80 度、武津 33.43 度;把他们的极高度数按周天三百六十五度四分之一折成角度,是 34.79 度与 33.32 度——四站对下来最大只差 0.21 度。覆矩量的角和圭表量的影是两件独立的观测,它们互相对得上。至于这个率今天准不准:换算要先认定唐尺多长,各家不一,按唐小尺约 0.245 米折,一唐度合 129.2 公里,折成角度的一度是 131.1 公里,而今测北纬三十四度处是 110.9 公里,大了约五分之一。

以蠡测海

同一套影差公式,拿四站里不同的两站去代,算出的天高从一万四千里到近四万里——差了两倍半。

H=gd2d1s1s2(g=8)H = g\,\frac{d_2 - d_1}{s_1 - s_2} \qquad (g = 8\,\text{尺})

在他之前,中国人由影子推天地大小走的是《周髀》那条路:日下无影,影长每差一寸南北就差一千里,于是阳城夏至影一尺五寸,「戴日之下」——太阳正当头的那个地方——就在正南一万五千里;再用勾股,八尺之表配一尺五寸之影,太阳离地便是八万里。三国的王蕃拿这条路一直算到了整个天:由阳城斜射到戴日之下,得日去人八万一千三百九十四里,再按他自己用的周径率一百四十二比四十五折成周天,一度合一千四百零六里余(《新唐书》记作一千四百六里二十四步;照上面的办法复算是一千四百六里一百二十步,差九十六步,万分之二,多半是他中间取舍所致)。一行把这条路整个拆了,用的是新测回来的数。第一击是自相矛盾:「千里差一寸」若是真的,那么任取两站都该算出同一个天高。四站两两相配有六对,代进同一套勾股:白马与岳台那一对给三万九千七百一十九里,岳台与扶沟给一万四千九百二十八里,扶沟与武津一万七千一百零五里,两端相配二万零五百六十二里——最大与最小差两倍半,而《周髀》说的是八万里。同一片天,量一次得一个数。第二击更干脆。开元十二年同时测了交州:夏至那天,影子落在表的南边三寸三分——太阳已经在天顶以北了。也就是说,「戴日之下」比交州还近;而按他自己的率,交州离阳城不过五千里出头(这个数是拿一度三百五十一里八十步乘极高差十四度三分折出来的,不是量出来的)。旧法却说戴日之下在一万五千里外。他于是写道:「今测日晷,距阳城五千里已在戴日之南,则一度之广皆三分减二,南北极相去八万里,其径五万里。宇宙之广,岂若是乎?然则蕃之术,以蠡测海者也。」——照新数把尺度缩到三分之一,整个宇宙就只剩八万里宽,这像话吗?拿葫芦瓢去量海,说的就是这种事。他还讲了个道理,说的是「远了就看不准」:「古人所以恃句股术,谓其有证于近事。顾未知目视不能及远,远则微差,其差不已,遂与术错。」——勾股术在近处验得通,人就以为处处通;可眼睛望远处本来就有微差,微差积下去,术就错了。他打了两个比方。一个是水:在方圆不满百里的湖上,日月早晚出没于湖中;漂到不知几千万里的大海上,日月照样早晚出没于海中——两处都用重差去望,得出来的会是同一套数,根本分不开远近。另一个是两座塔:南北相距十里,各高数十里,在南塔顶点一把大炬,塔底立八尺之木应当无影;而从南塔底下仰望北塔之顶,微分之差积起来,望上去会与南塔顶重合——于是把炬移到北塔顶,塔底也该无影。数十里之高与十里之广,斜射的影与仰望的方向已经分不出来了,「今欲凭晷差以推远近高下,尚不可知,而况稽周天里步于不测之中,又可必乎」。开元十三年封禅泰山,他又添了一条实测:从山脚到山顶不过二十里,山下夜漏未尽,山上的太阳已经升得老高,昼夜之差抵得上一个节气。二十里的高差就把日出时刻搅动到这个地步,八尺高的一根表又凭什么去推天?(今天算,一千五百米的山顶地平线下沉约 1.26 度,日出只提前六七分钟,不到半刻——他报的三刻余偏大;但「高度会改变日出时刻、而勾股术里根本没有这一项」这件事,他说的是对的。)

旧办法是这样的:地是平的,影长每差一寸南北就差一千里,于是阳城夏至影一尺五寸,太阳正当头的那个地方(戴日之下)在正南一万五千里;再用勾股,八尺之表配一尺五寸之影,太阳离地八万里。三国的王蕃拿这条路一直算到整个天,得周天一度合一千四百零六里余。这条路有一个自己就能验的要求:任取两站,算出的天高应当一样。拿开元十二年四站的实测数代进去,六对两两相配得到的却是六个天:白马与岳台那一对 39719 里,岳台与扶沟 14928 里,扶沟与武津 17105 里,白马与扶沟 22556 里,岳台与武津 15918 里,两端相配 20562 里——最大与最小差 2.66 倍,而旧说给的是八万里。同一片天,量一次得一个数。 真正把这条路堵死的是同年测的交州:夏至那天影子落在表的南边三寸三分,太阳已经在天顶以北了,也就是说戴日之下比交州还近;而交州离阳城不过五千里出头。旧法却说它在一万五千里外。一行由此写下:「今测日晷,距阳城五千里已在戴日之南,则一度之广皆三分减二,南北极相去八万里,其径五万里。宇宙之广,岂若是乎?然则蕃之术,以蠡测海者也。」——照新数把尺度缩成三分之一,周天一度只剩四百六十九里,半个周天八万五千里,直径五万四千里,整个宇宙就这么点大。拿葫芦瓢去量海,说的就是这种事。

二十四个长短不等的气

冬至那一气十四天半,夏至那一气十六天——两段不一样长,中间怎么逐日补?他给了一条今天叫二次内插的式子。

0l1r(t)dt=Δ1\int_0^{l_1} r(t)\,dt = \Delta_1

唐代的历法要先算「气」。平气是把一年二十四等分,每气十五日多一点(大衍的三元之策是十五日余六百六十四秒七,合 15.2185 日);定气是把黄道二十四等分,太阳实走十五度算一气。太阳走得有快有慢,于是定气一长一短:冬至那一气只有 14.4445 日,夏至那一气 15.9925 日,两头差一天半还多。这个差别不是小数点后的事——《大衍历经》的日躔表把它逐气列了出来,叫盈缩分,冬至盈二千三百五十三(单位是通法分之一日,也就是 1/3040 日),一路缩到惊蛰的二百一十四,过春分转成缩,到芒种又是二千三百五十三。表只给二十四个格子,可历法要算的是「某月某日太阳在哪里」,得逐日补。等间距的二次内插,隋朝刘焯在《皇极历》(604)里已经用上了;可那套办法要求相邻两段一样长,定气一长一短,它就不管用。一行补上的正是这一句。他的术文十来个字一顿:「以所入气并后气盈缩分,倍六爻乘之,综两气辰数除之,为末率。又列二气盈缩分,皆倍六爻乘之,各如辰数而一,以少减多,余为气差。至后以差加末率,分后以差减末率,为初率。倍气差,亦倍六爻乘之,复综两气辰数除,为日差。」翻成今天的话:一日十二辰,所以辰数就是日数的十二倍,「倍六爻」正是那个十二。本气与后气的盈缩分各除以各自的日数,得两个平均日率;两率的加权平均是本气末尾那一天的日率(末率),两率之差是气差,初率等于末率加气差,此后每天匀减一个日差,日差等于两倍气差除以两气日数之和。也就是说,日率在一气之内是一条直线,累加起来就是一条抛物线——不等间距的二次内插。这条式子好在它不是凑的:把这条日率从零积到本气的日数,得到的正好是表上那个盈缩分,一分不差。这一点可以代数验出来,也可以逐气算一遍:二十四气里有二十个严丝合缝,误差是零。剩下四个是他特意另立的一档——「距四正前一气,在阴阳变革之际,不可相并」:惊蛰、芒种、白露、大雪各自紧挨着二分二至,前后两气的盈缩一个盈一个缩,并起来会互相抵消,所以改用前一气的末率当初率。这四个的还原值差 1.5 到 3.0,相对本气的盈缩分是万分之一到万分之十三。至于这张表本身准不准,今天可以逐格核:二十四气的长短与今推最多差 0.278 日(六小时四十分),平均差 0.11 日。差在哪里也看得出来——他把太阳走得最快的那一点放在冬至,而 725 年那一点其实在冬至之前八点九度;另外他这一摆的幅度偏大两成:表上盈缩累计的摆幅是前后各 2.423 日,今推是 +1.68 与 −2.28 日。模型左右对称,而天不对称,这是那 0.278 日的来处。

平气是把一年二十四等分,每气 15.2185 日;定气是把黄道二十四等分,太阳实走十五度算一气。太阳走得有快有慢,定气就一长一短:冬至那一气只有 14.4445 日,夏至那一气 15.9925 日,差一天半还多。日躔表只给二十四个格子,而历法要算的是「某月某日太阳在哪里」,中间得逐日补。等间距的二次内插隋朝刘焯已经有了,可它要求相邻两段一样长;定气一长一短,那套办法就用不上。 一行补的就是这一句。翻成今天的话:本气与后气的盈缩分各除以各自的日数得两个平均日率,两率的加权平均是交界那一天的日率(末率),两率之差是气差初率 = 末率 + 气差,此后每天匀减一个日差 = 2 气差 ÷ 两气日数之和。日率在一气之内是一条直线,累加起来就是一条抛物线。 这条式子的好处是它恰好,不是凑的:把日率从零积到本气的日数,得到的正是表上那个盈缩分,一分不差——二十四气里有二十个还原误差为零。剩下四个是他另立的一档:「距四正前一气,在阴阳变革之际,不可相并,皆因前末为初率」——惊蛰、芒种、白露、大雪各自紧挨着二分二至,前后两气一盈一缩,并起来会互相抵消,所以改取前一气的末率当初率;这四个的还原值差 1.5 到 3.0,相对本气的盈缩分是万分之一到万分之十三。 至于这张表本身准不准:拿 725 年的轨道要素逐气核一遍,二十四气的长短与今推最大差 0.2781 日(六小时四十分),平均差 0.11 日。差在哪里也看得出来——他把太阳走得最快的那一点放在冬至,而那一年它其实在冬至之前八点九度;另外这一摆的幅度偏大两成:表上盈缩累计的摆幅是前后各 2.423 日,今推是 +1.68 与 −2.28 日。模型左右对称,天不对称,那 0.28 日就是从这儿来的。

戴日之北每度晷数

太阳离天顶一度,八尺表的影子一寸三分七厘九——这张逐度给值的表,今天叫正切表。

s(z)=8tanzz=1s=0.1379s(z) = 8\tan z \qquad z = 1\,\text{度} \Rightarrow s = 0.1379\,\text{尺}

此前的晷影表都是一个地方的一年:何承天、祖冲之都造过阳城二十四气的影长表,出了阳城就不管用。《大衍历经》的步轨漏术里另有一张表,问的不是「哪一天」而是「太阳离天顶几度」:「南方戴日之下,正中无晷。自戴日之北一度,乃初数千三百七十九。自此起差,每度增一,终于二十五度……」这个一千三百七十九的单位是「满百为分,分十为寸」,也就是万分之一尺,所以它说的是:天顶距一度时,八尺表的影长是 0.1379 尺。今天算 8 乘以一唐度的正切,得 0.13764 尺——差千分之二。这就是一张正切表,只是唐朝人不这么叫它。造法是二阶差分:每度晷差从初数起,逐度加一个「每度差」,而每度差本身逐度递增,头二十五度每度增一。这条递增规律自己就说明它对:今天把 8 乘正切的二阶差分列出来,第二十六度正好是 26.3,与文里那句「计增二十六分」对得上。照传世文本把整张表复原出来,与 8 乘正切对照,五十度以内差在百分之一上下;更有说服力的是拿一行自己那张阳城晷影表去核——那张表给每个定气的中晷常数,而它与这张表之间隔着一句换算(天顶距等于黄道去极度减去五十六度八二五)。代进去:春分那一格他给五尺四寸三分一九,复原表给 5.4470 尺;惊蛰他给六尺七寸三分八四,复原表给 6.7369 尺;雨水 8.2106 对 8.2143。三格都在一分五厘以内。可到了五十度以外就对不上了:立春那一格差九分半,冬至那一格差五寸一分。问题出在抄下来的那串增量上,而不是他的办法——传世文本在这一段本来就乱:新唐书作「又每度增二,终于五十度。又每度增七,终于五十五度」,旧唐书作「每度增二,终于五十五度」,两处互异;更要紧的是,「每度增六」之后忽然回落到「每度增二」,这条曲线的二阶差分不可能往回走。文中还留了三处校验数——四十四度「增六十八」、六十度「增百六十」、七十二度「增二百六十」——按传世增量复原出来分别是 78、220、643,按正切真值算是 79、301、1294,三处都对不上任何一边。所以这串数至少有一处讹误,而讹在哪里,光靠这两部书是定不下来的。反过来,他自己那张阳城表倒是一直站得住:冬至那一格(天顶距 58.4 度)给一丈二尺七寸一分半,8 乘正切给 12.575 尺,差一个百分点。真正丢掉的只有一串抄坏了的增量。

此前的晷影表都是一个地方的一年:何承天、祖冲之都造过阳城二十四气的影长表,出了阳城就不管用。这一张问的不是「哪一天」而是「太阳离天顶几度」——「南方戴日之下,正中无晷。自戴日之北一度,乃初数千三百七十九」。那个单位是万分之一尺,所以它说的是:天顶距一唐度时,八尺表的影长 0.1379 尺。今天算 8 乘一唐度的正切是 0.13764 尺,差千分之二。这就是一张正切表,只是唐朝人不这么叫它。 造法是二阶差分:晷差逐度累加一个「每度差」,而每度差本身逐度递增,头二十五度每度增一。这条规律自己就说明它对——今天把 8 乘正切的二阶差分列出来,第二十六度正好是 26.3,与文里那句「计增二十六分」对得上。 照传世文本复原出来,五十度以内与 8 乘正切差在百分之一上下。更有说服力的是拿一行自己那张阳城晷影表去核(图上的黑点):春分他给 5.4319 尺,复原表给 5.4470;惊蛰 6.7384 对 6.7369;雨水 8.2106 对 8.2143——三格都在一分五厘以内。可到了五十度以外就散了:立春差九分半,冬至差五寸一分。 问题出在抄下来的那串增量上,不是他的办法。传世文本在这一段本来就乱:「每度增六」之后忽然回落到「每度增二」,而二阶差分不可能往回走;新旧两唐书在这一段互异;文中留的三处校验数「增六十八」「增百六十」「增二百六十」,按传世增量复原是 78、220、643,按正切真值是 79、301、1294,三处都对不上任何一边,所以这串数至少有一处讹误,而讹在哪里,光靠这两部书定不下来。反过来看,他自己那张阳城表一直站得住:冬至那一格(戴日之北 58.4 度)给一丈二尺七寸一分半,8 乘正切给 12.575 尺,只差一个百分点。真正丢掉的只是一串抄坏了的增量。

通法三千四十

分母是从《易》里推出来的,可它得同时装下朔望月与回归年——月差零点二六秒,年长了整三分钟。

897733040=29.530592111103433040=365.244408\frac{89773}{3040} = 29.5305921 \qquad \frac{1110343}{3040} = 365.244408

中国历法的一切数都写成「若干分之若干日」,那个共同的分母叫日法,大衍叫它通法,取三千零四十。这个数的来历,《旧唐书》本传说得明白:「一行推《周易》大衍之数,立衍以应之。」《历本议》里一步一步推:天地中积一千二百,「揲之以四」得爻率三百,「以十位乘之」得二章之积三千;另一头「以五材乘八象」得二微之积四十;「兼章微之积,则气朔之分母也」——三千加四十,三千零四十。同一篇里还顺着推出辰法七百六十(三千零四十乘三除以十二)、刻法三百零四(乘十再除以倍大衍五十)、气余七百四十三(三千零四十的四分之一减去八气九精的十七)。这一套读起来像数字命理,而它接下来要干的是实事:一个分母一旦定死,朔望月与回归年就只能各取一个整数分子去凑。朔那一头他取得极准——揲法八万九千七百七十三除以三千零四十等于 29.5305921 日,今值 29.5305891,差 0.0000030 日,也就是 0.26 秒;而在三千零四十这个分母下,最接近朔望月的整数分子正是八万九千七百七十三,他一个不差地取到了。恒星年也准:乾实一百一十一万零三百七十九又四分之三除以三千零四十等于 365.256497 日,今值 365.256363,差 11.6 秒。可回归年就不然:策实一百一十一万零三百四十三除以三千零四十等于 365.244408 日,而 725 年的回归年是 365.242324 日,长了 0.002084 日——整整一百八十秒,三分钟;同一个分母本来能做到 9.5 秒。差得这么远,不是分母的错。把岁差摆出来就清楚了:乾实减策实等于三十六又四分之三,除以通法是每年 0.0120888 日,折成角度是每年 42.9 角秒(约八十二年七退一度),而今值是 50.29 角秒,少了 7.39 角秒。这 7.39 角秒折成时间是多少?太阳每日行一度弱,算下来正好 180.0 秒。年长多出来的那三分钟,一秒不多一秒不少,就是岁差少算的那一截。所以这一组数里准的那一半和不准的那一半各有出处:朔望月是数出来的,几百年的朔日记录一核就死;恒星年也是数出来的,星宿每年回到原处同样好核;而回归年要认定分点的那一刻,本来就难测,一旦岁差取偏,年长跟着偏,而且偏得分毫不差地等于岁差那一截。

中国历法不写小数,一切数都摊在同一个分母上,那个分母叫日法,大衍叫通法,取三千零四十。它的来历《旧唐书》说得明白:「一行推《周易》大衍之数,立衍以应之。」《历本议》一步一步推给你看:天地中积一千二百,「揲之以四」得爻率三百,「以十位乘之」得二章之积三千;另一头「以五材乘八象」得二微之积四十;「兼章微之积,则气朔之分母也」——三千加四十。同一篇还顺着推出辰法七百六十、刻法三百零四、气余七百四十三,逐字都能核出来。 这一套读起来像数字命理,而它接下来要干的是实事:分母一旦定死,朔望月与回归年就只能各取一个最接近的整数分子。朔那一头他取得极准——揲法八万九千七百七十三除以三千零四十等于 29.5305921 日,今值 29.5305891,差 0.26 秒;而这个分母下最接近朔望月的整数分子正是八万九千七百七十三,他一个不差地取到了。恒星年也准:乾实除以通法得 365.256497 日,差 11.6 秒。 可回归年不然:策实一百一十一万零三百四十三除以三千零四十等于 365.244408 日,比 725 年的回归年长了整整一百八十秒——而同一个分母本来能做到 9.5 秒。差得这么远不是分母的错。把岁差摆出来就清楚了:乾实减策实等于三十六又四分之三,折成每年 42.9 角秒(约八十二年七退一度),而今值是 50.29 角秒,少了 7.39 角秒;这 7.39 角秒折成时间,正好 180.0 秒。年长多出来的那三分钟,一秒不多一秒不少,就是岁差少算的那一截。 所以这一组数里准的那一半和不准的那一半各有出处:朔望月与恒星年都是数出来的——几百年的朔日记录、星宿每年回到原处,一核就死;回归年要认定分点的那一刻,本来就难测,一旦岁差取偏,年长跟着偏。

上元积年九千六百九十六万一千七百四十

一个九千六百多万年前的起点,代回来算开元十二年的冬至——得戊寅日,今天推的也是戊寅日,差五十分钟。

《大衍历经》的第一句是:「开元大衍历演纪上元阏逢困敦之岁,距开元十二年甲子,积九千六百九十六万一千七百四十算。」阏逢困敦就是甲子,所以上元是个甲子年,距开元十二年九千六百九十六万一千七百四十年。历法为什么要这么一个起点?因为那一刻要「齐」:日月同度、冬至与合朔同时、还得落在甲子日的夜半。《历本议》把这几重周期都算了出来——气朔相会要八万九千七百七十三年,叫章率(正好就是揲法那个数);再要合于夜半,得等蔀率;连年的干支也一并归位,才是元率,一百六十三亿七千四百五十九万五千二百年。这三个数今天可以逐个核:章率就是揲法八万九千七百七十三,对;元率等于蔀率乘六十,也对;而蔀率应当是八万九千七百七十三乘三千零四十,等于二亿七千二百九十万九千九百二十,传世文本却作「二亿七千二百九十万零九百二十」——比正确值少了整整九千,是抄脱了「九千」两个字,用元率反推一下就能补回来。真正有意思的是:他实际用的九千六百九十六万一千七百四十,并不是这几个周期的倍数。也就是说,大衍的上元并非一个货真价实的「七曜齐元」,它是解出来的——要让算出来的开元十二年天正冬至,落在实测的那一天、那一刻上。这是一道什么题?把常数代进去就看得见:中积分等于策实乘上元积年,除以通法得积日三百五十四亿一千四百七十三万三千三百一十四,余数二千二百六十;积日除以六十,余十四,从甲子起算是戊寅日;余数二千二百六十除以三千零四十是 0.7434 日,合戌初,约十七时五十分。今天推 723 年的冬至(洛阳地方时,ΔT 取一千九百到二千三百秒),落在戊寅日十八时四十到四十七分之间。同一天,差五十分钟。上元积年要同时满足的正是这一类条件:某某数除以某某数余某某——一组一次同余式。五百二十年后,秦九韶在《数书九章》里把这类题一并收拾干净,立的术叫「大衍求一术」,而他自己在序里说「历家演法颇用之」,历家拿它推的正是上元积年。两个「大衍」同出《易·系辞》那一句「大衍之数五十」,不是一个名字传给另一个名字;只是做的恰好是同一件事的两头——一个要解这道题,一个给出了解法。最后还有一段收尾。开元二十一年(733),善算的瞿昙譔因为没能参与改历而怀恨,与陈玄景一同上奏,说「大衍写九执历,其术未尽」——告它抄袭印度传来的九执历;连当年主持测影的南宫说也附议。玄宗下诏让侍御史李麟、太史令桓执圭调出灵台的观测簿逐条核对。结果是:大衍十得七八,麟德才三四,九执一二。于是治了告状人的罪。这大概是最早的一次把几种理论摊在同一批观测记录上、按命中率判高下的事。

故事展签故事展签:一个九千六百多万年前的起点,是从「今年冬至是哪一天」倒着解出来的。

传承

他的工作没有留在十八世纪——每条链的终点,都是你今天正在使用的东西。

开元十二年河南平地上的四张表北极高一度,地上三百五十一里八十步今天的大地测量与经纬度:一个坐标先要落到一个椭球上,而椭球的形状仍是靠一段段弧长量出来的
定气长短不一,等间距的内插用不了一行的不等间距二次内插,郭守敬再推到三次数值逼近里的插值多项式:传感器补点、动画补帧,中间那一段都是这么补出来的
戴日之北每度晷数:按天顶距逐度给值阿拉伯与欧洲各自造出正切表与影表今天的工程测量与测量平差:一台全站仪读出的每一个高差,底下都是这条正切
通法三千四十:一个分母同时逼近朔望月与回归年分母定死,分子只能取最接近的整数今天的历法与置闰:公历的闰法、农历的朔望月,仍是同一道有理逼近题
上元积年:一组一次同余式秦九韶 1247 年的大衍求一术把它一并解开中国剩余定理与 RSA:今天的加密库里,那一步还写作 CRT

语录

大衍为天地之枢,如环之无端,盖律历之大纪也。

—— 《大衍历议·历本议》· 通法三千四十正是从这一段的数里推出来的

宇宙之广,岂若是乎?然则蕃之术,以蠡测海者也。

—— 《新唐书·天文志一》· 评王蕃由晷影推天的大小:照新测的数折算,整个宇宙只剩八万里宽

古人所以恃句股术,谓其有证于近事。顾未知目视不能及远,远则微差,其差不已,遂与术错。

—— 同上 · 接着是那两个比方:湖上与海上都见日月出没其中,两座十里外的高塔望上去塔顶会重合

究其义矣。

—— 《旧唐书·一行传》· 他向道士尹崇借扬雄《太玄经》,几天就送回来。尹崇说我钻研多年尚不能晓,你怎么这么快就还?