導航:首頁 > 源碼編譯 > 獨特的歷演算法

獨特的歷演算法

發布時間:2022-05-31 04:57:52

⑴ 農歷的演算法是怎麼算的

農歷一年為12或13個月,每個月天數依照月亮圍繞地球運行周期而定,為29或30天,閏年為13個月,中國農歷年平年為353或354天,閏年為384或385天,平均每年約為365.2422天(即地球環繞太陽一周的時間)。

農歷基本上以19年為一周期,對應於公歷同一時間。如公歷的2001年5月27日、1982年5月27日和1963年5月27日這個日子,都是閏四月初五。

閏月加到哪個月,以農歷歷法規則推斷,主要依照與農歷的二十四節氣相符合來確定。自冬至開始,逢單數為節氣,逢雙數為中氣,如輪到一個月只有節氣沒有中氣,即為上一個月的閏月。農歷的閏月天數與正常月份天數一樣,為29或30天。

(1)獨特的歷演算法擴展閱讀

農歷是我國傳統歷法,又有陰歷、華歷、夏歷、漢歷、中歷等名稱。農歷並不是純陰歷,而是一種陰陽合歷,取月相的變化周期即朔望月為月的長度,加入干支歷「二十四節氣」成分,參考太陽回歸年為年的長度,通過設置閏月以使平均歷年與回歸年相適應。農歷是以陰歷(夏歷)為基礎,融合陽歷成分而成的一種歷法。所以我國的農歷從嚴格意義上說不應該叫陰歷,而是陰陽合歷。

農歷屬於一種陰陽合歷:其年份分為平年和閏年。平年為十二個月;閏年為十三個月。月份分為大月和小月,大月三十天,小月二十九天,其平均歷月等於一個朔望月。一年中哪個月大,哪個月小,由計算決定。

農歷是兼顧太陽、月亮與地球關系的一種歷法。陰歷不考慮地球繞太陽的運行,因而使得四季的變化在陰歷上就沒有固定的時間,不能反映季節。與陽歷年固定在365天或366天不同的是,陰歷年相比陽歷年在天數上有時會相差一個月;為了協調陰歷年與陽歷年之間的天數,於是便通過「置閏法」進行調整使陰歷月相總天數與陽歷回歸年總天數相適應。

⑵ 中國古代歷法的演算法,是怎麼算的呢

陰歷在天文學中主要指按月亮的月相周期來安排的歷法,以月球繞行地球一周(以太陽為參照物,實際月球運行超過一周。)為一月,即以朔望月作為確定歷月的基礎,一年為十二個歷月的一種歷法。而陰歷事實上只按月亮的月相變化來安排的歷法,所以每年比陽歷要少11天。

太陽歷又稱為陽歷,是以地球繞太陽公轉的運動周期為基礎而制定的歷法。現行的公元紀年法就是一種陽歷。

從《太初歷》開始,中國歷法經歷了五次大的改革,終於於明末引進西洋歷法,最終形成了直至今天仍然通用的《時憲歷》,近五百年的應用歷史足可見其精密程度。

⑶ 藏族天文歷算的演算法體系

