王鵬云,滕艷輝
(1.咸陽師范學(xué)院 數(shù)學(xué)與信息科學(xué)學(xué)院,陜西 咸陽712000;2.西北大學(xué) 科學(xué)史高等研究院,陜西 西安 710127)
《宣明歷》由唐代徐昂制訂,頒行于唐穆宗長(zhǎng)慶二年(822)。在唐代行用長(zhǎng)達(dá)71年,景福元年(892)被《崇玄歷》取代。[1]2319《宣明歷》對(duì)日本和朝鮮的影響很大?!缎鳉v》在日本貞觀四年(862)取代《大衍歷》行用至貞享元年(1684),共計(jì)823年。高麗建國即用《宣明歷》,直到忠宣王(1309—1313)改用元《授時(shí)歷》,而交會(huì)術(shù)仍因循《宣明歷》行用至1392年,亦約400年。[2]《宣明歷》對(duì)之前歷法最大的改進(jìn)表現(xiàn)在日食計(jì)算上面,它首創(chuàng)日食“三差”算法,是中國傳統(tǒng)歷法視差理論中極其重要的內(nèi)容。已經(jīng)有學(xué)者對(duì)《宣明歷》的部分術(shù)文給出過解讀,亦有學(xué)者對(duì)其定朔和歷書推步做過詳細(xì)討論。[2-5]本文將著重對(duì)其日食算法和推算過程給出詳細(xì)的解讀。
目前,關(guān)于《宣明歷》推算的原文在中國、日本和朝鮮都有所保存?!缎绿茣分性敿?xì)記載了《宣明歷》推算所用的天文常數(shù)和《宣明歷》所改進(jìn)的地方,而與《大衍歷》相同或相似的推算術(shù)文并沒有記載?!陡啕愂贰吠暾涊d了《宣明歷》的氣朔、發(fā)斂、日躔、月離、晷漏和交會(huì)幾部分的推算術(shù)文,但沒有記載五星部分的推算術(shù)文。[6]日本寬永二十一年(1645)開版印刷的《宣明歷》一至七卷是為了計(jì)算方便而改進(jìn)的版本。這里面將《宣明歷》的某些算法直接計(jì)算出數(shù)據(jù)編制成表格,將某些不參與直接計(jì)算的算法刪除。[7]本文關(guān)于《宣明歷》的推算原文,參考了這三個(gè)版本。
《宣明歷》有關(guān)日食計(jì)算的常數(shù)大部分在其“步交會(huì)術(shù)”部分中給出,但也有些常數(shù)因?yàn)樵谇懊嫱扑闫渌鼩v日和天象的時(shí)候已經(jīng)給出,步交會(huì)部分就沒有重復(fù)給出??傮w上,使用《宣明歷》進(jìn)行一次完整的日食推算,需要用到推算氣朔、日躔、月離和晷漏幾部分的常數(shù)和推算術(shù)文。下面我們列出與交食計(jì)算有關(guān)的天文常數(shù)。
宣明統(tǒng)法A=8 400,表示1日的日分?jǐn)?shù);章歲T=3 068 055,是回歸年的日分?jǐn)?shù);是回歸年的日數(shù);通余=T-360A=44 055。章月U=248 057,表示朔望月的日分?jǐn)?shù);是朔望月日數(shù);章閏=T-12U=91 371,表示248 057個(gè)回歸年共有3 068 055個(gè)朔望月,其中包含91 371個(gè)閏月。歷周G=231 458.19是近點(diǎn)月的日分?jǐn)?shù);歷周日g=是近點(diǎn)月的日數(shù);平行V=m13.368 75是月亮平均速度,單位是度每日。終率J=228 582.651 2是交點(diǎn)月的日分?jǐn)?shù);j=是交點(diǎn)月的日數(shù);陽歷食限L1=2 640,陰歷食限L2=6 060,相應(yīng)的陽歷定法176,陰歷定法404;交率m0=202和交數(shù)n0=2 573是與交食周期有關(guān)的常數(shù)。
食甚時(shí)刻是在定朔上加入某些修正得到,因此,先要計(jì)算定朔時(shí)刻。定朔的計(jì)算會(huì)涉及歷法的步氣朔、步日躔和步月離部分,計(jì)算量比較大。《宣明歷》經(jīng)朔時(shí)刻算法使用了“捷法”,它先求冬至?xí)r刻,其術(shù)文稱:
推天正中氣:置從上元至所求積年,滿旬周去之;不盡,以通余乘之,盈旬周去之,滿統(tǒng)法為大余,不滿為小余。其大余起甲子,[算]外,即所求年天正冬至日及余秒也。[6]6-7
根據(jù)術(shù)文,可得其計(jì)算公式是
實(shí)際上,經(jīng)過公式變換,可得更為簡(jiǎn)單的公式
其次求冬至所在月的平朔時(shí)刻?!缎鳉v》“求天正經(jīng)朔”術(shù)文有:“以章月去所求積年,余以章閏乘之,盈章月又去之,不盈者為閏余,以減天正冬至小余:其小余不足,退大余一,加宣明統(tǒng)法;大余不足,加紀(jì)法。不盈者(余),大余起甲子,算外,則所求年天正合經(jīng)朔日及余秒也?!盵6]8據(jù)術(shù)文,可得公式
其中R2稱為閏余。而如果想得到冬至后第m個(gè)朔,需要在天正經(jīng)朔上累加朔望月,這樣,我們將式(3)經(jīng)過變換,得到冬至后第m個(gè)朔的計(jì)算方法是
定朔時(shí)刻是經(jīng)朔時(shí)刻加日月改正項(xiàng)后得到。在步日躔術(shù)中,《宣明歷》給出太陽修正的計(jì)算法。首先在“求每日先后定數(shù)”中,使用與《大衍歷》一樣的二次內(nèi)插法將日躔表插值成為每一天的太陽運(yùn)動(dòng)速度、太陽中心差與黃經(jīng)數(shù)值;然后在“推二十四氣定日”中,求得每一氣的定氣時(shí)刻,并求得所求經(jīng)朔到它前面最近定氣時(shí)刻的時(shí)間,歷法稱“推四象經(jīng)日與定氣相距”;最后,在“求朔弦望經(jīng)日入氣朓朒定數(shù)”中給出太陽修正數(shù)值的算法。[8]根據(jù)文獻(xiàn)[5]和[8],設(shè)入定氣日及余為rs,太陽修正值為
實(shí)際上,《宣明歷》指出“推日月行度及軌滿交蝕并依定氣,若注歷即依常氣”,也就是只有推算日月運(yùn)動(dòng)特別是日月交食等復(fù)雜天象時(shí),才使用定氣,而單是推算歷日,則不用定氣。
在步月離術(shù)部分,《宣明歷》給出月亮修正計(jì)算法,歷法稱為“求朔弦望經(jīng)日入歷朓朒定數(shù)”。其基本計(jì)算法如式(6)。
這個(gè)算法結(jié)構(gòu)與一般算法相同,但其中的ym和φm不是月離表中直接給出的數(shù)據(jù),而是根據(jù)月離表每一天的月離數(shù)據(jù)計(jì)算出的任意時(shí)刻的月離數(shù)值。這是一個(gè)極其精細(xì)的算法,有些研究將其稱為傳統(tǒng)歷法中最復(fù)雜的算法。[9]式中的εm是入歷日余,而入歷日rm則在“推天正經(jīng)朔入歷”中給出,公式如下
在“求朔弦望定日及余秒”中,《宣明歷》給出定朔算法,與《大衍歷》完全一致。[10]
《宣明歷》計(jì)算了合朔時(shí)刻月亮的黃經(jīng)與黃緯,然后根據(jù)前限和后限判斷月亮是否入食限,但此時(shí)并沒有加入視差對(duì)月亮經(jīng)緯度的影響,因此,還不能最終判定是否一定有日食發(fā)生?!缎鳉v》在給出某次合朔時(shí)是否有日食之前,就直接計(jì)算每次合朔時(shí)日月的最近距離時(shí)刻,即食甚時(shí)刻。同時(shí),歷法給出食甚時(shí)刻視差的修正算法,稱為時(shí)差算法,《宣明歷》“求食定余”算法稱:
凡日蝕,以定朔日出入辰刻距午正刻數(shù),約百四十七,為時(shí)差。視定朔小余如半法已下,以減半法,為初率;已上,減去半法,余為末率。以乘時(shí)差,如刻法而一,初率以減,末率倍之,以加定朔小余,為蝕定余。[1]2321
設(shè)Trm表示定朔時(shí)刻,ε表示其不足一日的日分?jǐn)?shù),即定朔小余,“日出入辰刻距午正刻數(shù)”就是一日白晝部分的一半的刻數(shù),記為d。初、末率就是定朔小余與正午時(shí)刻的時(shí)間差,即ω=|ε-0.5A|,147=8 400×7/400則定朔到食甚的修正可由下面公式計(jì)算得到
其中λ的取值與定朔在午前與午后不同,午前取4/7,午后取8/7。Δh在午前一定為負(fù),午后一定為正,這樣,食甚時(shí)刻計(jì)算公式就是
食甚時(shí)刻不足一日的部分即蝕定余。
合朔時(shí),只有月亮距離交點(diǎn)在一定范圍內(nèi),才有可能發(fā)生日食,這個(gè)范圍就是日食的食限。歷法中,食限的數(shù)值是事先給出的,但月亮到交點(diǎn)的距離是需要計(jì)算的。《崇天歷》首先計(jì)算這個(gè)距離,然后據(jù)此判斷是否入食限,當(dāng)入食限時(shí)才計(jì)算食分。
《宣明歷》首先在“求天正經(jīng)朔入交”中給出入交汎日求法。術(shù)文稱:
置通積分,以天正閏余減之,盈中率及余秒去之,不盈者滿宣明統(tǒng)法為日,不滿為余秒,命日算外,則所求年天正經(jīng)朔加時(shí)入交汎日及秒也。[6]102
如果要求冬至后第 個(gè)經(jīng)朔的加時(shí)入交泛日,只需累加朔望月常數(shù),并減去交點(diǎn)月即可。②“求次朔入交”的原術(shù)文疑有脫字,當(dāng)補(bǔ)充為“因天正所入加[時(shí)入交汎日及秒,以]交朔日及余秒[加之],求望,以交望日及余秒加之,滿終日及分秒皆去之……”這樣,距離上元n年的入交泛日rpj計(jì)算公式為[11]
③本文的計(jì)算結(jié)果中,如無特別說明,時(shí)間的單位為日,距離的單位為度。
其中Nnt-rsm表示成日分?jǐn)?shù)就是通積分。④關(guān)于“通積分”定義是在步月離術(shù)部分“推天正經(jīng)朔入歷”算法里面。
入交常日rcj就是入交泛日加入太陽改正項(xiàng),其算法稱:“置其朔、望秒,以其日入氣朓朒定數(shù)朓減朒加入交泛日余,滿若不足,進(jìn)退其日,即入交常日及余秒也?!盵6]105
入交定日就是在入交常日上再加入與月亮改正有關(guān)的項(xiàng),算法術(shù)文稱:
置其日入歷朓朒定數(shù),以交率乘之,如交數(shù)而一,所得,以朓減朒加入交常余數(shù),除如前,即入交定日及余秒也。[6]105
由于從上次合朔到本次合朔,日月的位置發(fā)生了變化,而黃白交點(diǎn)的位置也向西退行了一段距離,要考慮到交點(diǎn)的退行,從而設(shè)計(jì)了入交定日算法。[11]其計(jì)算公式為
某次合朔,月亮必須距離交點(diǎn)一定范圍才有可能發(fā)生日食,這個(gè)范圍的最大值就是日食的不偏食限。《宣明歷》給出合朔時(shí)月亮的兩種距離。一種就是月亮沿著白道到交點(diǎn)的距離,就是上文討論的入交定日。一種是月亮到黃道的距離,即月亮的黃緯?!缎鳉v》的推算方法與《大衍歷》基本一致。[12]
《宣明歷》先要判斷月亮在黃道的南北,稱為“求月行入陰陽歷”,術(shù)文有:
其朔望入交定日及余秒,如中日及余秒已下者為入陽歷,已上者去中日及余秒,令為月入陰歷。[6]105-106
就是月亮的入交定日不足交中日,月亮在黃道南,在降交點(diǎn)到升交點(diǎn)之間,稱為月在陽歷;大于交中日,月亮在黃道北,在升交點(diǎn)到降交點(diǎn)之間,稱為月在陰歷?!缎鳉v》此處沒有明確說明月亮在四象中的確定方法。實(shí)際上,根據(jù)其推算過程不難推斷,月亮在交點(diǎn)前為老象,月亮運(yùn)行至交點(diǎn)后就是小象?!缎鳉v》又將每一象分成六爻,一共二十四爻,每一爻目是十五度。隨后,《宣明歷》給出一張?jiān)铝猎诿恳回衬康脑铝痢凹訙p率”、“陰陽積”和“月去黃道度”的表格(見表1)。表格中小陽指“小象陽歷”,“月去黃道度”就是每一爻的初始時(shí)刻月亮黃緯的度數(shù)。而“陰陽積”則是這時(shí)的度分?jǐn)?shù),是度數(shù)乘以120得到,“加減率”則是相鄰兩爻的差值。
表1 《宣明歷》交食陰陽歷表
《宣明歷》給出月行在白道上的任意度數(shù)時(shí),它的黃緯的計(jì)算方法。其術(shù)文有:
求四象六爻每度加減分及月去黃道定數(shù):以其爻加減率與后爻加減率相減,為前差,又以后爻率與次后爻率相減,為后差。二差相減為中差。置所在爻并后爻加減率,半中差以加,而半之,十五而一,為爻末率。因?yàn)楹筘吵趼?,每以本爻初末率相減,為爻差,十五而一為度差,半之,以加減初率:小象減之,老象加之。為定初率,每以度差累加減之:小象以差減,老象以差加,各得每度加減定分,迺修積其分,滿百二十為度,各為每度月去黃道數(shù)及分。其四象初數(shù)無初率,上爻無末率,皆倍本爻加減率,十五而一,所得各以初末率減之,皆(牙)得其率。余依術(shù)算各得所求。[6]107-109
《宣明歷》根據(jù)陰陽歷表每一爻的數(shù)值,通過插值算法,求出每一度的數(shù)值。這種做法與它求每日太陽運(yùn)動(dòng)的方法相同,都是普通的二次內(nèi)插算法。事實(shí)上,在實(shí)際判斷有無交食時(shí),《宣明歷》并沒有使用月亮的黃緯。因?yàn)闅v法已經(jīng)有更好的日食三差理論,可以通過視差修正后的入交分來判斷。這段術(shù)文,包括后面的“求朔望夜半月行入陰陽歷變數(shù)”、“求朔望夜半月行入四象度數(shù)”以及“求朔望夜半月行入六爻度數(shù)”的術(shù)文推算,都沒有真正使用在具體歷法日食的計(jì)算上。①后面這幾段術(shù)文是根據(jù)月亮的實(shí)際運(yùn)行速度,求合朔日夜半月亮在四象六爻中的位置,因《宣明歷》月亮運(yùn)動(dòng)的算法極其復(fù)雜,這里的算法也相對(duì)復(fù)雜很多,關(guān)于這幾個(gè)算法的原理與解讀,至今還沒有定論,一般認(rèn)為這幾個(gè)算法存在問題,后世歷法也不再采用。詳情可參考文獻(xiàn)[5]?,F(xiàn)存日本寬永二十一年的《宣明歷》歷法就沒有記載這幾個(gè)算法。關(guān)于這些算法,已有相關(guān)研究,我們這里不多敘述。[12]
《宣明歷》判斷月亮是否入食限還是采用入交定日作為參考值進(jìn)行判斷。在“求入食限”中有:
其入交定日及余秒如前限已上,后限已下者入蝕限;望入蝕限,則月蝕。朔入蝕限則日蝕也,月在陰歷則入蝕限。如后準(zhǔn)已下為交后。前準(zhǔn)已上者,以減中日及余秒,余為交前。限滿全者皆退之,從余,為去交前后分。此蝕限術(shù)奉其常率,若在蝕分術(shù)之中當(dāng)可求。其置交前后定分十一乘之,如七千三百三除之,為去交定也。在蝕分術(shù)之中當(dāng)可求其定也。度數(shù)不盡也統(tǒng)法乘之,復(fù)除為余。[6]113-114
根據(jù)入交定日,如果月亮在陰歷,并且入交定日大于前準(zhǔn)或小于后準(zhǔn),則會(huì)發(fā)生日食;如果月亮在陽歷則不會(huì)發(fā)生日食。這個(gè)判斷日食的方法就是“內(nèi)外道法”,即,只有當(dāng)月亮在黃道北時(shí),才有可能發(fā)生日食,黃道南不食。將入交定日轉(zhuǎn)化為距離最近的交點(diǎn)的日分?jǐn)?shù),稱為去交前后分?!缎鳉v》此處的食限,前準(zhǔn)和后準(zhǔn),也不是日食的必偏食限,應(yīng)該是或偏食限,即使在這個(gè)食限之內(nèi)也可能不會(huì)有日食發(fā)生。這里,歷法又給出將去交分換算為度的方法。因13.368 75/8 400×7 303=11.662 9,可知術(shù)文中11和7 303的意義了。
《宣明歷》在求得日食食甚時(shí)刻后,給出視差對(duì)日食入交定日的修正算法,一般文獻(xiàn)統(tǒng)稱為日食三差算法。《宣明歷》稱“凡日蝕,有氣差,有刻差,有加差”。①一般文獻(xiàn)對(duì)“加差”研究較少,稱日食三差為“氣差、刻差和時(shí)差”,其實(shí)怎樣稱謂并不重要。其求氣差術(shù)文稱:
二至之初,氣差二千三百五十。②陳美東認(rèn)為一個(gè)象限應(yīng)為91日,并將術(shù)文2 350校為2 366,而通過后面的討論和日本寬永二十一年歷書可知,《宣明歷》一個(gè)象限取90日,此處不用校改。距二至前后,每日損二十六,至二分而空。以日出沒辰刻距午正刻數(shù),約其朔日氣差,以乘食甚距午正刻數(shù)。所得以減氣差,為定數(shù)。春分后,陰歷加之,陽歷減之;秋分后,陰歷減之,陽歷加之。[1]2321-2322
歷法首先根據(jù)合朔時(shí)距離二至點(diǎn)日數(shù),給出氣差數(shù)的公式,設(shè)到二至點(diǎn)距離為x,則氣差就是2 350-26x,x取整數(shù)日數(shù)。而日本寬永二十一年的歷法里沒有記載這個(gè)算法,記載了一張表格,直接按照二十四氣給出每一天的“損益率”和“氣差積”。從其中的數(shù)值可以看到,表格正是根據(jù)這個(gè)算法做了一點(diǎn)調(diào)整得到。因每天氣差損益26,按二十四氣算分至間一共90個(gè)整數(shù)日,算來共損益2 340分,其余10分,寬永《宣明歷》則分?jǐn)傇谶@90日中,每隔九日,氣差積在原來基礎(chǔ)上加1分。“食甚距午正刻數(shù)”與前面時(shí)差算法中的“初末率”相近,是食甚到正午的時(shí)間,我們也記為ω,氣差計(jì)算公式為[13]
其后歷法給出關(guān)于氣差的符號(hào),符號(hào)與春秋分前后和月亮在黃道南北都有關(guān)。式(13)可以看到,刻差定數(shù)最大值出現(xiàn)在二至日正午時(shí)刻,最大值2 350日分,合6.7小時(shí),這是很大的數(shù)值。刻差定數(shù)最小值為0,出現(xiàn)在二分日或是某天的日出日落時(shí)刻。
關(guān)于刻差,術(shù)文稱:
二至初日,無刻差。自后每日益差分二、小分十。起立春至立夏、起立秋至立冬,皆以九十四分有半為刻差。自后日損差分二、小分十,至二至之初損盡。以朔日刻差乘食甚距午正刻數(shù),為刻差定數(shù)。冬至后食甚在午正前,夏至后食甚在午正后,陰歷以減,陽歷以加;冬至后食甚在午正后,夏至后食甚在午正前,陰歷以加,陽歷以減。[1]2322
根據(jù)術(shù)文,設(shè)x是合朔時(shí)到二至點(diǎn)距離,每日損益分二,小分十,就是2.1分,《宣明歷》刻法84,為每刻日分?jǐn)?shù),則經(jīng)變換后,其氣差定數(shù)計(jì)算公式為[13]
關(guān)于加差,術(shù)文稱:
又立冬初日后,每氣增差十七。至冬至初日,得五十一。自后,每氣損十七,終于大寒,損盡。若蝕甚在午正后,則每刻累益其差,陰歷以減,陽歷以加。[1]2322
加差是對(duì)視差的微小修正,僅在冬至前后各三個(gè)氣內(nèi)使用,并且只在午后使用。每一氣不再區(qū)分日數(shù),氣內(nèi)的加差相等,其計(jì)算公式為
其中i表示距離冬至氣的氣數(shù),冬至取0,立冬取3。加差的最大值出現(xiàn)在冬至最后一日或小寒初日,大約1100日分,④冬至初日日出時(shí)刻要比末日大,按冬至平均日出時(shí)間大約為一日的7/24,計(jì)算可得。相比氣、刻差定數(shù)要小很多。加差除了小雪、大雪、冬至、小寒和大寒氣外的所有時(shí)刻都是0。
《宣明歷》專門給出文字說明氣、刻、加差的符號(hào)取法,我們將其統(tǒng)一列于表2中。有關(guān)氣刻差符號(hào)的具體內(nèi)容,可參考文獻(xiàn)[9]第436頁。
表2 《宣明歷》氣、刻、加差符號(hào)取法
《宣明歷》的“三差算法”都是根據(jù)合朔的不同時(shí)間給出分段的函數(shù)表達(dá)式,沒能形成統(tǒng)一的以黃經(jīng)和時(shí)角為自變量的函數(shù),但相比較其前面《皇極歷》等歷法根據(jù)月亮在內(nèi)道和外道而設(shè)計(jì)的需要經(jīng)過多重選擇才能判斷有無日食的方案要先進(jìn)很多。
在求食分之前,《宣明歷》又再次判斷有無交食,術(shù)文稱:
應(yīng)加減差,同名相從,異名相銷,各為蝕差。以加減去交分,為定分。月在陰歷,不足減,反減蝕差,交前減之,余為陽歷交后定分;交后減之,余為陽歷交前定分:皆不蝕。陽歷不足減,亦反減蝕差。交前減之,余為陰歷交后定分;交后減之,余為陰歷交前定分:皆蝕。[1]2322
此處是將去交前后分經(jīng)過視差修正得到去交前后定分,據(jù)此判斷有無日食。設(shè)去交分和去交定分分別為P'和P,則有
上式中,如果月在陽歷P>0,或者月在陰歷P<0,都表明,經(jīng)過視差修正的視月亮都位于黃道南,不會(huì)發(fā)生日食。如果月在陰歷P>0,或者月在陽歷P<0,都表明,經(jīng)過視差修正的視月亮都位于黃道北,可能會(huì)發(fā)生日食。只有陰歷交前后定分才有可能有日食,據(jù)此,給出食分算法,術(shù)文有:
凡去交定分,如陽歷蝕限已下,為陽歷蝕。以陽歷定法約,為蝕分。已上者,以陽歷蝕限減之,余為陰歷蝕。以陰歷定法約之,以減十五,余為蝕分。[1]2322
食分M是交前后定分P的函數(shù),根據(jù)P與陽歷食限的大小表示為兩種形式
事實(shí)上,L1、L2是必偏食限,交前后分只有在此限之下才有日食,即如果式(17)中P-L1>15L2,則所求食分就會(huì)小于0,這時(shí)說明月亮是落在必偏食限以外的。《宣明歷》日食食分算法的詳細(xì)解讀和分析可參考文獻(xiàn)[14]。
日食的初虧和復(fù)滿時(shí)刻是在日食食甚時(shí)刻上減去和加上一個(gè)時(shí)間差得到,《宣明歷》稱之為“日食用刻”,術(shù)文有:
置所求食之分十八乘之,十五而一,所得為汎用刻率,不盡者以刻法乘之(十五除之)為分。[6]120
《宣明歷》認(rèn)為日全食時(shí)自初虧到復(fù)末平均時(shí)間是18刻,那么時(shí)間與食分如果是線性變化的,則有某次日食初虧到復(fù)末時(shí)間(日食用刻)為18 M/15,單位是刻,要轉(zhuǎn)化為日分需要乘以刻法84。如果考慮到當(dāng)時(shí)月亮的不均勻變化,則要加入月亮改正,術(shù)文稱:
求虧初復(fù)末:置日月食汎用刻率,副之,以其日入歷損益率乘之,如宣明統(tǒng)法而一,所得應(yīng)朒者依其損益,應(yīng)朓者損加益減其副,為定用刻數(shù),半之,以減食甚辰刻為虧初,以加食甚辰刻為復(fù)末。[6]122
于是,《宣明歷》定用刻數(shù)就是
式(18)計(jì)算結(jié)果單位是刻。歷法認(rèn)為初虧到食甚與食甚到復(fù)末的時(shí)間相同,則可以得到虧初復(fù)滿的計(jì)算公式是
式(19)計(jì)算結(jié)果單位是日。在《宣明歷》之前,如《大衍歷》日食的起訖算法中的定用刻(分)都是使用表格,而《宣明歷》使用了公式,算法的傾向更為明顯。
如果日食食甚在日出前而復(fù)滿在日出后,我們雖能見到日食,但不能見到日食的最大食分,此時(shí)的日出就是帶食日出;同理,日落時(shí)已經(jīng)初虧但還沒有到食甚,此日落就是帶食日入。《宣明歷》給了帶食出入分?jǐn)?shù)的算法。其術(shù)文稱:
凡日月帶蝕出沒,各以定法通蝕分,半定用刻約之,以乘見刻①或以見刻減定用刻。又,此處為王應(yīng)偉所加,曲安京對(duì)此也有所說明,詳情可參考文獻(xiàn)[4]第470頁和文獻(xiàn)[9]第491頁。多于半定用刻,出為進(jìn),沒為退;少于半定用刻,出為退,沒為進(jìn):各如定法而一,為見蝕之大分。朔晝、望夜皆為見刻。[6]123-124
k即“見刻”,表示自初虧至日出或日落的時(shí)間刻數(shù)。
《宣明歷》還給出每次日食過程中被食的大概方位,稱“求日食所起”,其術(shù)文稱:
月在陰歷,初起西北,甚于正北,復(fù)于東北;月在陽歷,初起西南,甚于正南,復(fù)于東南。食十二分已上者,初起正西,復(fù)于正東。此術(shù)據(jù)古經(jīng)所載,以究大體,求其密驗(yàn),審黃道斜正、月行所向,起虧復(fù)滿當(dāng)可見矣。[6]119-120
月亮自西向東運(yùn)動(dòng),在黃道北,月亮自北邊遮擋日面,月影運(yùn)動(dòng)就是自西北經(jīng)正北到東北;月亮在黃道南,月影運(yùn)動(dòng)就是自西南經(jīng)正南到東南。如果是大食分日食(食分大于十二分),由于月亮距離交點(diǎn)很近,月影自正西向正東運(yùn)動(dòng)。但《宣明歷》又說,這個(gè)方法是古代記載方法,具體的太陽方位還要看具體黃道、月亮和食甚的情況。
《宣明歷》在日食計(jì)算方面起到了承前啟后的作用,其日食視差方面的修正方案被后世歷法所采用,并在其基礎(chǔ)上發(fā)展成獨(dú)特的數(shù)值算法系統(tǒng)。其日食推算方法具有明顯的算法化傾向。其推算中使用的數(shù)值或是變量,有些是《宣明歷》給出的天文常數(shù),如朔望月、回歸年、交點(diǎn)月和陰陽歷食限等,有些則是歷法推算中間的一些結(jié)果,如每日的白晝時(shí)間、定朔時(shí)刻、合朔時(shí)刻的月亮運(yùn)行速度等。這樣,完整地計(jì)算一次日食,推算者只需給出要推算的時(shí)間即可。
《宣明歷》的日食推算理論基本成熟,其算法大部分使用二次插值公式進(jìn)行構(gòu)造,但也有少數(shù)算法很復(fù)雜,目前還存在爭(zhēng)議?!缎鳉v》繼承了前面歷法的很多算法理論,尤其是《大衍歷》的一些推算方法和推算術(shù)語?!缎鳉v》自己創(chuàng)立的一些算法與前面歷法的算法在細(xì)節(jié)方面還沒有完美契合?!缎鳉v》保留了《大衍歷》“月行入四象六爻”的算法,但這個(gè)算法由于將一個(gè)交點(diǎn)月認(rèn)為均分成24份,導(dǎo)致實(shí)際推算的不便,并且在判斷有無日食和入食限時(shí)又沒有使用其中的結(jié)果,而是使用了其自創(chuàng)的三差算法,這個(gè)算法就沒有存在的必要了?!缎鳉v》求月亮改正時(shí)保留了《大衍歷》極其精細(xì)的算法,但其食分算法、食延算法和帶食日出算法都是根據(jù)線性插值而得到的,精度并不高,使得其高精度的精細(xì)算法可能會(huì)失去作用。此外,《宣明歷》的時(shí)差、氣差、刻差和加差算法設(shè)計(jì)仍然略顯復(fù)雜,還能看到自《皇極歷》以來分段設(shè)計(jì)算法的影子。
整體上《宣明歷》是一部成功的歷法,它保留了前歷的一些成熟的算法,加入了自己的一些創(chuàng)新。為傳統(tǒng)歷法的算法化進(jìn)程做出了貢獻(xiàn)。其后的《崇玄歷》在《宣明歷》的基礎(chǔ)上將算法化的做法發(fā)揚(yáng)光大。宋代歷法交食算法基本都是在《宣明歷》算法的基礎(chǔ)上改進(jìn)而成的。