dポイントプレゼントキャンペーン実施中!

ある年の前年までの日の総和を求める際に

365 * (y-1) + (y-1) / 4 - (y-1) / 100 + (y-1) / 400    ※ y:入力された年


というプログラムがかかれていたのですが、この文をどう解釈すればいいでしょうか。人に説明できるよう詳しく教えていただければうれしいです。

A 回答 (3件)

 起点はいつですか。


 yが1のときこの式の値がゼロになることから、起点を西暦1年とすると、グレゴリオ歴に切り替えられるまでの間はユリウス暦で数えなければならないし、グレゴリオ暦採用以降の年までの日数も補正する必要があるので、この式では正確な日数は求まりません。

 とはいっても、グレゴリオ暦採用以降の2つの日付の間隔を求めるときはそれぞれの日付についてのこの式の値の差でひとつの日付の前年の末日までの日数と他方の日付の前年の末日までの差は正確に得られます。

 ユリウス暦では、4で割り切れる年はうるう年とするのですが、これではうるう年が多すぎるので、グレゴリオ暦では100で割り切れる年は平年に戻し、それではうるう年が少なくなりすぎるので400で割り切れる年をうるう年にします。
 西暦1年からグレゴリオ暦で数えるとすれば、割り算の商を切り捨てで求めることによって、(y-1) / 4 - (y-1) / 100 + (y-1) / 400 で前年までのうるう年の回数を正確に計算できます。
    • good
    • 0
この回答へのお礼

少し、説明不足だってみたいですね。これからは気をつけたいと思います。ありがとうございました。

お礼日時:2011/06/22 17:55

4の倍数の年はうるう年である。


ただし100の倍数の年はうるう年ではない。
ただし400の倍数の年はうるう年である。

を1文にしてあるだけでは。


あと細かい話をしますと、
ユリウス暦とグレゴリオ暦の切替えの際に10日くらい日付が10日くらい吹っ飛んでいるだとか、
ユリウス暦の頃は4の倍数の年が全てうるう年だったとか、
そういう事を踏まえてきっちり算出しようとするともっと面倒臭くなります。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/06/22 17:54

閏年は


4年に1度訪れます。
ただし、そのうち100年に1回は閏年になりません。
ただし、そのうち400年に1回は閏年になります。

という定義がそのまま式に表れているだけです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!