藏歷規定一年為12個月,大月30天,小月29天。每一千日左右,便有一個閏月,用來調整月份和季節的關系。藏歷採用時輪制的紀年法,把天體分為十二宮,即:白羊、雙魚、金牛、摩羯、雙子、獅子、巨蟹、寶瓶、人馬、室女、天蠍、天秤。用十二屬相配五行紀年。以十二年為一小循環,六十年為一大循環,稱為一「繞炯」(即一時輪)。第一「繞炯」是從公元1027年開始的。1987年是第十七個「繞炯」的第一年。1991年藏歷稱為金羊年。這與漢地農歷的紀年法相似,屬相也一致。 通俗地講,天文歷算就是通過加減乘除等數學運算方法,把各種天體運動的方位、時間、面積等未知的東西,用數字的方式表達出來,並進行計算的一門自然科學。它是高原藏族人民在長期的生產活動中根據生產和生活的需要,不斷觀察日月星辰、冷暖氣候等天象和四時節氣、動植物生長變化等大自然現象,總結和積累起來的實踐經驗。
天文歷算學不僅包括了五大行星運動值的推算、閏月和重缺日的設置、日月食的預報等,還涉及到依據天文歷算學原理推算各地事宜的農耕牧作時機、物候、節令、人體脈相變化周期,特別是中長短期天氣預報等,而每年由自治區藏醫院天文歷算研究所推算編制的藏歷歷書基本包括了上述內容。因此,藏歷歷書是天文歷算研究成果的一種特殊表現形式。
自11世紀從印度傳入《時輪經》歷法以後.雖然藏地仍有多種多樣的紀年、年首設置及閏月設置方法在流傳,但藏族天文歷法的計算基本是依據時輪歷的。 藏傳時輪歷具有陰陽合歷的特徵。以月相圓缺的變化周期為一月,以季節變化的周期為一年;由於年、月的長度不成整數比例,除每個平年設置12個太陰月(即朔望月)以外,還要設置閏月來調整季節變化;同時,它又擁有一套獨特的原理和數據系統,以推算預報天象,日、月食和預報一天中28宿和五星的方位,以及預報日、一月食的各個項目等。
計算時間
藏傳時輪歷中計算時間的單位有7個:息(呼吸頃),6息為一分(漏分)60分為一刻(漏刻)60刻為一日,30日為一月,12個月為一年。其中「息」的測計方法為健康的壯年男子一呼一吸所需的時間,約等於一個太陽日的1/21600;一刻相當於24分鍾。
計算方法
藏傳時輪歷的計算方法也很獨特。它測定每個太明月為29.53058太陽日,但又規定每個太陰月為30個整太陰日。為了相應地配合太陽日與太陰日之間的日序。便出現了「閏日和差日」,月的大小就依據同日和差日來解決。有差日無閏日或差日多於閏日的月份為小月,每月29天;閏差相抵或無閏日無差日的月份為大月,每月30天。
閏日與基日根法則:藏族學者自己編著的《時輪歷精要》歸納出了簡明扼要的口訣,即「重者去大,缺者重小」。兩句話的第四個字表示天文歷算中給出的日曜(星期)序數,第三個字代表歷書中的日期,第四個字代表先後兩天太阻日結束時刻數值的大小。日曜次序出現重復者就要把太陽日序去掉一個,日曜次序出現短缺者就增補一個太陽日序,主要依據日曜序數來保持日期的連續性。
藏傳時輪歷法中最重要的內容是「五要素」和「三日算」。五要素或稱為「五括」:①曜(指太陰日結束的時刻);②日期(指日期與喜、善、勝、定、滿五名稱的配合);③星宿(指太陽日月宿,也就是當天太陽日開始時月亮所在之宿);④「會合「(由定日與月宿舍和而成);⑤「作用」(指作用的前後分)。①②③是歷算中的科學成分;④⑤與占卜之術有關。「三日算」指太陽日(從頭天天明到第二日天明為一完整太陽日)、太陰日(指月亮運行白分、黑分弧長的各1/15所需的時間長度)、宮日(指太陽通過一宮所需的135弧刻時間長度的1/30)。
以上的「閏日和差日」設置、五括和三日算,是藏傳時輪歷法計算的最根本基礎,被稱為「歷算要害」。其中「三日算」在推算五星運行時,往往3種演算法同時進行,起到相互復核的作用。
各種名稱比例關系
時輪歷還有3種年、月、日,各有太陽、太陰、宮的名稱,其比例關系是:
1太陽年=12太陽月=360太陽日
1太陰年=12太陰月=360太陰日
1宮年=12宮月=360宮日
65宮日=67太陰日
64太阻日≈63太陽日
時輪歷中所說的宮年就是現代所說的恆星年。在時輪歷中恆星年與回歸年不分,只用宮年。在實際推算中,作用最大的是宮年、太陽日、太陰月和太陰日四要素,而時輪歷中的太陽年和太陽月在天文學上沒有什麼實際意義。
假想天體
時輪歷中還有兩個假想的天體,即羅睺、劫火(羅睺尾)。再加長尾彗星。它們也稱為「曜」,共為「10曜」。五星的各個周期同現代科學測出的數據相同或近似。時輪歷中視羅睺與其他天體一樣,有自己的運行周期,不同的是只有數而無「象」,是個「隱曜」。它的運動周期為30個太陰月,合計6792.04太陽日,已相當精確(今測為6793.460日)。羅睺的方位以黃經表示,以周長27宿相減,所得結果在時輪歷中稱為「羅睺頭」,與之相對的稱「羅睺尾」,相當於天文學上的黃白升交點和降交點。時輪歷中的長尾彗星就是九曜中的計都。
日、月食推算過程
推算過程是:先由積月除以羅睺的周期,商余化成日數,然後若推算日食加30日,推算月食加15日,再乘以羅睺每日運行的度數得到羅睺頭數值(在此數值上以半周相加,則得到羅睺尾的數值);接著求出太陽、月亮的黃經,以太陽、凡亮的黃經與羅睺頭、尾數值中最為接近者相減;最後以所得差數來判斷有無日、月食。

