相關基礎知識
現行的公曆即
格里曆,是一種太陽曆。
乾支紀日法自古已有,它使用
天干地支記錄日序,日乾支即是日柱。而求解公曆任一日的日柱是由來已久的難題。為了解決這一難題,作者總結出《高氏日柱公式》。由於上述問題涉及周易術學,因此歷來的
易學者們都使用萬年曆,來查詢某日的日柱。雖然有許多研究者,提出了許多解決方法,比較出名的就是張氏日柱公式,但都由於方法繁瑣、難以實用,並不能從根本上解決日柱求解問題。而《高氏日柱公式》根據公曆和
乾支紀年法的具體特點,首次採用插入世紀常數和月基數的數學方法,使得日柱的求解在較小的數量級內進行,極大地簡化了求解日柱的過程,實現了編寫計算
代碼的可行性,並且能夠運用於
心算。真正實現了“不查萬年曆,日柱早知道”的夢想,徹底解決了日柱求解問題。
(一)公曆的內容與沿革
標準的公曆即1582年頒布的格里曆。它繼承了
儒略曆設定大、小月的方法,全年分為12個月。其中,1月、3月、5月、7月、8月、10月、12月是大月,長31日,4月、6月、9月、11月是小月,長為30日,只有2月平年是28日,閏年29日;並且在儒略曆的基礎上改進了閏年的方法,規定凡公元年數被4整除的年份是閏年,但當公元年數是整百整千的“
世紀年”時,必須能被400整除的年份才是閏年。平年設365日,閏年為366日。
(二)乾支紀日法的內容和由來
乾支紀日法是漢民族使用天干地支記錄日序的方法,是農曆的一部份,也是歷代曆書的重要組成。乾支是天干、地支的合稱,天干有十:甲、乙、丙、丁、戊、己、庚、辛、壬、癸;地支有十二:子、醜、寅、卯、辰、巳、午、未、申、酉、戌、亥。乾支紀日法使用乾支依次組合的六十甲子來記錄日序,從甲子開始到癸亥結束,六十天為一周,循環記錄。日乾支即是日柱。
乾支紀日法從
商朝開始使用,甲骨文字中已有乾支
象形。現已考證:
春秋以來的
乾支紀日從未錯亂過。乾支紀日法是商朝曆法的最大成就,是現今已知世界上最長的紀日法,也是中國一份珍貴的科學文化遺產。
(三)乾支表
把乾支依次組合正好六十為一周,周而復始,循環記錄,這就是俗稱的“乾支表”。乾支表的最大作用就是直觀地列出
六十甲子及其對應序列數,這在實際運用中十分重要。使用乾支紀法來表示四柱,即年柱、月柱、日柱、時柱。四柱就是俗語所說的生辰八字。例如:1949年10月1日14時,即可用乾支紀法表示為:己丑年 癸酉月 甲子日 辛未時。則當時出生的嬰兒的生辰八字就是己丑 癸酉 甲子 辛未。
現列十天干、十二地支和乾支表如下:
高氏日柱公式
(一)公式
(二)符號意義
r:日柱的母數,r 除以60的
餘數即是日柱的乾支序列數;
u:s 除以4的餘數;
m:月數,“[ ]”內取整數部分;
d:日期數;
x:世紀常數
(三)世紀常數
世紀常數x是高氏日柱公式中重要的數值。高氏日柱公式以世紀為運算區間,僅取公元年數後兩位代入運算,極大地簡化了日柱求解過程。以世紀為區間進行運算時,每個世紀的日柱初始值必然不同,設日柱初始值為世紀常數x。
關於世紀常數的性質和意義,作出以下兩點說明:(1)每世紀的第一年是從“0”開始的,故整百整千的“世紀年”即為每世紀的第一年。即例如:1900年應視為20世紀的第1年,其公元年份後兩位為零,即s=0。
(2)世紀常數x即為每世紀第一年3月1日的的日柱序列數減1(由於月數改良後,將每年3月視為本年的起始月),即例如:21世紀的世紀常數即為2000年的3月1日的日柱序列數減1,而2000年3月1日是戊午日,“戊午”的序列數是55,故x=55-1=54(由於乾支計數的60循環,而54-60=-6,從計算角度來看54與-6是等價的)。
現將17世紀至26世紀一千年間的世紀常數x,對應列表如下:
表2-1.1
表2-1.2
(四)月數
月數m,即為一年中各月的月份數。
為了簡化閏日變數的複雜性,增強月基數的規律性,採用將閏日置後的方式進行求解。由於所有的閏日都加設在每個閏年的2月末尾,故可以採用將2月視為上一年的末月,即"14月"的方法,以消除閏日在日柱計算中的複雜插入。相應地,須將1月視為上一年的"13月",而將每年的3月份視為本年的起始月。
需要申明的是——公式中的符號“m”不再表示月基數,而表示月份數。直接輸入月數m,通過函式運算輸出“月基數”。將月基數巧妙地包含在運算之中,代替了對月基數表的識記。即:(“[ ]”內取整數部分)[4]
改良公式
1月和2月可以通過下列公式轉換,〈〉 取余, 這樣就不用考慮是否是1月或者2個月份了.
u和x 做同樣的修正
貼上一個exce公式, AB3為年,AC3為月,AD3為日. 結果 mod 60 即為r.
=INT(MOD(AB3-INT((MOD(9-$AC3*11,12)+3)/13),100)/4)*6+5*(INT(MOD(AB3-INT((MOD(9-$AC3*11,12)+3)/13),100)/4)*3+MOD(MOD(AB3-INT((MOD(9-$AC3*11,12)+3)/13),100),4))+30*(MOD(AC3,2)+1)+INT(((MOD(9-AC3*11,12)+3)*3-7)/5)+AD3+44*(INT((AB3-INT((MOD(9-$AC3*11,12)+3)/13))/100))+INT(INT((AB3-INT((MOD(9-$AC3*11,12)+3)/13))/100)/4)+9
日柱=MID("甲乙丙丁戊己庚辛壬癸",MOD(r-1,10)+1,1)&MID("子醜寅卯辰巳午未申酉戌亥",MOD(r-1,12)+1,1)
公式套用舉例
例1:計算2008年的2月29日的當日日柱,在計算中應將這天視為2007年的14月29日。則有s=7;u=3;m=14;d=29;x=54,將各項數據代入高氏日柱公式可得:
r=1×6+5×(1×3+3)+30×1+7+29+54=156
故156除以60餘數為36,即當日日柱為己亥。
例2:計算1949年10月1日即建國當日的日柱,則有s=49;u=1;m=10;d=1;x=9,將各項數據代入高氏日柱公式可得:
r=12×6+5×(12×3+1)+30×1+4+1+9=301
故301除以60的餘數為1,即當日的日柱為甲子。
例3:計算2008年5月12日即汶川地震當日的日柱,則有s=8;u=0;m=5;d=12;x=54,將各項數據代入高氏日柱公式可得:
r=2×6+5×(2×3)+30×0+1+12+54=109
故109除以60的餘數為49,即當日的日柱為壬子。
例4:計算1895年4月17日即馬關條約簽訂當日的日柱,則有s=95;u=3;m=4;d=17;x=25,將各項數據代入高氏日柱公式可得:
r=23×6+5×(23×3+3)+30×1+1+17+25=571
故571除以60的餘數為31,即當日的日柱為甲午。
例5:計算2015年的1月10日的當日日柱,在計算中應將這天視為2014年的13月10日。則有s=14;u=2;m=13;d=10;x=54,將各項數據代入高氏日柱公式可得:
r=3×6+5×(3×3+2)+30×0+6+10+54=143
故143除以60餘數為23,即當日日柱為丙戌。
結論與擴展
《高氏日柱公式》的成功之處在於:以世紀為運算區間,並引入了世紀常數這一重要的概念。使得日柱的求解在三位數以內進行,極大地簡化了求解日柱的過程,實現了編寫計算代碼的可行性,且能夠運用於心算。是日柱求解方法的一大創舉和進步。月基數的設定也在很大程度上簡化了求解日柱的過程。經過進一步研究,作者發現世紀常數和世紀數之間也存在著對應關係,其關係公式(輔助公式)如下:
說明:N為該年所屬世紀數,X為世紀常數的母數。X 除以60的餘數即為世紀常數
。當求出的世紀常數數值較大時,為了簡化計算,可以利用乾支計數的循環特性進行等價替換。
事實上,高氏日柱公式的效力(即適用時間範圍)是與格里曆相同的。而標準的格里曆頒布時間為1582年,並對此前的儒略曆進行了日期刪減,導致了階段日期的不連續。也就是說,格里曆的在1582年是沒有效力的。簡言之,即使從文獻上查得,例如:1492年10月12日哥倫布發現新大陸的日期,也無法用公式準確計算出當日的日柱。當然不是說無法得知,而是需要對方程參數進行適應性修改(重複的11天),蔡勒公式也受此影響。
參考文獻
[1]格里曆.中文百科_全球最大中文百科全書[引用日期2015-11-5]
[2]戴興華、楊敏.天干地支的源流與套用.氣象出版社,2006年
[4]蔡勒.蔡勒公式.中文百科[引用日期2015-11-5]