よろしくお願いします!
次のコード スニペットは、特定のユリウス日の年、月、日を提供する関数です。
ここにある定数の意味を教えてください。このコードはネット全体で見つけることができますが、ここで使用されるデフォルト値について誰も説明していません。また、関数が何をするかを誰かが説明できる場合。
JD に渡す値が 2456447 だとします。
VOID GetGregorianDate(LONG JD, PWORD Year, PWORD Month, PWORD Day)
{
LONG j, y, d, m;
j = JD - 1721119; //what is this value - 1721119 (may be related to day.. but how ?)
y = (4 * j - 1) / 146097; //what is this value - 146097 (may be related to year.. but how ?)
j = 4 * j - 1 - 146097 * y;
d = j / 4;
j = (4 * d + 3) / 1461; // ?
d = 4 * d + 3 - 1461 * j;
d = (d + 4) / 4;
m = (5 * d - 3) / 153; // ?
d = 5 * d - 3 - 153 * m;
d = (d + 5) / 5;
y = 100 * y + j;
if (m < 10)
{
m = m + 3;
}
else
{
m = m - 9;
y = y + 1;
}
*Year = (WORD) y;
*Month = (WORD) m;
*Day = (WORD) d;
}