⑷ 萬年歷 演算法(得知 陽歷 算出 農歷)

// Yuna_2006_10_16
// A program of a celinder
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

// the use of setw
#include <iomanip>
using std::setw;

#define BEGINYEAR 2000 // the year i use to begin
#define BEGINDAY 6 // 2000`s first day
const int aiMounth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // everymounth`s days

// the fuction i call
int GetBeginDay( int, int ); // Get the first day of the mounth
int GetDays( int, int ); // Get the number of the days in a mounth
void PrintTitle(); // print the title
void PrintDate( int, int ); // print the date
int GetDaysOfaYear( int ); // get the number of days of a year

// the main begin here
int main()
{
int iYear, iMounth, iBeginDayOfaWeek, iDays;

// prompt and get the paramters i need
cout << "Please Input The Year Of The Date:" << endl;
cin >> iYear;
cout << "Please Input The Mounth Of The Date:" << endl;
cin >> iMounth;

// if Input a wrong num
if( iYear <= 0 || iMounth <= 0 || iMounth > 12 )
{
cout << "Input Error!" << endl;
return 0;
}

// do what you want me to do
iBeginDayOfaWeek = GetBeginDay( iYear, iMounth );
iDays = GetDays( iYear, iMounth );
PrintTitle();
PrintDate( iBeginDayOfaWeek, iDays );

// the fuction end here
return 0;
}

int GetBeginDay( int iYear, int iMounth )
{
int iResult;
int iDifference = iYear - BEGINYEAR; // i want to know if input if larger than my begin year
long lSumOfDays = 0;

if( iDifference >= 0 ) // if input is larger than my begin year
{
for( int i = BEGINYEAR; i < iYear; i++ )
lSumOfDays += GetDaysOfaYear( i );
for( int k = 1; k < iMounth; k++ )
if( 2 == k && ( ( iYear % 4 == 0 && iYear % 100 != 0 ) || iYear % 400 == 0 ) )
lSumOfDays += 29;
else
lSumOfDays += aiMounth[k-1];
iResult = ( int )( ( lSumOfDays + 6 ) % 7 );
} // end the if part of if/else
else // if input is smaller than my begin year
{
for( int j = iYear + 1; j < BEGINYEAR; j++ )
lSumOfDays += GetDaysOfaYear( j );
for( int m = iMounth; m <= 12 ; m++ )
if( 2 == m && ( ( iYear % 4 == 0 && iYear % 100 != 0 ) || iYear % 400 == 0 ) )
lSumOfDays += 29;
else
lSumOfDays += aiMounth[m-1];
iResult = ( int )( ( lSumOfDays + 1 ) % 7 );

// change the code
switch( iResult )
{
case 1:
iResult = 6;
break;
case 2:
iResult = 5;
break;
case 3:
iResult = 4;
break;
case 4:
iResult = 3;
break;
case 5:
iResult = 2;
break;
case 6:
iResult = 1;
break;
default:
break;
} // end switch inside
} // end else part of if/else

return iResult;
}

int GetDays( int iYear, int iMounth )
{
if( 2 == iMounth && ( ( iYear % 4 == 0 && iYear % 100 != 0 ) || iYear % 400 == 0 ) )
return 29; // if the year is a leap year
return aiMounth[ iMounth - 1 ]; // normal year
}

void PrintTitle()
{
cout << setw(10) << "Sunday" << setw(10) << "Monday" << setw(10) << "Tuesday"
<< setw(10) << "Wednesday" << setw(10) << "Thursday"
<< setw(10) << "Friday" << setw(10) << "Saturday" << endl;
}

