从颛顼历起,各家历术长期遵用十九年七闰的闰法,或者说,一个回归年有12又7/19个朔望月。这个数据也是观察的结果,《后汉书·历志》:“察日月俱发度端,日行十九周,月行二百五十四周,复会于端,是则月行之终也。” [10] 日行十九周,即19年;月行二百五十四周,即月亮254次经过恒星天背景上同一点,也即254个经天月。这段期间里,日月合朔的次数只须以254减去19即得,等于235,即19年里有235个朔望月。这个简单的算法也可以用钟表来例示:从随便什么时分如一点钟,到下一个一点钟,时针走了1圈,分针走了12圈,时分针相合的次数为12-1=11。19年有235个朔望月,而235=12×19+7,可见19年须置7个闰月。
只要坚持长期观察,这个数据不难得到,这点耐心,古人是有的。但是在古代的技术水平下,朔策却碍难直接观测。月行速率很不稳定,在同一个周期里,月行有迟疾,不同的朔望月,它们的长度也不一,在29天6小时到29天20小时之间,据现代测定,月平均时间为29.530588日。先秦古人的朔策是从岁实和闰法间接算得的,19年有235个朔望月,而1年有365又1/4日,故朔望月平均长度为365又1/4乘以19再除以235,等于29又499/940日(29.530851日)。
十九年是又一个周期,是月(朔望月)与岁(回归年)的最小公倍数。“岁首至也,月首朔也,至朔同日谓之章。” [11] 冬至作为岁首,朔日作为月首,如果冬至合朔在同一日,那么经过19年,又将出现冬至与合朔同日,这个周期称为“章”。但一章19年共计6939又3/4日,并不是整日数,于是更以4乘19等于76年,共计27759日,得到另一个周期,称为“蔀”。蔀是日、月、岁的最小公倍数。我们可以模仿着说:“岁首至也,月初朔也,日起夜半也,至朔夜半同刻谓之蔀。”但是如果考虑干支计日,一蔀的日数不能被60整除,不是整数个甲子周期,于是又以20乘一〖FJF〗踚〖FJJ〗之年数76,等于1520年,称为“一纪”。纪是日、月、岁、六十甲子的最小公倍数了,可以再模仿说:“岁首至也,月初朔也,日起夜半也,甲子始甲子也,至朔夜半甲子所同谓之纪。”《左传·襄公三十年》:“二月癸未,晋悼夫人食舆人之城杞者,绛县人或年长矣,无子而往,与于食。有与疑年,使之年。曰:‘臣,小人也,不知纪年。臣生之岁,正月甲子朔,四百有四十五甲子矣,其季于今三之一也。’” [12] 一个平头百姓,不知道自己的岁数,但记得活了多少个甲子,可见古代甲子计日的普遍性。当制订历法时,考虑将其与别的周期协调起来,也就不是什么勉强的要求了。
另一方面,历法上章、蔀、纪这样越来越长的周期系列,确实也反映了古人将政道与天道混为一谈,以图政治之长久的思想。制订历法时,总希望千年一系地管用,验诸事实,则中国历史上改历之频繁,可谓首屈一指,举世无双。据朱文鑫《历法通志》统计,从古六历到太平天国的天历,共有过102种历法,其中私撰不曾行用的只占极少数,改历很多是出于政治上改朝换代的原因,更重要的则是所行用之历的法数,积久而与实际天象不能相符,“闰余乖次,孟陬殄灭,摄提无纪,历数失序” [13] ,疏阔到了不得不改的程度。汉初承秦,用颛顼历,武帝元封七年改历,改当年为太初元年。“太初历”闰法依旧,为19年7闰,故“至朔同日谓之章”不变;而改朔策为29又43/81日,岁实相应为365又385/1539日。现在太初历一章的日数是6939又61/81日,为了取得整日数,使得“至朔夜半同刻”,便须以81乘一章,得1539年,称为“一统”。“一统”的日数也不能被60整除,甲子不复,故须“三统”,即1539乘以3等于4617年,称为“一元”,才是日、月、岁、六十甲子的最小公倍数,所以太初历又称“三统历”。总而言之,日、月、岁、章、〖FJF〗踚〖FJJ〗、纪,是四分历的周期系统;日、月、岁、章、统、元,是三统历的周期系统。
已知四分历是先有岁实,再算朔策,岁实(主要是那个“斗分”1/4)乃是实测所得,其他的数据都不难从它算出来(根据19年7闰的规则)。太初历反之,是先有朔策,再算岁实和其他数据。那么,朔策29又43/81=2392/81,又其来何自呢?
《汉书·律历志》对这个朔策2392/81的来历作了说明:“日法八十一。元始黄钟初九自乘,一龠之数,得日法。”“月法二千三百九十二。推大衍象,得月法。” [14] 古代历算术语中,“法”与“实”相对,例如以5乘10或除10,则10为“实”(被乘数或被除数),5为“法”(乘数或除数)。将一日等分为81份,以每一小份为“实”,则一日所有的份数81即为“日法”,而一月的总份数2392,即叫“月法”。体现“法”与“实”的概念区分,43/81日,应读作“八十一分日之四十三”,不能读作“八十一分之四十三日”。成语“三分天下有其二”,不说“有三分之二之天下”。这些似乎反映古代历算中的“分数”尚未从对具体事物或意义的依附中抽象出来。
太初历法数是从“黄钟之数”依易理推出来的。《汉书·律历志》云:“数者,一、十、百、千、万也,所以算数事物,顺性命之理也。《书》曰:‘先其算命’(颜师古注:‘先立算数以命百事也。’)。本起于黄钟之数,始于一而三之,三三积之,历十二辰之数,十有七万七千一百四十七,而五数备矣。(师古引孟康注:‘五行阴阳变化之数备于此矣。’)” [15] 1、3、9、27、...直至3的11次方177147,这12个数是“黄钟之数”,万物皆备于此,都可以从这里得出来。日法81,即是“黄钟之数”之一。《志》又云:“以易大衍之数五十,用其四十九,成阳六爻,得周流六虚之象也。夫推历生律制器,规园矩方,权重衡平,准绳嘉量,探颐索隐,钩深致远,莫不用焉。” [16] 且看它是怎样“推大衍象,得月法的”:“元始有象一也,春秋二也,三统三也,四时四也,合而为十,成五体。以五乘十,大衍之数也,而道据其一,其余四十九,所当用也,故蓍以为数。以象二二之(49×2=98),又以象三三之(98×3=294),又以象四四之(294×4=1176),又归奇象闰十九及所据一加之(1176+19+1=1196),因以再〖FJF〗*=〖FJJ〗两之(1196×2=2392),是为月法之实。如日法得一,则一月之日数也。” [17] 最后一句是说,以日法81除月法2392,等于29又43/81,即一个朔望月的日数。“实如法得一”,是古代历算里关于除法的典型说法。
改岁实和朔策,是一种“微调”。朔望月29天半略多,29是铁定之数,关键在那个余数,怎样调得恰到好处呢?揆度古人的实际思路,取“黄钟之数”81为“日法”,可能真的是出于对此类数的特殊信任和爱好,而一旦取定,朔余之分母43也就定了,因为只有它才使得新旧朔余的差最小。不取同样是“黄钟之数”的27或243的理由也在这里:若取27,则分子只能取15,但15/27比43/81误差大;若取243,则计算太繁复。朔策29又43/81,化成假分数得分子2392,即是月法。太初历的作者偏不这样说,偏要通过“元始之象”、“大衍之数”、“以象二之”、“以象三之”一连串复杂的说辞把它重新凑合出来,明明是凑合,却又说成是推衍。这种用易理来网罗一切事实的做法,在中国思想史上,甚至在现代中国人的思想中,是普遍存在着的。始作俑者或许是故弄玄虚,传述者则信以为真,承前启后,辗转滋乳,越讲越玄。越玄,也就越容易给人一种什么都说通了的似是而非的满足。在对自然和社会人际事物的认知、解释上,有易理的那一套在起作用,科学那一套既有普遍概念的规定性、又有具体实证的规定性的认知活动就无从生起。李约瑟说:“我们对阴阳和五行的理论的讨论,指示它们对中国科学思想的发展,是有助益而非阻碍的。...但是如果以中国的科学哲学的第三个伟大成分-《易经》-言,则不易作如是良好的评价。” [18] 诚哉斯言。
古代改历的基本原理
阳历好办,阴历难弄,原因在于,岁实容易测,朔策极难量。相对而言,日行比月行稳定得多,岁实只要足够精确,其误差得经很长时间才会积累至明显程度,而且容易预见,容易调整。如现行公历格利高里历,系1582年改订也属“四分历”的儒略历而成。四分历岁实偏大,四百年后会多出三日,冬至将“后天”三日,即历上的冬至比实际的冬至晚三天。格利高里历规定:逢整百数的年份,必须能被四百整除,才算闰年,便把多出的三天打发掉了。格利高里历已非常精确,要一万年后才会又多出三天,“一万年太久”,现在正大可不必担心。《孟子.离娄》:“苟求其故,千岁之日至,可坐而致也。”岁实在手,一千年后的冬至日,立马可以算得。雄辩滔滔的孟夫子可并不敢说“千岁之月朔可坐而致也。”“其故”即在于月行很不稳定,而古人排历日只能根据朔策对月份作平均的安排(所谓“平朔”),结果常常出现历上之朔与实际之朔错位的情况,月朔的推算比冬至日的推算复杂得多,一般人民自己不会算(也不容许算),只能由统治者来告诉他们,于是有“颁告朔”的仪式。可以说,“千岁坐致”是长期预报,“颁告朔”则是一年一度的短期预报。
周礼.春官.太史》:“颁告朔于邦国。”《论语.八佾》:“子贡欲去告朔之饩羊。子曰:‘赐也,尔爱其羊,我爱其礼。’”朱熹注:“告朔之礼,古者天子常以季冬,颁来岁十二月之朔于诸侯,诸侯受而藏之祖庙。月朔,则以特羊告庙,请而行之。饩,生牲也。鲁自文公始不视朔,而有司犹供此羊,故子贡欲去之。子贡盖惜其无实而枉费。然礼虽废,羊存,犹得以识之而可复焉。若并去其羊,则此礼遂亡矣,孔子所以惜之。” [19] “颁告朔”就是每年年底预先告知来年的月日安排,“凡岁将终,奏新年历” [20] ,与现在人家每年买日历簿差不多,不同处在于,买日历簿是百姓日用,而告朔则是“诸侯所以禀命于君亲”的“礼之大者” [21] 。
告朔之礼名存实亡以至于名实俱亡后,历法方面就出现了混乱。日食必定发生在朔日,所以根据历史上关于日食的记载,可以探知当时历朔的安排情况。《汉书·五行志》统计:“凡春秋十二公,二百四十二年,日食三十六。《谷梁》以为朔二十六,晦七,夜二,二日一。《公羊》以为朔二十七,二日七,晦二。《左氏》以为朔十六,二日十八,晦一,不书日者二。” [22] 这个统计表明,《春秋》三传所依据的历法各不相同。王韬在《春秋朔闰至日考》中解释说:“周既东迁,王室衰微,天子未必颁朔,列国自为推步,故经、传日月常有参差。” [23] 所谓“古六历”,学者早已论定:其实并不如其名称所说的那么古,不过是“列国自为推步”,而又假托于古罢了。
月行的周期与周期之间,长短相差可观,象《公羊》、《谷梁》所依据的历法,以“平朔”的方法推算月朔,而能让36次日食中,有四分之三发生于朔日,应该说相当不错了。问题在于,既然“古之六历,并同四分”,岁实、朔策和闰周都相同,为什么排出来的历日会彼此不同,有的精确,有的粗疏呢?《汉书.历志》:“汉兴,方纲纪大基,庶事草创,袭秦正朔。以北平侯张苍言,用颛顼历,比于六历,疏阔中最为微近。” [24] 到了元封年间,汉兴已百年,出现了“朔晦月见,弦望满亏,多非是” [25] 的情况,武帝下诏改元封七年为太初元年,同时改历,太初历的岁实、朔策都比四分历的误差大,后世刘宋朝的何承天批评太初历“尤复疏阔” [26] ,事实上,以今测岁实365.24220天,朔策29.530588天为标准,在中国历史上有过的一百多种历法中,太初历恰恰是“微近中最为疏阔”的一种,为什么一段时期内,竟能做到“晦朔弦望,皆最密” [27] ,以致于班固盛称其“推法密要” [28] 呢?太初历行用近二百年,“失天益远,日、月宿度相觉浸多” [29] ,东汉元和二年,章下诏复行四分历,而“后年历数遂正” [30] ,这又究竟是怎么回事呢?
? 这里涉及到古代制历的一个基本原理。朱文鑫《历法通志》有“各历岁实朔策表”一节。从表中不难看出,一百多种历法的数据例多大于今测,例外是极少数。而且,每次改历也往往并不是把数据改得更精密些,太初改四分历,固然把数据改坏了,但是这种情况后世多有;坏数据的历法,反而比数据较好的前历,与实际天象符合得好一些,也屡见不一见。可见,这里重要的并不是数据。由于数据例多偏大,一种历法行用年久以后,就会出现“历后天”,也不妨说为“天先历”。改进的办法:即使仍用原数据,甚至更坏的数据,只要将新历的“历元”(起始点)适当地前移,就能使新历在一段时期内较好地符合天象。中国历史上频繁地改历,除了政治因素外,原因和原理都在这里了。
请以太初改历具体说明。
西汉元封七年,武帝因大中大夫公孙卿、壶遂、司马迁等言“历纪坏废,宜改正朔” [31] ,乃诏御史曰:“十一月甲子朔旦冬至已詹,其更以七年为太初元年。” [32] “詹”,训作“雠”,《集解》:“雠,比校也”,“相应曰雠”。“已詹”,即已经测候校定。“已詹”在先,更年号在后,可知“十一月甲子朔旦冬至”是上一年(元封六年)的事。至朔甲子同日是很难得的,所以决定以这一日的夜半为“太初本星度新正” [33] 。
《史记.历书.历术甲子篇》:
“太初元年,岁名‘焉逢摄提格’,月名‘毕聚’,日得甲子,夜半朔旦冬至。正北(案:夜半为子时,子位正北)。十二(岁有十二月,有闰则云十三也)。无大余,无小余;无大余,无小余。”
“焉逢摄提格太初元年。十二。大余五十四,小余三百四十八;大余五,小余八。”
“端蒙单阏二年。闰十三。大余四十八,小余六百九十六;大余十,小余十六。” [34]
案:上面第一段话是确定太初历的历元“新正”,太初元年的起点,既然是从新从零开
始,无论什么意义上都没有余数,所以连续两个“无大余,无小余”。
第二段话是说太初元年年终的情况,用的是四分历的“法数”,阴历一年十二月积日35
4又348/940日,减去5个甲子循环,尚余54又348/940日,所以说:“大余五十四,小余三百四十八”。冬至周365又1/4日,等于365又8/32日,减去6个甲子循环,尚余5又8/32日,所以又说:“大余五,小余八”。
第三段话是说太初二年,这年闰,有十三个月,但计算阴历年积日时只计十二个月,而将闰月日数加于下年积日中,上年之余加本年积日为:54又348/980+354又348/980=408又696/980,减去6个甲子循环,余48又696/980日,故曰:“大余四十八,小余六百九十六。”冬至周积日为上年之余加上本周日数:5又8/32+365又8/32=370又16/32,减去6个甲子循环,余10又16/32日,故曰:“大余十,小余十六。”
《甲子历术篇》往下的条文,都可以上面所说的方法来解读和推算。《历术篇》共排列了一蔀七十六年,等于一本简易的“蔀历”。有趣的是,司马迁虽是太初改历的建议者,《历术篇》中却不用太初历法数,而仍袭用四分历法数,他承认新的历元,但不满邓平的八十一分术,这也说明,改历时历元的确定比“法数”更重要。另一个值得注意之点是,司马迁把闰月日数都加于下年积日,这似乎可以作为年终置闰的一种表示,冬至日是太阳岁行的起讫点,闰月之置,或在冬至后,或冬至在其中,都可以合乎情理地将其月之日数加积于下一年。
令人最感兴趣的是:太初新历的历元究竟是怎样前移的?相对于前历来说,又前移了多少?《汉书.历志》有一段关于昭帝元凤年间,太史令张寿王屡屡攻击太初历的记载。张寿王是个顽固保守分子,他上书胡说汉元以来用的是黄帝调律历,攻击说“今阴阳不调,宜更历之过也。”诏下各有关人等“杂候上林清台,课诸历疏密。凡十一家。”“历本之验在于天”,让各家历法比赛,看谁与天象符合得最好,这里有一点用观察和实验检验理论优劣的科学思想的味道。结果,“寿王课疏远。”他不服,“复候”,还是他和他的信从者“课皆疏阔”。比赛比输了,寿王仍死不买账,“妄言”如故,“诽谤益甚,竟以下吏”。张寿王的“妄言”中,倒有一句正好对我们感兴趣的问题透露了实质性的消息。“太初历亏四分日之三,去小余七百五分,以故阴阳不调,谓之乱世。” [35]
太初六年的十一月,至、朔、甲子同日,这是客观的符同,已经测候詹定。不难算出四分历的误差是三百年朔差一日,四百年至差三日,原用颛顼历虽有违失,但误差还没有积累到“后天”一日以上,故颛顼历上,那一个甲子日也是至朔并同。问题在于,一日是一段时间,有十二个时辰,至朔所交的时分,可以各历并不相同。马迁《历术篇》规定至朔并交于那一日的夜半时分,建立了一个新的起点,张寿王攻击这种做法是“亏四分日之三,去小余七百五分”,造成“阴阳不调”的“乱世”。夜半以后经过“四分日之三”,那是傍晚;“小余七百五分”,除以“〖FJF〗踚〖FJJ〗月”九百四十,也约等于四分之三,可见在原用颛顼历上,那一天至朔都交于傍晚时分。“亏”掉“四分日之三”,“去”掉“小余七百五分”,将历元前移到那一日的夜半,这就是太初历的主要改进。这一步改进,把颛顼历已经有所积累的“后天”因素一下子潜移掉了,从而使得数据“尤复疏阔”的太初历一段时间内反而更管用。张寿王的“妄言”,不仅使我们得以探明太初改历的具体要点,且使我们可以藉此溯知前用颛顼历的某些情况。
用“前移”的方法克服“历后天”,西方人也这么做过。西方人重视春分,因为它与原来根据阴历推算的复活节密近。公元325年的春分在3月21日,当年召开的尼西亚主教会议,索性将复活节规定在3月21日春分那一天。到了1582年教皇格利高里十三世下令改革儒略历时,春分已经飘移到3月11日去了,历后天达10日之多。为了让复活节和春分仍在同一日,教皇乃下令当年十月份减去10天,10月4日星期四的翌日便是10月15日星期五。于是第二年,即1583年,春分又在3月21日了。关于这一点,格利高里改历和太初改历,本质上没有什么不同。所不同的是,阳历不需考虑月行,不存在历对月相的先天后天问题,所以好办得多,格利高里改历使回归年日数高度精密化,一次前移,便可千年不移。而中国所行阴阳合历,历日要同时符合日躔月离,稍有差失,即须改动,中国虽然历史悠久,但行用最久的明大统历,也只不过用了276年,而明代以前的近百种历法,没有行用超过200年的,多数只用了几十年,甚至只有几年。
且不谈同时行用几种不同历法的情况。频繁改历,历与历接榫处往往情况复杂,后人要排出前面世代的明细长历,做到绝对精确,是极其困难的。陈寅恪《柳如是别传》第三章,有一段考证,因云间陈卧子“癸酉长安除夕”诗(有“去年此夕旧乡县,红妆绮袖灯前见”句),考得“卧子等实于崇祯五年壬申除夕参预河东君在内之花丛欢宴。”又考得钱肇鼇《质直谈耳》中柳如是约徐三公子“腊月三十日当来”一事,当亦指崇祯五年除夕而言。陈寅恪接着发问:“检近人所推算之明代年历,崇祯五年六年七年,十二月皆小尽。唯四年八年,十二月大尽。肇鼇是否未曾详稽当时所用之官历,遂以五年除夕为腊月三十日。抑或肇鼇所言无误,而近人所推算之明历,不合实际?” [36] 陈寅恪又检出钱牧斋“(崇祯十四年)二月十二日横山晚归作”诗,“最是花朝并春半”句,而云:“可证牧斋当日所依据之官历,崇祯十四年二月十二日为春分节。但近人所推算之明代年历,则崇祯十四年春分节在二月十日,相差两日。吾人今日因未得见明代官历,不能决定其是非。故此问题,可置不论。” [37] 陈寅恪以严谨的读史态度,对后人推算之前历,不敢尽信。明代尚属近古,至中古甚至上古,更何敢尽信乎?
上海社会科学院历史研究所主办 上海市中山西路1610号14楼1414室 陈克艰
电话:021-64862266-2404 Email:shilin33@historyshanghai.com