2010年3月5日 星期五

閏年

PS3晶片中計算閏年的法則有誤,會誤認2010年是閏年,以為過了2月28號應該要為2月29號。這個看來不起眼的錯誤竟引起了上週全球規模的PS3大當機事件。

我沒有PS3,也不是要談這次當機的事件,只是這件事讓我想起,多年前的某一年我突然領悟到計算閏年的法則可以讓我精確回答一年究竟等於多少天這個問題,而且精確度可以到小數點後第三位。

計算閏年的法則有三條。第一、西元年逢四的倍數為閏年。第二、前述規則的例外是西元年逢100的倍數不為閏年。第三、前述規則的例外是西元年逢400的倍數為閏年。

規則一告訴我們一年應有365又1/4天,每逢四年才必須有2月29日來解決這每四年會多出的一天。規則二又告訴我們一年的天數應比365又1/4天略少,這少掉的部份每100年就可累積成一天的量,所以一年的天數應為365+1/4-1/100。同理,規則三告訴我們更精確的答案應是365+1/4-1/100+1/400。用計算機算一下,這個值為365.2425,或者說是365天又5小時49分12秒。

Google一下網路上的資料可以查到,製曆用的「回歸年」(原來年的定義也有三種)定義一年約等於365日5小時48分46秒,和上述推算僅有26秒的誤差,約等於0.00028日。

這也等於說, 這三條計算閏年的法則也有誤差。這點誤差累積到約3571年後會多出一天,那時候也許會多出一條規則來少一次閏年。

沒有留言:

張貼留言