void PrintDate( int iBeginDayOfaWeek, int iDays )
{
// format the output
for( int i = 0; i < iBeginDayOfaWeek; i++ )
cout << " ";

// out put the date
for( int i = 1; i <= iDays; i++ )
{
if( ( 0 == ( i + iBeginDayOfaWeek - 1 ) % 7 ) && i != 1 )
cout << endl; // if the day is Sunday
cout << setw(10) << i;
}
cout << endl;
}

int GetDaysOfaYear( int iYear )
{
if( ( iYear % 4 == 0 && iYear % 100 != 0 ) || iYear % 400 == 0 )
return 366; // if the year is a leap year
return 365; // normal year
}

// 先輸入年份,然後輸入月份,就可以得到該年該月的的日歷了。
// 該日歷從公元1年開始計算到公元2147483647年(理論上可以算出,但是所
// 花時間太長)。
c語言寫的萬年歷

⑸ 藏族天文歷算的藏醫和藏歷

在西藏,藏醫和藏歷是緊密聯系的。8世紀,藏醫學家宇陀寧瑪·元丹貢布的藏醫學著作《四部醫典》的部問世,使藏醫學形成了較完整的理論系統。由於藏醫認為隨著季節的變化,人體五臟中的氣和血液循環狀況也有所不同,所以藏醫十分重視觀察星、雲、風、湖水和鳥類的變化。
按藏族慣例,天文歷算的業務設在藏醫院。藏醫院里薈萃著一批學者。每年的歷書都是前一年由藏醫院里的學者測算的。
藏歷的正式使用,是在公元1027年開始的,並流行至今。本來,公元前一世紀藏族便有了自己的歷演算法,那就是以月亮的圓、缺、朔、望來計算月份的苯教歷法,那時的新年初一,相當於現在的藏歷十一月一日。有一本古老的歷算書叫做《紡織老人月算》,詳盡地總結了當時藏族人民豐富的生產經驗和天文歷算知識。後來,文成公主進藏,帶來了許多經書典籍,其中天文歷算的書籍對原始藏歷的完善和發展,起了重要的作用。這時,新年日期的確定,已從月亮的亮度進步到以星辰為主要依據,即以鬼星的亮度、位置為標准。但是,新年還是現在藏歷的十一月一日。後來,原始藏歷吸收了漢地的歷算技術,逐漸完善成為今天的藏歷。
藏歷規定一年為12個月,大月30天,小月29天。每一千日左右,便有一個閏月,用來調整月份和季節的關系。藏歷採用時輪制的紀年法,把天體分為十二宮,即:白羊、雙魚、金牛、摩羯、雙子、獅子、巨蟹、寶瓶、人馬、室女、天蠍、天秤。用十二屬相配五行紀年。以十二年為一小循環,六十年為一大循環,稱為一「繞炯」(即一時輪)。第一「繞炯」是從公元1027年開始的。1987年是第十七個「繞炯」的第一年。1991年藏歷稱為金羊年。這與漢地農歷的紀年法相似,屬相也一致。
藏歷不僅預報下一年度是否風調雨順,是否有旱災、雪災或地震,而且連某日有雨,每一天的吉凶都一一標明。據說,那曲藏醫院預報1986年間藏北的三次地震,大體時間和方位都准確。主要是根據天象預報的。天象,是一尊大佛形態。巨佛象徵地球,巨佛姿勢有象徵意義,假如巨佛站著,就表示有地震、颶風和瘟疫等;巨佛坐著,人間就平安。

⑹ 儒略歷的歷法演算法

《儒略歷》以回歸年為基本單位,是一部純粹的陽歷。它將全年分設為12個月,單數月是大月,長31日,雙數月是小月,長為30日,只有2月平年是29日,閏年30日。每年設365日,每四年一閏,閏年366日,每年平均長度是365.25日。《儒略歷》編制好後,儒略·愷撒的繼承人奧古斯都又從2月減去一日加到8月上(8月的拉丁名即他的名字奧古斯都)使8月變成大月,又把9月、11月改為小月,10月、12月改為大月。
《儒略歷》比回歸年365.2422日長0.0078日,400年要多出3.12日。從公元325年定春分為3月21日提早到了3月11日。1500年後由於誤差較大,被羅馬教皇格里高利十三世於1582年進行改善與修訂,變為格里歷(Gregorian calendar),即沿用至今的世界通用的公歷。

