閏年的計算問題
閏年那些事兒
閏年(Leap Year)是為了彌補因人為曆法規定造成的年度天數與地球實際公轉週期的時間差而設立的。補上時間差的年份為閏年,這一年的2月有29天,其他年份都是平年,2月則只有28天。
判斷規則:公元年數可被4整除為閏年,但是整百的年數必須被400整除方為閏年,用程式說話就是:
bool Is LeapYear(int year)
{
return ((year%4==0&&year%100!=0)||(year%400==0));
}
理解是記憶的基礎,否則記了還是會忘掉,下面就說說為什麼會有這樣的判斷規則呢?
地球的公轉週期是365.2422個太陽日,按這個天數,地球圍繞太陽公轉一週後,並不是整整365個晝夜。因此,如果按照每年365天算,則每到四年,地球就和四年前的位置差了近一天。這一天的公轉距離需要閏一日來補足,因此一般每四年就會出現一個閏年。 0.2422 * 4 = 0.9688 < 1,因此每閏一次都會有點矯枉過正,造成了0.0312天的誤差。每100個閏年(即400年)會造成3.12天的誤差,為了減掉這個誤差,人們又規定,在第25個、第50個、第75個“閏年”處不閏(減掉多餘的3天),而在第100個閏年處保持閏年。
所以,才有了這樣的計算規則:
Step1:如果年數可以整除400,則必定是閏年。
Step2:如果年數不能整除100可以整除4 (刨除第25/50/75個閏年),則是閏年。
按照這個規則,1900年不是閏年,而2000年是閏年,2100年則不是閏年。
然而,這個定義還是沒有徹底的解決問題,因為還有0.0012天的誤差沒有完美地解決,到第3333.33年還會出問題,這個問題對於目前的我們來說,太過於久遠,那麼,就把它交給那個時代的人去解決吧!
相關文章
- IT中的閏秒問題
- JAVA關於判斷年份是閏年還是平年的問題Java
- 從千年蟲,閏年蟲,閏秒蟲看測試資料設計
- 雲端計算的安全問題
- 精度計算問題
- JavaScript 判斷閏年JavaScript
- JavaScript判斷閏年JavaScript
- MySQL 計算生日問題MySql
- Oracle關於week的計算問題Oracle
- pg 中日期型的計算問題
- shell 計算時間差的問題
- 關於日期計算的問題 (轉)
- Python判斷閏年Python
- 雲端計算40個問題
- [MySQL] 查詢5天之內過生日的同事中的跨年問題以及閏年2月29日問題的解決過程MySql
- 雲端計算論文讀後感【3】- 雲端計算的問題
- getDate方法的妙用(js判斷閏年)JS
- 雲端計算的安全問題是“偽命題”嗎?
- 一個浮點數計算的問題
- 雲端計算潛在的五個問題
- 關於vue的使用計算屬性VS使用計算方法的問題Vue
- 基於關鍵詞及問題主題的問題相似度計算
- C語言:判斷閏年C語言
- 閏秒為什麼會導致linux出現問題Linux
- OpenStack 多臺計算節點時的問題
- 計算水仙花數運算超時問題
- 函式實現閏年判斷函式
- java經典小程式:1、閏年Java
- C++判斷是否為閏年C++
- 程式設計師面試常問計算機網路問題程式設計師面試計算機網路
- JavaScript中解決計算精度丟失的問題JavaScript
- Oracle遷移到PPAS(PostgreSQL)時的日期計算問題OracleSQL
- c語言平年與閏年---@顏麓C語言
- C#--判斷某年是否是閏年C#
- OpenStack及雲端計算(面試)常見問題面試
- 計算機網路面試問題總結計算機網路面試
- 【1】Embarrassingly Parallel(易平行計算問題)Parallel
- 移動邊緣計算中的安全問題現狀