⑺ 農歷歷法規律

正如樓主所說:我國農歷的確是一門古老而嚴密的科學。但不能說是統計學。這是一套建立在長期天文觀測基礎之上,經過嚴密推算而產生的獨特歷法。
在我國使用公歷之前,是沒有什麼對應日期可言的,唯一的驗證指標就是季節。如農歷新年總是在冬末春初,故我國的新年又稱春節。
你觀察很細,閏月現象讓你很感興趣,並且產生了強烈的研究慾望,正好我也喜歡,就簡單地交流幾句吧。
一、我國的農歷其實是陰歷合歷,因為它依據回歸年周期安排年份,同時又按月相變化確定月份,更依據24節氣調節年的長度(設置閏月)以保證月份與季節的大致對應關系。
二、我國天文學家把每年春節後第一次晝夜等長的那一天叫做「春分」,連續兩次春分之間的時間叫做一年。長期觀測表明,一年的時間為365.2422天(天文學上稱為回歸年)。又將太陽在星空中巡天一周的軌跡(黃道)分為24份,每份15度。以春分時太陽所在的位置稱為「春分點」,每隔15度依據物象分別取了一個形象直觀的名字,如清明、穀雨、冬至等,這就是24節氣。
三、常言說「月有陰晴圓缺」,這里的圓缺就是指月相的周期性變化。月亮有時將整個亮面對著地球,我們就看到了一輪滿月,有時則會是一個月牙,有時又完全看不到她。這樣的變化周期稱為朔望月,長期觀測表明,一個朔望月的平均長度為29.5306天。
四、一般情況下,以12個朔望月為1年,長度為354.3672天,比一個回歸年少10.875天。如果不加調整,每三年大約就要少一個月,不到18年就會相差半年,從而出現季節顛倒。因此,我國古代天文學家就使用了設置閏月的方法對這種可能出現的季節混亂加以調整,使農歷日期與季節保持盡可能的對應關系。
五、設置閏月就是在必要時在某一個農歷年中多加一個月,此法稱為「置閏」,多出來的這個月叫做「閏月」,含有閏月的年份也稱為「閏年」。
六、值得稱道的是,為了最大限度地保證月份與季節的對應關系,我國農歷不是等農歷年份與回歸年的差別攢夠了一個月的時間才置閏,而是按照24節氣的交節日期逐月推算,適時安排閏月(以保證冬至永遠只出現在農歷十一月),從而提高了歷法的科學性。
七、閏月的出現沒有簡單的規律可循。這是因為由於地軸的進動,使得春分點逐年西移,而地球的軌道是橢圓而非正圓,這就造成了以春分點為參考的回歸年每年的長度都不相同。同時,由於24節氣交節時刻是地球在公轉軌道上的位置(而不是地月質心位置)確定的,這就使得兩個節氣之間的時長也顯得雜亂無章。這就使得「19年7閏」等所謂的置閏規律只是一個大概,而非真正的規律。
八、閏月只能依據日、地、月三者的位置關系逐月推算才能安排,而沒有簡單的規律可循。要設計出能夠計算閏月的程序,至少要扎實掌握以下幾方面的知識:物理、天文、高等數學、地理、歷史等。當然,計算機技術也應當相當熟練。
先說這些吧,祝你成功!

⑻ 天文歷算到底怎麼個演算法

隋唐時期在天文歷法方面,取得了顯著的成就。隋代著名的天文學家劉焯編制的《皇極歷》,運用等間距二次內插法計算日月的運行,歲差的准確值高於歐洲;他還提出了測量子午線長度的設想,否定了 影千里差一寸 的傳統說法。唐王希明編輯而成的七字長歌《步天歌》廣為流傳,極大地促進了天文知識的普及。唐代徐昂的《宣明歷》,測得黃道和赤道交角為23°u65299X5′,與現代理論數值僅差0。5′左右。開元時期僧一行制訂了《大衍歷》,為後代歷法家編歷提供了固定的模式。一行還是實際測量子午線的創始人,並測得子午線每一度長為351。27唐里。
相關知識鏈接:
公元581年至960年,這380年是中國封建制度繼續發展並達到繁榮昌盛的隋唐五代時期,亦即中國封建社會的第二個鼎盛期。隋唐社會宏大的格局、開放的氣勢、壯闊的場面,為歷朝歷代所無法比擬。在當時的世界上,中國處在發展的前列,是最文明先進、最繁榮發達、最富庶強大的國家。
首先,社會制度先進。公元5世紀至11世紀,是世界中世紀的早期,大致相當於中國的南北朝隋唐五代時期。這時,西歐直至北非、中亞、東亞,都剛剛進入封建社會,比起中國落後了一個社會發展階段。
其次,生產發展水平高。封建社會的主要經濟生產部門衣業,在隋唐時期有了較大的發展。農業生產工具鋤、鏟、鐮、犁都有大的改進。水利設施得到修復和新的開鑿,而更為廣泛和完善。
第三,長期統一。自開皇九年(589年),隋重新統一以後,隋唐時期的中國是當時世界上唯一長期保持統一的大國。分裂割據只佔短暫的時間。中國是當時世界上最強、最大的國家。
第四,文化繁榮發達。隋唐時期,採取開放政策,不僅大量吸收外域的有用文化,而且將中國繁榮發達的傳統文化傳播到世界各地。中國傳統的儒學文化得到了整理,道教文化在政府扶植下有了發展,從印度傳入的佛教,受到中國傳統文化禮俗的巨大影響而中國化了。在隋唐時期佛教發展達到興盛的頂峰,佛學水平超過了印度,並使中國取代了印度成為世界佛教的中心。文化政策相對開明,文禁較少,又使這時的科學技術、天文歷算進步突出,文學藝術百花齊放、絢麗多彩,詩、詞、散文、傳奇小說、變文、音樂、舞蹈、書法、繪畫、雕塑,都有巨大成就,並影響著後世與世界各國。
第五,世界經濟文化交流的中心。文明先進而富庶強大的中國是當時世界,特別是亞洲各國經濟文化交流的中心。隋唐時期的中國與世界的聯系進一步加強,長安成為當時的國際大都會,在長安有各國使臣、商人,有胡人所開的店鋪。漢唐都有中西交流的絲綢之路,而漢代中外直接交往還只限於中亞、印度,最遠的是班超副使甘英到達波斯灣。

⑼ 中國歷法的計算要點

為了推算每年的歷譜,首先要定一個計算起點,叫做歷元。中國古代歷法大多數取下列這樣的理想時刻為歷元:某年十一月甲子日的夜半,它正好是朔和冬至,而且又是月過近地點(即月行速度最快的點)的時刻,等等。由於各種歷法的數據不同,所以它們推得的理想時刻也各不相同。不過這樣的理想時刻通常離開歷法行用的年份都十分遙遠。這種歷元稱為上元(見上元積年)。
設a為一回歸年時間,b為一朔望月時間,c為一近點月時間,單位均為「天」。又設y為從上元起到所求年的累計年數。則ay就是從上元起到所求年的冬至的全部時間。因為干支紀日以60天為一周,所以用60去除ay,所得余數r1,就是所求年的冬至時刻到前面一個甲子的夜半的全部時間。這個時間的天數部分叫做大余,不足一天的零數部分叫小余。通常歷法都規定,大余「命甲子算外」,即以甲子日為0,乙丑日為1,等等。因此,根據大余的數字,就可以知道所求年冬至日的干支日名。有的歷法「命甲子算上」,則應以甲子日為1,乙丑日為2,等等。還有少數歷法,如北宋的《紀元歷》,不選甲子日,而選己巳日為上元,命己巳算外,則大余就以己巳為0算起,庚午為1,等等。小余就是從夜半起算到發生冬至這瞬間的時間,可以把它按十二時辰制或百刻制等時刻制度(見漏刻),化成時刻。從r1累加一氣的時間a/24,就得冬至以後各氣的干支日數及時刻。
上述r1的演算法,數學上習慣用一個算式來表達:ay≡r1(mod60)。這種算式叫一次同餘式。仿此,可以列出其他的一次同餘式:ay≡r2(modb),ay≡r3(modc)。r2就是所求年冬至離開十一月平朔的時間間隔。r3則是所求年冬至離月亮上一次過近地點的時間間隔。r1- r2就是十一月平朔離上個甲子日夜半的時間。也和冬至的情況一樣,它的整數部分代表甲子日以來的干支日數,零數部分則是從夜半算起到發生平朔的時間。
設這個時間為t0一般歷法都給出一份太陽運動表,一份月亮運動表。從太陽運動表,根據所求的十一月平朔在二十四氣中的位置(或者,十一月平朔在大雪氣後,相距時間為 ;或者,如若,即十一月平朔在大雪氣前,在小雪氣後,這時,離小雪的時間為),使用內插法可以推算因太陽運動不均勻而引起的定朔改正數Δts;從月亮運動表,根據所求的十一月平朔在一個近點月周期中的位置(即r3),也是用內插法,可以推算因月亮運動不均勻而引起的定朔改正數Δtm。於是,十一月定朔t=t+Δts+Δtm。t>1,定朔在平朔的次一日;t<0,定朔在平朔的前一日;0清代以後採用第谷體系和開普勒橢圓面積定律。定朔的計算也就改用歐洲的幾何學方法。
十二個朔望月為一個民用歷年。它和一個回歸年有一個差數r,r=α-12b,約為10~11天。不上三年,差數積累就超過了一個月,這時就要在這個歷年內增加一個閏月,以免和回歸年脫節。漢《太初歷》以來規定了無中氣之月為閏月的規則,這也等於規定了每個中氣都要在固定的月份里,如冬至在十一月,大寒在十二月,雨水在一月,等等。在不同的歷法里,月的名稱可以不同(見三正),但一定的中氣必須在一定的月份里,這條原則在《太初歷》以後的各種歷法都是一樣的。這就使陰歷成分和陽歷成分結合得更加緊密。一般來說,如r2>(b-r),則規定這年有閏。r/12,則是兩個氣的時間比一個朔望月長的差數。將這個數累加到r2上,一當這個累加的和數大於b的時候,就是中氣超過月份的時候,這時,就把被超過的月份定為閏月。
中國古代有的歷法不用前述特殊時刻的上元,而用近距取元,即取某個已知r1、r2、r3值(設為a1、a2、a3)的年的冬至時刻為歷元。例如《授時歷》就是以歷法制定的那年的冬至時刻為歷元。它把a1稱為氣應,a2稱為閏應,a3稱為轉應。這時,一次同餘式組改為:
ay+a1≡r1(mod60),
ay+a2≡r2(modb),
ay+a3≡r3(modc)。
以上是就世界各國歷法最基本的內容,即按照推算民用歷譜,安排歷日的問題來說的。但是中國古代歷法還有更豐富更廣泛的內容。它包括日、月、五星的運動和位置的計算;昏、旦中星和時刻的測定;日、月食的預報等等。就某種程度來說,中國古代的歷法就是一種編算天文年歷的工作。它包括中國古代天文學的許多重要內容。它的發展是中國天文學史的一條主線。

閱讀全文

與獨特的歷演算法相關的資料

熱點內容
畢業設計單片機模擬 瀏覽:835
阿里ai雲伺服器 瀏覽:433
小程序雲伺服器可以綁個人賬戶嗎 瀏覽:727
王者榮耀體驗服ios怎麼登陸安卓的 瀏覽:285
客戶想要的與程序員理解的 瀏覽:669
矽谷一普通程序員的一天 瀏覽:456
演算法實現兩個集合合並 瀏覽:74
班長命令什麼意思 瀏覽:139
51單片機c語音 瀏覽:733
悅翔v3壓縮比 瀏覽:714
oppo怎樣修改手機里的文件夾名稱 瀏覽:218
PHP圖片上傳替換 瀏覽:139
androidtv桌面 瀏覽:810
miui10版本怎麼隱藏app 瀏覽:52
阿里雲伺服器怎麼輸入命令 瀏覽:426
如何通過伺服器連接網路 瀏覽:664
一張大事年表pdf 瀏覽:396
雞兔同籠java編程 瀏覽:611
應屆生php程序員簡歷 瀏覽:652
格力三匹壓縮機電流測哪根線 瀏覽:77