\( \DeclareMathOperator{\trunc}{trunc} \DeclareMathOperator{\Div}{div} \DeclareMathOperator{\gcd}{gcd} \DeclareMathOperator{\bdom}{dom} \def\floorratio#1#2{\left\lfloor \frac{#1}{#2} \right\rfloor} \def\ceilratio#1#2{\left\lceil \frac{#1}{#2} \right\rceil} \def\mod1ratio#1#2{\left\lceil \frac{#1}{#2} \right\rfloor_1} \)
In sterrenkundige formules waar de datum in voorkomt is het onhandig om die datum te meten in jaren, maanden, en dagen, vooral ook omdat niet alle jaren evenveel dagen bevatten en ook niet alle maanden evenveel dagen bevatten. Het is veel handiger om de datum te meten als het aantal dagen sinds een vast beginpunt. Het Juliaanse Dagnummer (JDN) of de Juliaanse Dag (JD) en zijn soortgenoten worden hiervoor in de sterrenkunde veel gebruikt. Deze bladzijde legt uit hoe je een datum uit verschillende kalenders naar de Juliaanse Dag kunt vertalen, of andersom.Het eerste deel van deze bladzijde geeft rekenrecepten voor een paar moderne en historische kalenders. Het tweede deel (vanaf hoofdstuk 12) legt uit hoe ik die recepten afleidde.
Er zijn veel verschillende algoritmen in omloop voor het omrekenen tussen kalenderdata en dagnummers. Het enige dat telt is dat ze voor alle dagnummers en kalenderdata de goede uitkomsten moeten geven. Als er slechts een beperkt aantal invoerwaarden en mogelijke uitkomsten zijn (bijvoorbeeld voor het omrekenen van het dagnummer-in-het-jaar naar een maandnummer en een dagnummer-in-de-maand) dan kun je meestal veel verschillende algoritmen bedenken die allemaal voor die bepaalde invoerwaarden precies de juiste uitkomsten geven (maar misschien heel verschillende uitkomsten voor alle andere invoerwaarden), zelfs al is er helemaal geen logisch verband tussen dat algoritme en de kalender. In zo'n geval is er vaak ook weinig of geen logisch verband tussen het algoritme van dagnummer naar datum en het algoritme van datum naar dagnummer, maar kunnen de algoritmen wel wat korter zijn.
Bij elk algoritme moet je weten voor welke invoerwaarden het ontworpen was. Sommige kalenderalgoritmen werken alleen goed met positieve getallen en geven foute resultaten voor negatieve jaren of dagnummers. De algoritmen die ik hieronder geef zijn ontworpen om voor alle jaren (ook negatieve), alle maanden in elk jaar, alle dagen in elke maand, en alle Juliaanse dagnummers (ook negatieve) goed te werken.
Sommige van de formules drukken een keuze uit: Als aan een bepaalde voorwaarde voldaan is dan moet een bepaalde handeling gedaan worden (bijvoorbeeld ergens een correctie op toepassen), en als aan die voorwaarde niet voldaan is dan moet een andere of helemaal geen handeling gedaan worden. Zulke alternatieve paden zijn prima te gebruiken in handmatige berekeningen, in applicaties die één datum per keer behandelen, en in applicaties die geschreven zijn in een programmeertaal die gecompileerd moet worden voordat het programma uitgevoerd kan worden (bijvoorbeeld geschreven in C of Fortran) maar zijn niet zo handig voor gebruik in applicaties die meerdere datums tegelijk kunnen behandelen (in een rij) en die geschreven zijn in een programmeertaal die direct uitgevoerd wordt (zoals Basic of Perl of IDL), waarvoor het uitvoeren van een als-danopdracht per datum veel trager is dan het uitvoeren van steeds dezelfde vaste berekening per datum voor een rij van datums.
Als de kalenderberekeningen die hieronder staan zulke keuzes bevatten, dan geef ik waar mogelijk een formule die als-danopdrachten omzeilt en daarmee geschikt is voor toepassing op rijen van datums in directe-uitvoerprogrammeertalen. De begeleidende tekst maakt dan duidelijk wat de keuze was waar de formule omheenwerkt.
Voor sterrenkundige berekeningen die van de tijd afhangen is het handig om een doorlopende tijdschaal te hebben die maar één eenheid gebruikt, en niet drie zoals de meeste kalenders (dagen, maanden, jaren), en die bovendien een vaste tijdzone gebruiken zodat er geen verwarring kan zijn over welk moment nu precies bedoeld wordt.
De IAU heeft hiervoor de Juliaanse Datum (JD) geadopteerd, niet te verwarren met "een datum in de Juliaanse kalender". Er zijn verschillende andere tijdschalen die lijken op JD. De volgende tabel noemt er een aantal.
| Naam | Soort | Begint | Vanaf JD | |
|---|---|---|---|---|
| JD | Juliaanse Datum | Fractioneel | 12:00 UTC | = JD |
| JDN | Juliaanse Dagnummer | Heel | 12:00 UTC | = ⌊JD⌋ |
| CJD | Chronologische Juliaanse Datum | Fractioneel | 00:00 LT | = JD + 0,5 + TZ |
| CJDN | Chronologische Juliaanse Dagnummer | Heel | 00:00 LT | = ⌊JD + 0,5 + TZ⌋ |
"Heel" betekent dat die tijdschaal alleen hele getallen gebruikt en alleen hele dagen telt. "Fractioneel" betekent dat die tijdschaal ook gebroken getallen gebruikt (met cijfers achter de komma) en tijdstippen aangeeft. De "Begint"-kolom laat zien hoe laat elke volgende kalenderdag begint. 12:00 UTC betekent dat een nieuwe kalenderdag begint op 12:00 universele tijd, dus niet om 12:00 uur lokale tijd ― behalve als je toevallig in een tijdzone bent die UTC aanhoudt. Groot-Brittannië houdt in de winter UTC aan. 00:00 LT betekent dat een nieuwe kalenderdag begint om middernacht lokale tijd. De "Vanaf JD"-kolom toont hoe de andere getallen te berekenen zijn uit JD. Daarin staat "TZ" voor een aanpassing voor de lokale tijdzone; die aanpassing is 0 voor UTC.
In de praktijk worden "fractionele" JDs en CJDs meestal met tenminste één cijfer achter de komma geschreven (zelfs als dat een 0 is), en "hele" JDNs en CJDNs zonder cijfers achter de komma.
Het nulpunt van JD (dus JD 0,0) komt overeen met 12:00 UTC op 1 januari −4712 in de Juliaanse kalender. Het nulpunt van CJD komt overeen met 00:00 lokale tijd op 1 januari −4712. JDN 0 komt overeen met de periode van 12:00 UTC op 1 januari −4712 tot 12:00 UTC op 2 januari −4712. CJDN 0 komt overeen met 1 januari −4712 (de hele dag, in lokale tijd).
Laten we kijken welke tijdstippen of perioden in de Gregoriaanse kalender overeenkomen met getal 2455772 in de tijdschalen van de voorgaande tabel, in een tijdzone waarin de klok 2 uur later aangeeft dan UTC (bijvoorbeeld in Midden-Europa in de zomer).
| JD | 2455772,0 | precies 14:00 uur op 29 juli 2011 |
| JDN | 2455772 | van 14:00 uur op 29 juli 2011 tot 14:00 uur op 30 juli 2011 |
| CJD | 2455772,0 | precies 00:00 uur op 29 juli 2011 |
| CJDN | 2455772 | de hele kalenderdag 29 juli 2011 |
Om afrondfouten te voorkomen zijn kalenderberekeningen het beste te doen met alleen hele getallen. Hieronder gebruiken we daarvoor CJDN.
In de formules die hieronder staan worden veel getallen afgerond naar een heel getal. Het is hierbij belangrijk dat die getallen in de juiste richting worden afgerond. Hele getallen zijn al afgerond, dus die veranderen niet.
De afrondigen die wij hier gebruiken zijn afronding naar beneden naar het dichtsbijzijnde hele getal (voor \(x \) aangegeven als \( ⌊x⌋ \)) of naar boven naar het dichtstbijzijnde hele getal (\( ⌈x⌉ \)). De standaard-afrondfuncties op rekenmachines ronden meestal af naar het dichtstbijzijnde hele getal (dat noteren wij hier als \( [x] \)), en de standaardconversies van een gebroken getal naar een heel getal in computertalen ronden meestal af in de richting van nul (dat noteren wij als \( \trunc(x) \)). Die soorten afronding moeten we hier niet hebben! De onderstaande tabel toont deze drie verschillende soorten afronding voor een aantal getallen.
| \({x}\) | \({⌊x⌋}\) | \({[x]}\) | \({⌈x⌉}\) | \({\trunc(x)}\) |
| −5 | −5 | −5 | −5 | −5 |
| −4,9 | −5 | −5 | −4 | −4 |
| −4,2 | −5 | −4 | −4 | −4 |
| −4 | −4 | −4 | −4 | −4 |
| −0,2 | −1 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 |
| 0,2 | 0 | 0 | 1 | 0 |
| 4 | 4 | 4 | 4 | 4 |
| 4,2 | 4 | 4 | 5 | 4 |
| 4,9 | 4 | 5 | 5 | 4 |
| 5 | 5 | 5 | 5 | 5 |
Als je het hele getal \( y \) deelt door het hele getal \( x \) dan krijg je een quotiënt \( q \) en een rest \( r \). Soms hebben we interesse voor het quotiënt, en soms voor de rest. Wij kiezen ervoor dat de rest nooit negatief is. Dan is \( 0 ≤ r \lt |x| \) en
\begin{align} q & = \floorratio{y}{x} \\ r & = y \bmod x = y − x\floorratio{y}{x} \\ y & = qx + r \end{align}
De notatie \( y \bmod x \) betekent: de niet-negatieve rest die overblijft bij deling van \( y \) door \( x \).
We vinden
\begin{equation} \frac{y}{x} = \floorratio{y}{x} + \left( \frac{y}{x} \bmod 1 \right) = \floorratio{y}{x} + \frac{y \bmod x}{x} \end{equation}
en als \( x = 1 \) dan
\begin{equation} y = ⌊y⌋ + (y \bmod 1) \end{equation}
De notatie \( x ≡ y \pmod{n} \) betekent dat \( x \) en \( y \) een veelvoud van \( n \) verschillen. Men zegt dan dat \( x \) en \( y \) congruent zijn modulo \( n \), en noemt \( n \) de modulus. De vergelijking \( x ≡ y \pmod{n} \) heet een congruentie.
Modulair rekenen is rekenen waarbij alle berekeningen modulo een vaste \( n \) zijn. Dat betekent dat je van alle termen en factoren willekeurige veelvouden van de modulus mag aftrekken zonder de congruentie te veranderen. Als \( x ≡ y \pmod{n} \) en \( p \) is een heel getal, dan is ook \( x + pn ≡ y \pmod{n} \), en \( px ≡ py \pmod{n} \), en ook \( px ≡ py \pmod{pn} \).
Let op het verschil in notatie: \( z = x \bmod y \) betekent dat \( z \) gelijk is aan de rest bij deling van \( x \) door \( y \), en \( z ≡ x \pmod{y} \) betekent dat \( z \) gelijk is aan \( x \) afgezien van een willekeurig veelvoud van \( y \). Als \( z = x \bmod y \) dan is ook \( z ≡ x \pmod{y} \), maar andersom hoeft dat niet zo te zijn.
Zie hoofdstuk 13.2.1 voor de afleiding van dit algoritme.
Eén algoritme om van een Gregoriaanse datum (kalenderjaar \( j \), kalendermaand \( m \), kalenderdag \( d \)) om te rekenen naar CJDN \( J \) is:
\begin{align} c_0 & = \floorratio{m − 3}{12} \\ x_4 & = j + c_0 \\ \{x_3, x_2\} & = \Div(x_4, 100) \\ x_1 & = m − 12c_0 − 3 \\ J & = \floorratio{146097x_3}{4} + \floorratio{36525x_2}{100} + \floorratio{153x_1 + 2}{5} + d + 1721119 \end{align}
Hierin is \( J_1 \) het aantal dagen vanaf het begin van rekenjaar 0 tot het begin van de huidige 100-rekenjaarsperiode, \( J_2 \) het aantal dagen sinds het begin van de huidige 100-rekenjaarsperiode, en \( J_3 \) het aantal dagen vanaf het begin van het huidige rekenjaar tot het begin van de huidige maand. Het rekenjaar loopt van 1 maart tot 1 maart.
\begin{align*} c_0 & = \floorratio{9 − 3}{12} = 0 \\ x_4 & = 2010 + 0 = 2010 \\ \{x_3, x_2\} & = \Div(2010, 100) = \{20, 10\} \\ x_1 & = 9 − 12×0 − 3 = 6 \\ J & = \floorratio{146097×20}{4} + \floorratio{36525×10}{100} + \floorratio{153×6 + 2}{5} + 7 + 1721119 \\ & = 730485 + 3652 + 184 + 7 + 1721119 = 2455447 \end{align*}
En hier zijn de berekeningen voor nog een paar data:
| kalenderdatum | \({c_0}\) | \({x_4}\) | \({x_3}\) | \({x_2}\) | \({x_1}\) | \({…x_3…}\) | \({…x_2…}\) | \({…x_1…}\) | \({J}\) |
|---|---|---|---|---|---|---|---|---|---|
| 2000−02−29 | −1 | 1999 | 19 | 99 | 11 | 693960 | 36159 | 337 | 2451604 |
| 2000−03−01 | 0 | 2000 | 20 | 0 | 0 | 730485 | 0 | 0 | 2451605 |
| 2001−02−28 | −1 | 2000 | 20 | 0 | 11 | 730485 | 0 | 337 | 2451969 |
| 2001−03−01 | 0 | 2001 | 20 | 1 | 0 | 730485 | 365 | 0 | 2451970 |
| 2100−02−28 | −1 | 2099 | 20 | 99 | 11 | 730485 | 36159 | 337 | 2488128 |
| 2100−03−01 | 0 | 2100 | 21 | 0 | 0 | 767009 | 0 | 0 | 2488129 |
Het algoritme om van een CJDN \( J \) om te rekenen naar een Gregoriaanse datum (kalenderjaar \( j \), kalendermaand \( m \), kalenderdag \( d \)) is:
\begin{align} \{x_3, r_3\} & = \Div(4×J − 6884477, 146097) \\ \{x_2, r_2\} & = \Div\left( 100\floorratio{r_3}{4} + 99, 36525 \right) \\ \{x_1, r_1\} & = \Div\left( 5\floorratio{r_2}{100} + 2, 153 \right) \\ d & = \floorratio{r_1}{5} + 1 \\ c_0 & = \floorratio{x_1 + 2}{12} \\ j & = 100x_3 + x_2 + c_0 \\ m & = x_1 − 12c_0 + 3 \end{align}
Hierin is \( x_3 \) het aantal rekeneeuwen sinds het begin van rekenjaar 0, \( x_2 \) het aantal rekenjaren sinds het begin van de huidige rekeneeuw, en \( x_1 \) het aantal rekenmaanden sinds het begin van het huidige rekenjaar.
Bijvoorbeeld, welke datum in de Gregoriaanse kalender komt overeen met CJDN 2452827? Dan is \( J = 2452827 \) en dan
\begin{align*} k_3 & = 4×(2452827 − 1721120) + 3 = 2926831 \\ x_3 & = \floorratio{2926831}{146097} = 20 \\ k_2 & = 100\floorratio{2926831 \bmod 146097}{4} + 99 = 100\floorratio{4891}{4} + 99 = 100×1222 + 99 = 122299 \\ x_2 & = \floorratio{122299}{36525} = 3 \\ k_1 & = 5\floorratio{122299 \bmod 36525}{100} + 2 = 5×\floorratio{12724}{100} + 2 = 5×127 + 2 = 637 \\ x_1 & = \floorratio{k_1}{153} = \floorratio{637}{153} = 4 \\ c_0 & = \floorratio{4 + 2}{12} = 0 \\ j & = 100×20 + 3 + 0 = 2003 \\ m & = 4 − 12×0 + 3 = 7 \\ d & = \floorratio{637 \bmod 153}{5} + 1 = \floorratio{25}{5} + 1 = 5 + 1 = 6 \end{align*}
De datum is 6 juli 2003.
Hier zijn de berekeningen voor dezelfde data als voorheen.
| \({J}\) | \({x_3}\) | \({x_2}\) | \({x_1}\) | \({c_0}\) | \({j}\) | \({m}\) | \({d}\) | kalenderdatum |
|---|---|---|---|---|---|---|---|---|
| 2451604 | 19 | 99 | 11 | 1 | 2000 | 2 | 29 | 2000−02−29 |
| 2451605 | 20 | 0 | 0 | 0 | 2000 | 3 | 1 | 2000−03−01 |
| 2451969 | 20 | 0 | 11 | 1 | 2001 | 2 | 28 | 2001−02−28 |
| 2451970 | 20 | 1 | 0 | 0 | 2001 | 3 | 1 | 2001−03−01 |
| 2488128 | 20 | 99 | 11 | 1 | 2100 | 2 | 28 | 2100−02−28 |
| 2488129 | 21 | 0 | 0 | 0 | 2100 | 3 | 1 | 2100−03−01 |
Zie hoofdstuk 13.3 voor de afleiding van dit algoritme.
Sommige Oosters-Orthodoxe kerken gebruiken een kalender uitgevonden door Milutin Milanković, die alleen afwijkt van de Gregoriaanse kalender in de schrikkelregels voor eeuwjaren. Een algoritme om van een datum in de Milanković-kalender (kalenderjaar \( j \), kalendermaand \( m \), kalenderdag \( d \)) om te rekenen naar het CJDN \( J \) is:
\begin{align} c_0 & = \floorratio{m − 3}{12} \\ x_4 & = j + c_0 \\ x_3 & = \floorratio{x_4}{100} \\ x_2 & = x_4 \bmod 100 \\ x_1 & = m − 12c_0 − 3 \\ J & = \floorratio{328718x_3 + 6}{9} + \floorratio{36525x_2}{100} + \floorratio{153x_1 + 2}{5} + d + 1721119 \end{align}
Een algoritme om CJDN \( J \) om te rekenen naar jaar \( j \), maand \( m \), dag \( d \) in de Milanković-kalender is:
\begin{align} k_3 & = 9×(J − 1721120) + 2 \\ x_3 & = \floorratio{k_3}{328718} \\ k_2 & = 100\floorratio{k_3 \bmod 328718}{9} + 99 \\ x_2 & = \floorratio{k_2}{36525} \\ x_1 & = \floorratio{5\floorratio{k_2 \bmod 36525}{100} + 2}{153} \\ c_0 & = \floorratio{x_1 + 2}{12} \\ j & = 100x_3 + x_2 + c_0 \\ m & = x_1 − 12c_0 + 3 \\ d & = \floorratio{k_1 \bmod 153}{5} + 1 \end{align}
Zie hoofdstuk 13.1 voor de afleiding van dit algoritme.
Het algoritme om van een Juliaanse datum (kalenderjaar \( j \), kalendermaand \( m \), kalenderdag \( d \)) om te rekenen naar het CJDN \( J \) is:
\begin{align} J_0 & = 1721117 \\ c_0 & = \floorratio{m − 3}{12} \\ J_1 & = \floorratio{1461×(j + c_0)}{4} \\ J_2 & = \floorratio{153m − 1836c_0 − 457}{5} \\ J & = J_1 + J_2 + d + J_0 \end{align}
Hier is \( J_1 \) het aantal dagen tussen het begin van rekenjaar 0 en het begin van het huidige rekenjaar, en \( J_2 \) het aantal dagen tussen het begin van het huidige rekenjaar en het begin van de huidige maand.
\begin{align*} c_0 & = \floorratio{9 − 3}{12} = 0 \\ J_1 & = \floorratio{1461×(2010 + 0)}{4} = 734152 \\ J_2 & = \floorratio{153×9 − 1836×0 − 457}{5} = 184 \\ J & = 734152 + 184 + 7 + 1721117 = 2455460 \end{align*}
En hier zijn de berekeningen voor nog een paar data:
| kalenderdatum | \({c_0}\) | \({J_1}\) | \({J_2}\) | \({J}\) |
|---|---|---|---|---|
| 2000−02−29 | −1 | 730134 | 337 | 2451617 |
| 2000−03−01 | 0 | 730500 | 0 | 2451618 |
| 2001−02−28 | −1 | 730500 | 337 | 2451982 |
| 2001−03−01 | 0 | 730865 | 0 | 2451983 |
| 2100−02−28 | −1 | 766659 | 337 | 2488141 |
| 2100−02−29 | −1 | 766659 | 337 | 2488142 |
| 2100−03−01 | 0 | 767025 | 0 | 2488143 |
Het algoritme om een CJDN \( J \) om te rekenen naar een Juliaanse datum (kalenderjaar \( j \), kalendermaand \( m \), kalenderdag \( d \)) is:
\begin{align} y_2 & = J − 1721118 \\ k_2 & = 4y_2 + 3 \\ k_1 & = 5\floorratio{k_2 \bmod 1461}{4} + 2 \\ x_1 & = \floorratio{k_1}{153} \\ c_0 & = \floorratio{x_1 + 2}{12} \\ j & = \floorratio{k_2}{1461} + c_0 \\ m & = x_1 − 12c_0 + 3 \\ d & = \floorratio{k_1 \bmod 153}{5} + 1 \end{align}
\begin{align*} y_2 & = 2451893 − 1721118 = 730775 \\ k_2 & = 4×730775 + 3 = 2923103 \\ k_1 & = 5\floorratio{2923103 \bmod 1461}{4} + 2 = 5\floorratio{1103}{4} + 2 = 5×275 + 2 = 1377 \\ x_1 & = \floorratio{1377}{153} = 9 \\ c_0 & = \floorratio{9 + 2}{12} = \floorratio{11}{12} = 0 \\ j & = \floorratio{2923103}{1461} + 0 = 2000 + 0 = 2000 \\ m & = 9 − 12×0 + 3 = 12 \\ d & = \floorratio{1377 \bmod 153}{5} + 1 = \floorratio{0}{5} + 1 = 1 \end{align*}
De datum is 1 december 2000.
Hier zijn de berekeningen voor dezelfde data als voorheen.
| \({J}\) | \({y_2}\) | \({k_2}\) | \({k_1}\) | \({x_1}\) | \({c_0}\) | \({j}\) | \({m}\) | \({d}\) | kalenderdatum |
|---|---|---|---|---|---|---|---|---|---|
| 2451617 | 730499 | 2921999 | 1827 | 11 | 1 | 2000 | 2 | 29 | 2000−02−29 |
| 2451618 | 730500 | 2922003 | 2 | 0 | 0 | 2000 | 3 | 1 | 2000−03−01 |
| 2451982 | 730864 | 2923459 | 1822 | 11 | 1 | 2001 | 2 | 28 | 2001−02−28 |
| 2451983 | 730865 | 2923463 | 2 | 0 | 0 | 2001 | 3 | 1 | 2001−03−01 |
| 2488141 | 767023 | 3068095 | 1822 | 11 | 1 | 2100 | 2 | 28 | 2100−02−28 |
| 2488142 | 767024 | 3068099 | 1827 | 11 | 1 | 2100 | 2 | 29 | 2100−02−29 |
| 2488143 | 767025 | 3068103 | 2 | 0 | 0 | 2100 | 3 | 1 | 2100−03−01 |
Zie hoofdstuk 13.8 voor de afleiding van dit algoritme.
De religieuze Islamitische kalender hangt af van waarnemingen en is daarom niet te vangen in formules. De administratieve kalender heeft vaste regels en is wel te beschrijven door formules. Het verschil tussen de religieuze en administratieve kalenders zou meestal hooguit 1 dag moeten zijn.
Het CJDN kan als volgt uit het jaarnummer \( j \), maandnummer \( m \), en dagnummer \( d \) in de meestgebruikte administratieve Islamitische kalender worden afgeleid (onder meer gebruikt door al-Fazārī, al-Khwārizmī en al-Battānī en ook in de Toledo- en Alfonsijnse Tafels):
\begin{equation} J = \floorratio{10631j − 10617}{30} + \floorratio{325m − 320}{11} + d + 1948439 \end{equation}
\[ \begin{split} J & = \floorratio{10631×1432 − 10617}{30} + \floorratio{325×8 − 320}{11} + 29 + 1948440 \\ & = \floorratio{15212975}{30} + \floorratio{2280}{11} + 29 + 1948440 \\ & = 507099 + 207 + 29 + 1948439 \\ & = 2455774 \end{split} \]
De CJDN is 2455774, wat overeenkomt met 31 juli 2011 in de Gregoriaanse kalender.
En hoe zit dat met de eerste dag van de eerste maand van het eerste jaar in de Islamitische kalender? Dan is \( j = 1 \), \( m = 1 \), \( d = 1 \), dus
\[ \begin{split} J & = \floorratio{10631×1 − 10617}{30} + \floorratio{325×1 − 320}{11} + 1 + 1948439 \\ & = \floorratio{14}{30} + \floorratio{5}{11} + 1 + 1948440 = 0 + 0 + 1 + 1948439 = 1948440 \end{split} \]
hetgeen overeenkomt met 16 juli 622 in de Juliaanse kalender.
De volgende formules berekenen het jaartal \( j \), maandnummer \( m \), en dagnummer \( d \) in de meestgebruikte administratieve Islamitische kalender uit het CJDN \( J \):
\begin{align} k_2 & = 30×(J − 1948440) + 15 \\ k_1 & = 11\floorratio{k_2 \bmod 10631}{30} + 5 \\ j & = \floorratio{k_2}{10631} + 1 \\ m & = \floorratio{k_1}{325} + 1 \\ d & = \floorratio{k_1 \bmod 325}{11} + 1 \end{align}
\begin{align*} k_2 & = 30×(2455774 − 1948440) + 15 = 15220035 \\ k_1 & = 11×\floorratio{15220035 \bmod 10631}{30} + 5 = 11×\floorratio{7074}{30} + 5 = 11×235 + 5 = 2590 \\ j & = \floorratio{15220035}{10631} + 1 = 1431 + 1 = 1432 \\ m & = \floorratio{2590}{325} + 1 = 7 + 1 = 8 \\ d & = \floorratio{2590 \bmod 325}{11} + 1 = \floorratio{315}{11} + 1 = 29 \end{align*}
dus \( j = 1432 \), \( m = 8 \), \( d = 29 \) ofwel 29 Sha`ban 1432.
Zie hoofdstuk 13.5 voor de afleiding van dit algoritme.
De Babyloniërs hadden een zongebonden maankalender waarin de lengte van de maand bepaald werd uit waarnemingen, maar het aantal maanden per jaar elke 19 jaar een vast patroon volgde. Onderstaande formules voor een administratieve Babylonische kalender gebruiken datzelfde patroon van 19 jaar, en zouden meestal hooguit een dag moeten afwijken van de door waarnemingen bepaalde kalender die de Babyloniërs gebruikten.
Als \( j \) het jaartal is volgens de era van Seleukos, en \( m \) het maandnummer (beginnend bij 1) in het jaar, en \( d \) het dagnummer (beginnend bij 1) in de maand, dan vind je het CJDN \( J \) uit
\begin{align} y_1 & = \floorratio{235j − 241}{19} + m \\ J & = \floorratio{6940y_1}{235} + d + 1607557 \end{align}
\begin{align*} x_1 & = 2 \\ z_1 & = 8 \\ z_2 & = 26 \\ c_1 & = \floorratio{235×2 + 13}{19} = \floorratio{483}{19} = 25 \\ x_2 & = y_1 = 25 + 8 = 33 \\ c_2 & = \floorratio{6940×33}{235} = \floorratio{229020}{235} = 974 \\ y_2 & = 974 + 26 = 1000 \\ J & = 1000 + 1607558 = 1607658 \end{align*}
Van CJDN \( J \) gaan we als volgt naar Babylonische jaar \( j \), maand \( m \), en dag \( d \):
\begin{align} k_2 & = 235×(J − 1607558) + 234 \\ k_1 & = 19\floorratio{k_2}{6940} + 5 \\ j & = \floorratio{k_1}{235} + 1 \\ m & = \floorratio{k_1 \bmod 235}{19} + 1 \\ d & = \floorratio{k_2 \bmod 6940}{235} + 1 \end{align}
\begin{align*} k_2 & = 235×(1608558 − 1607558) + 234 = 235234 \\ k_1 & = 19×\floorratio{235234}{6940} + 5 = 19×33 + 5 = 632 \\ j & = \floorratio{632}{235} + 1 = 3 \\ m & = \floorratio{632 \bmod 235}{19} + 1 = \floorratio{162}{19} + 1 = 9 \\ d & = \floorratio{235234 \bmod 6940}{235} + 1 = \floorratio{6214}{235} + 1 = 27 \end{align*}
Zie hoofdstuk 13.6 voor de afleiding van dit algoritme.
De Joodse kalender is een zongebonden maankalender met ingewikkelde regels, en de kalender herhaalt zich pas na 251.827.457 dagen = 35.975.351 weken = 8.527.680 maanden = 689.472 jaren. Het algoritme om van een Joodse datum om te rekenen naar CJDN is daarom lang, en er komen hele grote tussenresultaten in voor. Het algoritme dat ik hieronder geef voor de Joodse kalender gebruikt alleen hele getallen (om afrondfouten te voorkomen), en gaat er vanuit dat alle invoerwaarden, tussenresultaten en uitkomsten niet groter mogen worden dan 231 = 2.147.483.648.
In de Joodse kalender heeft een jaar 12 of 13 maanden en een maand heeft 29 of 30 dagen. Nieuwjaar is de eerste dag van de 7e maand, tisjrie. In een jaar van 12 maanden zijn de maanden: 1 = niesan (נִיסָן), 2 = ijar (אִיָּר / אייר), 3 = siewan (סִיוָן / סיוון), 4 = tammoez (תַּמּוּז), 5 = aaw (אָב), 6 = elloel (אֱלוּל), 7 = tisjrie (תִּשׁרִי), 8 = chesjwan (מַרְחֶשְׁוָן / מרחשוון), 9 = kisleew (כִּסְלֵו / כסליו), 10 = teweet (טֵבֵת), 11 = sjewat (שְׁבָט), 12 = adar (אֲדָר). In een jaar van 13 maanden wordt een embolistische maand adar Ⅰ (אֲדָר א׳) ingevoegd tussen sjewat en gewone adar, en die gewone adar wordt dan tijdelijk hernoemd tot adar Ⅱ (אֲדָר ב׳). In zo'n jaar rekenen we de embolistische maand adar Ⅰ als maand nummer 12, en adar Ⅱ als maand nummer 13.
Een algoritme om om te rekenen van kalenderjaar \( j \), kalendermaand \( m \) (van 1 tot 12 of 13) en kalenderdag \( d \) (van 1 tot 29 of 30) naar CJDN is als volgt:
\begin{align} c_0 & = \floorratio{13 − m}{7} \\ x_1 & = j − 1 + c_0 \\ x_3 & = m − 1 \\ z_4 & = d − 1 \\ c_1(x_1) & = \floorratio{235x_1 + 1}{19} \\ q(x_1) & = \floorratio{c_1(x_1)}{1095} \\ r(x_1) & = c_1(x_1) \bmod 1095 \\ υ_1(x_1) & = 32336q(x_1) + \floorratio{15q(x_1) + 765433r(x_1) + 12084}{25920} \\ υ_2(x_1) & = υ_1(x_1) + \left(\floorratio{6×(υ_1(x_1) \bmod 7)}{7} \bmod 2\right) \end{align}
Bereken op dezelfde wijze ook \( υ_2(x_1 + 1) \). Dan
\begin{align} L_2(x_1) & = υ_2(x_1 + 1) − υ_2(x_1) \\ L_2(x_1 − 1) & = υ_2(x_1) − υ_2(x_1 − 1) \\ v_3 & = 2\left(\floorratio{L_2(x_1) + 19}{15} \bmod 2\right) \\ v_4 & = \floorratio{L_2(x_1 − 1) + 7}{15} \bmod 2 \\ c_2(x_1) & = υ_2 + v_3 + v_4 \end{align}
Bereken op dezelfde wijze ook \( c_2(x_1 + 1) \) (wat betekent dat je eerst ook \( υ_2(x_1 + 2) \) moet uitrekenen). Dan
\begin{align} L & = c_2(x_1 + 1) − c_2(x_1) \\ c_8 & = \floorratio{L + 7}{2} \bmod 15 \\ c_9 & = −\left( \floorratio{385 − L}{2} \bmod 15 \right) \\ c_3 & = \floorratio{384x_3 + 7}{13} + c_8\floorratio{x_3 + 4}{12} + c_9\floorratio{x_3 + 3}{12} \\ c_4(x_1,x_3) & = c_2(x_1) + c_3(x_3) \\ J & = J_0 − 177 + c_4(x_1,x_3) + z_4 = 347821 + c_2(x_1) + c_3 + z_4 \end{align}
Als voorbeeld rekenen we uit welke CJDN overeenkomt met 18 siewan A.M. 4682. Dan is \( j = 4682 \), \( m = 3 \), \( d = 18 \). En dan
\begin{align*} c_0 & = \floorratio{13 − m}{7} \\ & = \floorratio{13 − 3}{7} \\ & = \floorratio{10}{7} = 1 \\ x_1 & = j − 1 + c_0 = 4682 − 1 + 1 = 4682 \\ x_3 & = m − 1 = 3 − 1 = 2 \\ z_4 & = d − 1 = 18 − 1 = 17 \\ c_1(4681) & = c_1(x_1 − 1) = \floorratio{235×(x_1 − 1) + 1}{19} \\ & = \floorratio{235×4681 + 1}{19} \\ & = \floorratio{1100036}{19} = 57896 \\ c_1(4682) & = c_1(x_1) = \floorratio{235×x_1 + 1}{19} \\ & = \floorratio{235×4682 + 1}{19} \\ & = \floorratio{1100270 + 1}{19} \\ & = \floorratio{1100271}{19} = 57909 \\ c_1(4683) & = c_1(x_1 + 1) = \floorratio{235×(x_1 + 1) + 1}{19} \\ & = \floorratio{235×4683 + 1}{19} \\ & = \floorratio{1100506}{19} = 57921 \\ c_1(4684) & = c_1(x_1 + 2) = \floorratio{235×(x_1 + 2) + 1}{19} \\ & = \floorratio{235×4684 + 1}{19} \\ & = \floorratio{1100741}{19} = 57933 \\ q(4681) & = q(x_1 − 1) = \floorratio{c_1(x_1 − 1)}{1095} \\ & = \floorratio{57896}{1095} = 52 \\ r(4681) & = r(x_1 − 1) = c_1(x_1 − 1) \bmod 1095 \\ & = 57896 \bmod 1095 = 956 \\ υ_1(4681) & = υ_1(x_1 − 1) = 32336×q(x_1 − 1) \\ & + \floorratio{15×q(x_1 − 1) + 765433×r(x_1 − 1) + 12084}{25920} \\ & = 32336×52 + \floorratio{15×52 + 765433×956 + 12084}{25920} \\ & = 1681472 + \floorratio{731766812}{25920} \\ & = 1681472 + 28231 = 1709703 \\ υ_2(4681) & = υ_2(x_1 − 1) = υ_1(x_1 − 1) + \left( \floorratio{6×(υ_1(x_1 − 1) \bmod 7)}{7} \bmod 2\right) \\ & = 1709703 + \left( \floorratio{6×(1709703 \bmod 7)}{7} \bmod 2 \right) \\ & = 1709703 + \left( \floorratio{6×2}{7} \bmod 2 \right) \\ & = 1709703 + \left( \floorratio{12}{7} \bmod 2 \right) \\ & = 1709703 + (1 \bmod 2) = 1709703 + 1 = 1709704 \\ q(4682) & = q(x_1) = \floorratio{c_1(x_1)}{1095} \\ & = \floorratio{57909}{1095} = 52 \\ r(4682) & = r(x_1) = c_1(x_1) \bmod 1095 = 57909 \bmod 1095 = 969 \\ υ_1(4682) & = υ_1(x_1) = 32336×q(x_1) \\ & + \floorratio{15×q(x_1) + 765433×r(x_1) + 12084}{25920} \\ & = 32336×52 + \floorratio{15×52 + 765433×969 + 12084}{25920} \\ & = 1681472 + \floorratio{741717441}{25920} \\ & = 1681472 + 28615 = 1710087 \\ υ_2(4682) & = υ_2(x_1) = υ_1(x_1) + \left( \floorratio{6×(υ_1(x_1) \bmod 7)}{7} \bmod 2 \right) \\ & = 1710087 + \left( \floorratio{6×(1710087 \bmod 7)}{7} \bmod 2 \right) \\ & = 1710087 + \left( \floorratio{1}{7} \bmod 2 \right) = 1710087 + (0 \bmod 2) \\ & = 1710087 + 0 = 1710087 \\ q(4683) & = q(x_1 + 1) = \floorratio{c_1(x_1 + 1)}{1095} \\ & = \floorratio{57921}{1095} = 52 \\ r(4683) & = r(x_1 + 1) = c_1(x_1 + 1) \bmod 1095 \\ & = 57921 \bmod 1095 = 981 \\ υ_1(4683) & = υ_1(x_1 + 1) = 32336×q(x_1 + 1) \\ & + \floorratio{15×q(x_1 + 1) + 765433×r(x_1 + 1) + 12084}{25920} \\ & = 332336×52 + \floorratio{15×52 + 765433×981 + 12084}{25920} \\ & = 17281472 + \floorratio{750902637}{25920} \\ & = 17281472 + 28970 = 17310442 \\ υ_2(4683) & = υ_2(x_1 + 1) = υ_1(x_1 + 1) \\ & + \left( \floorratio{6×(υ_1(x_1 + 1) \bmod 7}){7} \bmod 2 \right) \\ & = 1710442 + \left( \floorratio{6×(1710442 \bmod 7)}{7} \bmod 2 \right) \\ & = 1710442 + \left( \floorratio{6×6}{7} \bmod 2 \right) \\ & = 1710442 + \left( \floorratio{36}{7} \bmod 2 \right) \\ & = 1710442 + (5 \bmod 2) = 1710442 + 1 = 1710443 \\ q(4684) & = q(x_1 + 2) = \floorratio{c_1(x_1 + 2)}{1095} \\ & = \floorratio{57933}{1095} = 52 \\ r(4684) & = r(x_1 + 2) = c_1(x_1 + 2) \bmod 1095 \\ & = 57933 \bmod 1095 = 993 \\ υ_1(4684) & = υ_1(x_1 + 2) = 32336×q(x_1 + 2) \\ & + \floorratio{15×q(x_1 + 2) + 765433×r(x_1 + 2) + 12084}{25920} \\ & = 32336×52 + \floorratio{15×52 + 765433×993 + 12084}{25920} \\ & = 1681472 + \floorratio{760087833}{25920} \\ & = 1681472 + 29324 = 1710796 \\ υ_2(4684) & = υ_2(x_1 + 2) = υ_1(x_1 + 2) + \left( \floorratio{6×(υ_1(x_1 + 2) \bmod 7)}{7} \bmod 2 \right) \\ & = 1710796 + \left( \floorratio{6×(1710796 \bmod 7)}{7} \bmod 2 \right) \\ & = 1710796 + \left( \floorratio{6×3}{7} \bmod 2 \right) \\ & = 1710796 + \left( \floorratio{18}{7} \bmod 2 \right) = 1710796 + (2 \bmod 2) \\ & = 1710796 + 0 = 1710796 \\ L_2(4681) & = L_2(x_1 − 1) = υ_2(x_1) − υ_2(x_1 − 1) \\ & = 1710087 − 1709704 = 383 \\ L_2(4682) & = L_2(x_1) = υ_2(x_1 + 1) − υ_2(x_1) \\ & = 1710443 − 1710087 = 356 \\ L_2(4683) & = L_2(x_1 + 1) = υ_2(x_1 + 2) − υ_2(x_1 + 1) \\ & = 1710796 − 1710443 = 353 \\ v_3(4682) & = v_3(x_1) = 2×\left( \floorratio{L_2(x_1) + 19}{15} \bmod 2 \right) \\ & = 2×\left( \floorratio{356 + 19}{15} \bmod 2 \right) \\ & = 2×\left( \floorratio{375}{15} \bmod 2 \right) \\ & = 2×(25 \bmod 2) = 2 \\ v_4(4682) & = v_4(x_1) = \floorratio{L_2(x_1 − 1) + 7}{15} \bmod 2 \\ & = \floorratio{383 + 7}{15} \bmod 2 \\ & = \floorratio{390}{15} \bmod 2 = 26 \bmod 2 = 0 \\ c_2(4682) & = c_2(x_1) = υ_2(x_1) + v_3(x_1) + v_4(x_1) \\ & = 1710087 + 2 + 0 = 1710089 \end{align*}
\begin{align*} v_3(4683) & = v_3(x_1 + 1) = 2×\left( \floorratio{L_2(x_1 + 1) + 19}{15} \bmod 2 \right) \\ & = 2×\left( \floorratio{353 + 19}{15} \bmod 2 \right) \\ & = 2×\left( \floorratio{372}{15} \bmod 2 \right) \\ & = 2×(24 \bmod 2) = 0 \\ v_4(4683) & = v_4(x_1 + 1) = \floorratio{L_2(x_1) + 7}{15} \bmod 2 \\ & = \floorratio{356 + 7}{15} \bmod 2 \\ & = \floorratio{363}{15} \bmod 2 = 24 \bmod 2 = 0 \\ c_2(4683) & = c_2(x_1 + 1) = υ_2(x_1 + 1) + v_3(x_1 + 1) + v_4(x_1 + 1) = 1710443 \\ L & = y_2(x_1 + 1) − y_2(x_1) = 1710443 − 1710089 = 354 \\ c_8 & = \floorratio{L + 7}{2} \bmod 15 \\ & = \floorratio{354 + 7}{2} \bmod 15 \\ & = \floorratio{361}{2} \bmod 15 = 180 \bmod 15 = 0 \\ c_9 & = −\left( \floorratio{385 − L}{2} \bmod 15 \right) \\ & = −\left( \floorratio{385 − 354}{2} \bmod 15 \right) \\ & = −\left( \floorratio{31}{2} \bmod 15 \right) \\ & = −(15 \bmod 15) = 0 \\ c_3 & = \floorratio{384×x_3 + 7}{13} + c_8×\floorratio{x_3 + 4}{12} + c_9×\floorratio{x_3 + 3}{12} \\ & = \floorratio{384×2 + 7}{13} + 0×\floorratio{2 + 4}{12} + 0×\floorratio{2 + 3}{12} \\ & = \floorratio{775}{13} + 0 + 0 = 59 \\ c_4 & = c_2 + c_3 = 1710089 + 59 = 1710148 \\ J & = J_0 − 177 + c_4 + z_4 = 347821 + 1710148 + 17 = 2057986 \end{align*}
Deze datum komt overeen met 17 juni 922 in de Juliaanse kalender.
Van CJDN \( J \) gaan we als volgt naar Joods jaar \( j \), maand \( m \) en dag \( d \):
\begin{align} y_4 & = J − 347821 \\ q & = \floorratio{y_4}{1447} \\ r & = y_4 \bmod 1447 \\ y_1' & = 49q + \floorratio{23q + 25920r + 13835}{765433} \\ γ_1 & = y_1' + 1 \\ ξ_1 & = \floorratio{19γ_1 + 17}{235} \\ μ_1 & = γ_1 − \floorratio{235ξ_1 + 1}{19} \end{align}
Bereken \( c_{41}' = c_4(ξ_1, μ_1) \) op de manier beschreven in het vorige hoofdstuk. Dan
\begin{align} ζ_1 & = y_4 − c_{41}' \\ γ_2 & = γ_1 + \floorratio{ζ_1}{33} \\ ξ_2 & = \floorratio{19γ_2 + 17}{235} \\ μ_2 & = γ_2 − \floorratio{235ξ_2 + 1}{19} \end{align}
Bereken \( c_{42}' = c_4(ξ_2, μ_2) \) op de manier beschreven in het vorige hoofdstuk. Dan
\begin{align} ζ_2 & = y_4 − c_{42}' \\ γ_3 & = γ_2 + \floorratio{ζ_1}{33} \\ x_1 & = ξ_3 = \floorratio{19γ_3 + 17}{235} \\ x_3 & = μ_3 = γ_3 − \floorratio{235ξ_3 + 1}{19} \end{align}
Bereken \( c_{43}' = c_4(ξ_3, μ_3) \) op de manier beschreven in het vorige hoofdstuk. Dan
\begin{align} z_4 & = ζ_3 = y_1 − c_{43}' \\ c & = \floorratio{12 − x_3}{7} \\ j & = x_1 + 1 − c \\ m & = x_3 + 1 \\ d & = z_4 + 1 \end{align}
Voor \( J = 2057986 \) vinden we
\begin{align*} y_4 & = J − 347821 = 2057986 − 347821 = 1710165 \\ q & = \floorratio{y_4}{1447} = \floorratio{1710165}{1447} = 1181 \\ r & = y_4 \bmod 1447 = 1710165 \bmod 1447 = 1258 \\ y_1' & = 49q + \floorratio{23q + 25920r + 13835}{765433} \\ & = 49×1181 + \floorratio{23×1181 + 25920×1258 + 13835}{765433} \\ & = 57869 + \floorratio{32648358}{765433} = 57869 + 42 = 57911 \\ γ_1 & = y_1' + 1 = 57911 + 1 = 57912 \\ ξ_1 & = \floorratio{19γ_1 + 17}{235} \\ & = \floorratio{19×57912 + 17}{235} \\ & = \floorratio{1100345}{235} = 4682 \\ μ_1 & = γ_1 − \floorratio{235ξ_1 + 1}{19} \\ & = 57912 − \floorratio{235×4682 + 1}{19} \\ & = 57912 − \floorratio{1100271}{19} = 57912 − 57909 = 3 \end{align*}
Op de manier beschreven in het vorige hoofdstuk berekenen we dat
\[ c_{41}' = c_4(ξ_1,μ_1) = c_4(4682,3) = 1710178 \]
Dan
\begin{align*} ζ_1 & = y_4 − c_{41}' = 1710165 − 1710178 = −13 \\ γ_2 & = γ_1 + \floorratio{ζ_1}{33} = 57912 + \floorratio{−13}{33} = 57912 + −1 = 57911 \\ ξ_2 & = \floorratio{19γ_2 + 17}{235} = \floorratio{19×57911 + 17}{235} = \floorratio{1100326}{235} = 4682 \\ μ_2 & = γ_2 − \floorratio{235ξ_2 + 1}{19} = 57911 − \floorratio{235×4682 + 1}{19} \\ & = 57911 − \floorratio{1100271}{19} = 57911 − 57909 = 2 \end{align*}
Op de manier beschreven in het vorige hoofdstuk berekenen we dat
\[ c_{42} = c_4(ξ_2,μ_2) = c_4(4682,2) = 1710148 \]
Dan
\begin{align*} ζ_2 & = y_4 − c_{42}' = 1710165 − 1710148 = 17 \\ γ_3 & = γ_2 + \floorratio{ζ_2}{33} = 57911 + \floorratio{17}{33} = 57911 + 0 = 57911 \end{align*}
Omdat in dit geval \( ζ_3 = ζ_2 \), zijn ook \( ξ_3 = ξ_2 \), \( μ_3 = μ_2 \), \( c_4(ξ_3,μ_3) = c_4(ξ_2,μ_2) \) en \( ζ_3 = ζ_2 \), dus hoef je \( ξ_3 \), \( μ_3 \), \( c_4(ξ_3,μ_3) \), \( ζ_3 \) in dit geval niet expliciet uit te rekenen, maar je kunt dat toch doen als dat handiger is.
\begin{align*} x_1 & = ξ_3 = \floorratio{19γ_3 + 17}{235} = \floorratio{19×57911 + 17}{235} = \floorratio{1100326}{235} = 4682 \\ x_3 & = μ_3 = γ_3 − \floorratio{235ξ_3 + 1}{19} = 57911 − \floorratio{235×4682 + 1}{19} \\ & = 57911 − \floorratio{1100271}{19} = 57911 − 57909 = 2 \end{align*}
Op de manier beschreven in het vorige hoofdstuk berekenen we dat
\[ c_{43}' = c_4(ξ_3,μ_3) = c_4(4682,2) = 1710148 \]
Dan
\begin{align*} z_4 & = ζ_3 = y_4 − c_{43}' = 1710165 − 1710148 = 17 \\ c & = \floorratio{12 − x_3}{7} = \floorratio{12 − 2}{7} = \floorratio{10}{7} = 1 \\ j & = x_1 + 1 − c = 4682 + 1 − 1 = 4682 \\ m & = x_3 + 1 = 2 + 1 = 3 \\ d & = z_4 + 1 = 17 + 1 = 18 \end{align*}
dus de gewenste datum in de Joodse kalender is dag 18 van maand 3 (siewan) van jaar 4682: 18 siewan A.M. 4682.
De oude Egyptenaren hadden een wel heel simpele kalender, zonder schrikkeljaren en met 30 dagen in elke maand behalve dat de laatste maand 5 dagen had. In de kalender volgens de era van Nabonassar was de eerste dag (1 Thoth van jaar 1) gelijk aan 26 februari −746 in de Juliaanse kalender.
Het algoritme om van een Egyptische datum (kalenderjaar \( j \), kalendermaand \( m \), kalenderdag \( d \)) om te rekenen naar het CJDN \( J \) is:
\begin{equation} J = 365 j + 30 m + d + 1448242 \end{equation}
Bijvoorbeeld, welke CJDN komt overeen met dag 7 van maand 5 van jaar 218 in de Egyptische kalender? Dan vinden we
\begin{align*} J & = 365j + 30m + d + 1448242 \\ & = 365×218 + 30×5 + 7 + 1448242 \\ & = 79570 + 150 + 7 + 1448242 = 1527969 \end{align*}
dus het antwoord is CJDN 1527969.
In omgekeerde richting zijn de berekeningen ook eenvoudig.
\begin{align} y_2 & = J − 1448638 \\ x_2 & = \floorratio{y_2}{365} \\ y_1 & = y_2 \bmod 365 \\ j & = x_2 + 1 \\ m & = \floorratio{y_1}{30} + 1 \\ d & = y_1 − 30m + 31 = (y_1 \bmod 30) + 1 \end{align}
Welke datum in de Egyptische kalender komt overeen met CJDN 1527969? Dan is
\begin{align*} y_2 & = J − J_0 = 1527969 − 1448638 = 79331 \\ x_2 & = \floorratio{y_2}{365} = \floorratio{79331}{365} = 217 \\ y_1 & = y_2 − 365x_2 = 79331 − 365×217 = 79331 − 79205 = 126 \\ j & = x_2 + 1 = 217 + 1 = 218 \\ m & = \floorratio{y_1}{30} + 1 = \floorratio{126}{30} + 1 = 4 + 1 = 5 \\ d & = y_1 − 30m + 31 = 126 − 30×5 + 31 = (y_1 \bmod 30) + 1 = (126 \bmod 30) + 1 = 6 + 1 = 7 \end{align*}
De Maya uit Anahuac (Midden-Amerika) gebruikten drie verschillende kalenders, waarvan er twee (de Tzolkin en de Haab) periodiek waren met vrij korte perioden, en de derde (de Lange Telling) misschien ook wel als periodiek bedoeld was maar die zulke lange perioden heeft dat hij in de praktijk als doorlopend (in plaats van periodiek) kan worden beschouwd.
Verschillende gebieden in Midden-Amerika hadden iets verschillende versies van deze kalenders, met andere namen voor dagen en maanden, andere manieren om jaren aan te geven, en soms telde men dagen vanaf dag 0 in plaats van vanaf dag 1. Hieronder geven we de kalenders van de stad Tikal.
De Haab heeft een dagnummer en een maand, maar geen jaarnummer. Er zijn 18 maanden van 20 dagen, plus een 19e maand van 5 dagen, en dat is samen 365 dagen, en dat noemen we het Haab-jaar. Er zijn geen schrikkeldagen. De maanden hebben een naam, en de dagen hebben een nummer dat begint bij 0.
Wij schrijven een datum in de Haab als \( \{h_d,h_m\} \) waarin \( h_d \) het dagnummer is (van 0 tot 19) en \( h_m \) het maandnummer (van 1 tot 19).
Er zit geen jaarnummer in de Haab dus komt een gegeven Haab-datum \( \{h_d,h_m\} \) elke 365 dagen weer terug. We moeten daarom extra informatie gebruiken om de goede te kiezen. We kunnen als volgt de laatste CJDN \( J \) vinden die overeenkomt met deze Haab-datum op of voor een bepaalde CJDN \( J_0 \):
\begin{align} H & = h_d + 20×(h_m − 1) \\ J & = J_0 − ((J_0 − H + 65) \bmod 365) \end{align}
Wat is de laatste CJDN in het jaar 1965 die overeenkomt met Haab-datum \( \{5,13\} \)? Dan is \( h_d = 5 \), \( h_m = 13 \), \( J_0 = 2439126 \) (de CJDN voor 31 december 1965), dus
\begin{align*} H & = 5 + 20×(13 − 1) = 245 \\ J & = J_0 − ((J_0 − H + 65) \bmod 365) \\ & = 2439126 − (2438946 \bmod 365) \\ & = 2439126 − 16 = 2439110 \end{align*}
De Tzolkin heeft een periode van 20 dagen (de venteina) met een naam voor elke dag, en een periode van 13 dagen (de trecena) met een nummer voor elke dag (te beginnen bij 1).
Wij schrijven een datum in de Tzolkin als \( \{t_t,t_v\} \), waarin \( t_t \) het dagnummer in de trecena is (van 1 tot 13) en \( t_v \) het dagnummer in de venteina (van 1 tot 20).
De trecena en venteina lopen allebei tegelijk op, dus na dag \( \{2,7\} \) komt dag \( \{3,8\} \) en dan \( \{4,9\} \), enzovoort. Omdat 13 en 20 relatief priem zijn komen alle mogelijke combinaties van venteina en trecena voor in deze kalender, dus na 13×20 = 260 dagen herhalen de datums zich weer.
Er zit geen jaarnummer in de Tzolkin dus komt een gegeven Tzolkin-datum elke 260 dagen weer terug. We vinden als volgt de laatste CJDN \( J \) die overeenkomt met Tzolkin-datum \( \{t_t,t_v\} \) op of voor een bepaalde CJDN \( J_0 \):
\begin{equation} J = J_0 − ((J_0 − 40 t_t + 39 t_v + 97) \bmod 260) \end{equation}
De laatste Tzolkin-datum \( \{4,7\} \) die gebeurt op of voor 31 december 1965 (= CJDN 2439126) is
\begin{align*} J & = 2439126 − ((2439126 − 40×4 + 39×7 + 97) \bmod 260) \\ & = 2439126 − (2439336 \bmod 260) \\ & = 2439126 − 16 = 2439110 \end{align*}
Voor het aantal dagen \( T \) sinds de laatste \( \{1,1\} \) geldt
\begin{equation} T = (40 t_t + 221 t_v − 1) \bmod 260 \end{equation}
Voor CJDN 2439110 (met \( \{t_t,t_v\} = \{4,7\} \)) vinden we
\begin{align*} T & = (40×4 + 221×7 − 1) \bmod 260 \\ & = 1706 \bmod 260 = 146 \end{align*}
dus de laatste dag daarvoor die \( \{1,1\} \) had was CJDN \( J = 2439110 − 146 = 2438964 \), en dat klopt, want \( t_t = ((J + 5) \bmod 13) + 1 = (2438969 \bmod 13) + 1 = 1 \) en \( t_v = ((J + 16) \bmod 20) + 1 = (2438980 \bmod 20) + 1 = 1 \).
Soms wordt een datum aangegeven met Tzolkin en Haab. De CJDN \( J \) van de laatste Tzolkin/Haab-datum \( \{ h_d, h_m, t_t, t_v \} \) op of voor CJDN \( J_0 \) is:
\begin{align} H & = (h_d + 20 × (h_m − 1)) \bmod{365} \\ T & = (40t_t + 221 t_v − 1) \bmod{260} \\ J & = J_0 − ((J_0 − 365 T + 364 H − 7600) \bmod{18980}) \end{align}
De Tzolkin en Haab hebben samen een periode van 18980 dagen, ofwel ongeveer 52 jaar.
Welke CJDN is de laatste voor het einde van 1965 die overeenkomt met \( \{t_t,t_v,h_d,h_m\} = \{4,7,5,13\} \)? Dan is \( J_0 = 2439126 \) en
\begin{align*} H & = (5 + 20×12) \bmod{365} = 245 \bmod{365} = 245 \\ T & = (40×4 + 221×7 − 1) \bmod{260} = 1706 \bmod{260} = 146 \\ J & = 2439126 − ((2439126 − 365×146 + 364×245 − 7600) \bmod{18980}) \\ & = 2439126 − (2467416 \bmod{18980}) \\ & = 2439126 − 16 = 2439110 \end{align*}
Pas op! Niet alle mogelijke combinaties van \( \{ h_d, h_m, t_t, t_v \} \) komen voor in de kalender. Je kunt in voorgaande formules elke combinatie invullen, maar er komen alleen nuttige resultaten uit voor combinaties die ook echt in de kalender voorkomen. Dat zijn combinaties waarvoor \( H − T ≡ 4 \pmod{5} \).
In het voorbeeld dat we al steeds gebruiken is \( H = 245 \) en \( T = 146 \), dus \( H − T = 99 ≡ 4 \pmod{5} \), dus deze combinatie komt inderdaad voor in deze kalender.
De Lange Telling telt dagen en heeft een serie steeds langere perioden. De kleinste is 20 dagen, de volgende is 18 keer zo lang (dus 360 dagen), en daarna is elke volgende periode steeds 20 keer zo lang als de vorige. Het getal voor elke periode begint bij 0. Vaak zijn datums in de Lange Telling gegeven met vijf getallen, maar nog langere perioden zijn bekend, tot het negende getal toe. De langst bekende periode komt overeen met ongeveer 63 miljoen jaar. Hieronder gaan we er van uit dat de Lange Telling vijf getallen bevat, en kan het vijfde getal willekeurig groot worden.
De begindatum (0.0.0.0.0) van de Lange Telling komt waarschijnlijk overeen met CJDN \( J_0 = 584283 \) (6 september −3113 in de Juliaanse kalender).
Het omrekenen van Lange Telling naar CJDN gaat als volgt:
\begin{equation} \begin{split} J & = l_1 + 20×(l_2 + 18×(l_3 + 20×(l_4 + 20×l_5))) + J_0 \\ & = l_1 + 20×l_2 + 360×l_3 + 7200×l_4 + 144000×l_5 \end{split} \end{equation}
Welke CJDN komt overeen met Lange Telling \( L = 12.17.12.5.7 \)? Dan is
\[ J = 7 + 20×(5 + 18×(12 + 20×(17 + 20×12))) + 584283 = 2439110 \]
Een CJDN \( J \) omrekenen naar een Haab-datum \( \{h_d,h_m\} \) gaat als volgt:
\begin{align} H & = (J + 65) \bmod 365 \\ h_m & = \floorratio{H}{20} + 1 \\ h_d & = H \bmod 20 \end{align}
\( H \) is het aantal dagen sinds het begin van het huidige Haab-jaar (met \( H = 0 \) voor de eerste dag van het Haab-jaar).
Een voorbeeld: Welke Haab-datum komt overeen met 15 december 1965 = CJDN 2439110? Dan is \( J = 2439110 \) en
\begin{align*} H & = (J + 65) \bmod 365 = 2439175 \bmod 365 = 245 \\ h_m & = \floorratio{245}{20} + 1 = 13 \\ h_d & = 245 \bmod 20 = 5 \end{align*}
dus die dag is 245 dagen sinds het begin van het huidige Haab-jaar en komt overeen met de 5e dag van de 13e maand, dus \( \{5,13\} \).
We rekenen CJDN \( J \) als volgt om naar een Tzolkin-datum \( \{t_t,t_v\} \):
\begin{align} t_t & = ((J + 5) \bmod{13}) + 1 \label{eq:trecena} \\ t_v & = ((J + 16) \bmod{20}) + 1 \label{eq:venteina} \end{align}
Wat is de Tzolkin-datum die overeenkomt met CJDN 2439110? Dan is
\begin{align*} t_t & = ((2439110 + 5) \bmod{13}) + 1 = 3 + 1 = 4 \\ t_v & = ((2439110 + 16) \bmod{20}) + 1 = 6 + 1 = 7 \end{align*}
dus die datum is \( \{4,7\} \).
Het omrekenen van CJDN \( J \) naar Lange Telling \( L ≡ l_5.l_4.l_3.l_2.l_1 \) gaat dan als volgt:
\begin{align} x_5 & = J − J_0 \\ l_5 & = \floorratio{x_5}{144000} \\ x_4 & = x_5 \bmod 144000 \\ l_4 & = \floorratio{x_4}{7200} \\ x_3 & = x_4 \bmod 7200 \\ l_3 & = \floorratio{x_3}{360} \\ x_2 & = x_3 \bmod 360 \\ l_2 & = \floorratio{x_2}{20} \\ l_1 & = x_2 \bmod 20 \end{align}
Welke Lange Telling \( L \) komt overeen met CJDN \( J = 2439110 \)? Dan is
\begin{align*} x_5 & = J − J_0 = 2439110 − 584283 = 1854827 \\ l_5 & = \floorratio{1854827}{144000} = 12 \\ x_4 & = 1854827 \bmod 144000 = 126827 \\ l_4 & = \floorratio{126827}{7200} = 17 \\ x_3 & = 126827 \bmod 7200 = 4427 \\ l_3 & = \floorratio{4427}{360} = 12 \\ x_2 & = 4427 \bmod 360 = 107 \\ l_2 & = \floorratio{107}{20} = 5 \\ l_1 & = 107 \bmod 20 = 7 \end{align*}
Het antwoord is \( L = 12.17.12.5.7 \).
Ik heb een zongebonden maankalender bedacht waarin bijna alle maanden elk jaar hetzelfde aantal dagen hebben. De kalender volgt de seizoenen met behulp van de cyclus van Meton, die 19 jaar duurt. Elk jaar bevat 12 of 13 maanden. De "kortste" jaren van 12 maanden bevatten 354 dagen. De "korte" jaren van 12 maanden bevatten 355 dagen. De "lange" jaren van 13 maanden hebben allemaal 384 dagen. De jaarlengtes zijn:
| jaar | maanden | dagen | type |
|---|---|---|---|
| 1 | 12 | 354 | kortst |
| 2 | 12 | 355 | kort |
| 3 | 13 | 384 | lang |
| 4 | 12 | 354 | kortst |
| 5 | 12 | 354 | kortst |
| 6 | 13 | 384 | lang |
| 7 | 12 | 355 | kort |
| 8 | 13 | 384 | lang |
| 9 | 12 | 354 | kortst |
| 10 | 12 | 354 | kortst |
| 11 | 13 | 384 | lang |
| 12 | 12 | 355 | kort |
| 13 | 12 | 354 | kortst |
| 14 | 13 | 384 | lang |
| 15 | 12 | 354 | kortst |
| 16 | 12 | 355 | kort |
| 17 | 13 | 384 | lang |
| 18 | 12 | 354 | kortst |
| 19 | 13 | 384 | lang |
Dit zijn samen 235 maanden (125 lang, 110 kort) en 6940 dagen in de cyclus van 19 jaar.
Alle oneven maanden (behalve de 13e) zijn 30 dagen lang, en alle even maanden zijn 29 dagen lang, behalve dat in korte en lange jaren (van 355 of 384 dagen) de 12e maand 30 dagen heeft in plaats van 29.
| 354 | 355 | 384 | |
|---|---|---|---|
| maand | dagen | ||
| 1 | 30 | 30 | 30 |
| 2 | 29 | 29 | 29 |
| 3 | 30 | 30 | 30 |
| 4 | 29 | 29 | 29 |
| 5 | 30 | 30 | 30 |
| 6 | 29 | 29 | 29 |
| 7 | 30 | 30 | 30 |
| 8 | 29 | 29 | 29 |
| 9 | 30 | 30 | 30 |
| 10 | 29 | 29 | 29 |
| 11 | 30 | 30 | 30 |
| 12 | 29 | 30 | 30 |
| 13 | 29 | ||
Gegeven jaar \( j \), maand \( m \), en dag \( d \) in deze maankalender kan het lopende dagnummer \( y_2 \) berekend worden als volgt:
\begin{equation} y_2 = 354j + 29m + 30\floorratio{7j − 6}{19} + \floorratio{4j + 8}{19} + \floorratio{7m}{13} + d − 384 \end{equation}
Bijvoorbeeld, welk lopende dagnummer hoort bij dag 27 van maand 9 van jaar 3 in deze kalender? Dan is
\begin{align*} j & = 3 \\ m & = 9 \\ d & = 27 \\ y_2 & = 354×3 + 29×9 + 30\floorratio{7×3 − 6}{19} + \floorratio{4×3 + 8}{19} + \floorratio{7×9}{13} + 27 − 384 \\ & = 1323 + 30\floorratio{15}{19} + \floorratio{20}{19} + \floorratio{63}{13} − 357 \\ & = 1323 + 0 + 1 + 4 − 357 = 971 \end{align*}
Gegeven lopende dagnummer \( y_2 \) zijn jaar \( j \), maand \( m \) en dag \( d \) in deze maankalender te berekenen uit
\begin{align} x' & = \floorratio{19y_2 + 546}{6940} \\ x_2 & = x' + \floorratio{y_2 − 354x' − 30\floorratio{7x' + 1}{19} − \floorratio{4x' + 12}{19}}{385} \\ k_1 & = 13×\left( y_2 − 354x_2 − 30\floorratio{7x_2 + 1}{19} − \floorratio{4x_2 + 12}{19} \right) + 5 \\ j & = x_2 + 1 \\ m & = \floorratio{k_1}{384} + 1 \\ d & = \floorratio{k_1 \bmod 384}{13} + 1 \end{align}
Bijvoorbeeld, welke dag in deze kalender komt overeen met lopende dagnummer 971? Dan is \( y_2 = 971 \) en dan
\begin{align*} x' & = \floorratio{19×971 + 546}{6940} = \floorratio{18995}{6940} = 2 \\ x_2 & = 2 + \floorratio{971 − 354×2 − 30 \floorratio{7×2 + 1}{19} − \floorratio{4×2 + 12}{19}}{385} \\ & = 2 + \floorratio{263 − 30 \floorratio{15}{19} − \floorratio{20}{19}}{385} \\ & = 2 + \floorratio{263 − 0 − 1}{385} = 2 \\ k_1 & = 13×\left( 971 − 354×2 − 30\floorratio{7×2 + 1}{19} − \floorratio{4×2 + 12}{19} \right) + 9 \\ & = 13×\left( 263 − 30\floorratio{15}{19} − \floorratio{20}{19} \right) + 9 \\ & = 13×(263 − 0 − 1) + 5 = 3411 \\ j & = 2 + 1 = 3 \\ m & = \floorratio{3411}{384} + 1 = 9 \\ d & = \floorratio{3411 \bmod 384}{13} + 1 = \floorratio{339}{13} + 1 = 27 \end{align*}
De Chinese kalender is een lunisolaire kalender. De datum van het Chinese Nieuwjaar hangt af van de positie van de Zon en de Maan, maar een preciese manier om die posities uit te rekenen is niet vastgelegd. Hieronder beschrijf ik een paar aspecten van de Chinese kalender.
In de traditionele Chinese kalender heeft elk jaar een naam uit een kringloop van 10 "hemelse stammen" en een naam uit een kringloop van 12 "aardse takken". Voor elk volgende jaar gaan zowel de hemelse stam als de aardse take één omhoog. De (onvertaalbare) hemelse stammen zijn 1. jiǎ, 2. yǐ, 3. bǐng, 4. dīng, 5. wù, 6. jǐ, 7. gēng, 8. xīn, 9. rén, 10. guǐ. De aardse takken zijn 1. zǐ (rat), 2. chǒu (os), 3. yín (tijger), 4. mǎo (konijn), 5. chén (draak), 6. sì (slang), 7. wǔ (paard), 8. wèi (geit), 9. shēn (aap), 10. yǒu (haan), 11. xū (hond), 12. hài (varken).
De hemelse stam \( s \) (van 1 tot 10) en aardse tak \( b \) (van 1 tot 12) kun je als volgt berekenen uit het (astronomische) Gregoriaanse jaarnummer \( j \):
\begin{align} s & = ((j + 6) \bmod 10) + 1 \label{eq:jnaarchinees} \\ b & = ((j + 8) \bmod 12) + 1 \end{align}
Het nummer \( n \) in de gezamelijke kringloop van 60 jaren is
\begin{equation} n = ((j + 56) \bmod 60) + 1 \end{equation}
Bijvoorbeeld, voor het jaar 2000 uit de Gregoriaanse kalender:
\begin{align*} s & = ((2000 + 6) \bmod 10) + 1 = 6 + 1 = 7 \\ b & = ((2000 + 8) \bmod 12) + 1 = 4 + 1 = 5 \\ n & = ((2000 + 56) \bmod 60) + 1 = 16 + 1 = 17 \end{align*}
dus vroeg in het Gregoriaanse jaar 2000 begon een Chinees jaar van de metalen Draak, van de gēng-tak (gēngchén).
De jaren die een bepaalde hemelse stam \( s \) of een bepaalde aardse tak \( b \) hebben zijn
\begin{align} j & ≡ 1983 + s \pmod{10} \\ j & ≡ 1983 + b \pmod{12} \\ j & ≡ 1983 + n \pmod{60} \end{align}
De jaren die zowel hemelse stam \( s \) als aardse tak \( b \) hebben zijn
\begin{equation} j ≡ 1983 + 25b − 24s \pmod{60} \label{eq:chineesnaarj} \end{equation}
Bijvoorbeeld, voor \( s = 7 \) vinden we
\[ j ≡ 1983 + 7 = 1990 \pmod{10} \]
dus 1990 en elke 10 jaar vroeger of later, dus ook 2000.
Voor \( b = 5 \) vinden we
\[ j ≡ 1983 + 5 = 1988 \pmod{12} \]
dus 1988 en elke 12 jaar vroeger of later, dus ook 2000.
Voor \( s = 7 \) en \( b = 5 \) vinden we
\[ j ≡ 1983 + 25×5 − 24×7 = 1940 \pmod{60} \]
dus 1940 en elke 60 jaar vroeger of later, dus ook 2000.
Pas op! Niet elke combinatie van \( s \) en \( b \) is geldig! Alleen combinaties waarvoor \( s ≡ b \pmod{2} \) zijn geldig, dus het verschil tussen \( s \) en \( b \) moet even zijn.
Bijvoorbeeld, de combinatie \( s = 3 \) en \( b = 6 \) komt niet voor in deze kalender, dus is niet geldig. Als je die combinatie in vergelijking \ref{eq:chineesnaarj} invult dan krijg je een antwoord dat er redelijk uitziet: \( j ≡ 1983 + 25×6 − 24×3 = 2061 \pmod{60} \), maar als je \( j = 2061 \) in formules \ref{eq:jnaarchinees}ff stopt dan krijg je \( s = 8 \) en \( b = 6 \), een andere (wel geldige) combinatie dan waarmee je begon.
Het HYSN-systeem is een speciale manier om een nummer aan een jaar te geven. De omrekening van een Gregoriaans (of Juliaans proleptisch) jaartal naar een HYSN-jaartal gaat als volgt:
\begin{align} \{ H − 1, j_2 \} & = \Div(j + 67016, 10800) \\ \{ Y − 1, j_3 \} & = \Div(j_2, 360) \\ \{ S − 1, N − 1 \} & = \Div(j_3, 30) \end{align}
Bijvoorbeeld, welk HYSN-jaartal komt ongeveer overeen met ons jaar 2016? Dan is
\begin{align*} j & = 2016 \\ \{ H − 1, j_2 \} & = \Div(2016 + 67016, 10800) = \Div(69032, 10800) = \{ 6, 4232 \} \\ H & = 7 \\ j_2 & = 4232 \\ \{ Y − 1, j_3 \} & = \Div(4232, 360) = \{ 11, 272 \} \\ Y & = 12 \\ j_3 & = 272 \\ \{ S − 1, N − 1 \} & = \Div(272, 30) = \{ 9, 2 \} \\ S & = 10 \\ N & = 3 \end{align*}
dus het HYSN-jaartal is 0712−1003.
De andere kant op is eenvoudiger. Gegeven \( H \), \( Y \), \( S \) en \( N \) is het Gregoriaanse jaartal
\begin{equation} j = H×10800 + Y×360 + S×30 + N − 78207 \end{equation}
Bijvoorbeeld, HYSN 0712−1003 betekent
\begin{align*} H & = 7 \\ Y & = 12 \\ S & = 10 \\ N & = 3 \\ j & = 7×10800 + 12×360 + 10×30 + 3 − 78207 \\ & = 75600 + 4320 + 300 + 3 − 78207 = 2016 \end{align*}
We kunnen veel kalenderformules afleiden door rechte lijnen te vinden die met afronding de juiste resultaten geven.
We gebruiken speciale notatie voor sommige zaken die verderop nuttig zijn.
\( C(x) \) heeft waarde 1 als aan test \( x \) voldaan is, en anders 0.
\( x∥y \) stelt dat \( x \) een veelvoud is van \( y \).
\( x⊥y \) stelt dat \( x \) geen veelvoud is van \( y \).
\( ⌊x⌋ \) is de vloerfunctie die het dichtstbijzijnde hele getal niet groter dan \( x \) oplevert, dus in de richting van \( −∞ \).
\begin{equation} ⌊x⌉_y ≡ x \bmod y ≡ x − y\floorratio{x}{y} \end{equation}
is de "modulus"-functie die het niet-negatieve verschil geeft tussen \( x \) en het dichtstbijzijnde veelvoud van \( y \) dat niet groter is dan \( x \). Er geldt altijd
\begin{align} x & = ⌊x⌋ + ⌊x⌉_1 \\ x & = y\floorratio{x}{y} + ⌊x⌉_y \end{align}
\( ⌈x⌉ \) is de plafondfunctie die het dichtstbijzijnde hele getal niet kleiner dan \( x \) oplevert, dus in de richting van \( +∞ \).
\begin{equation} ⌈x⌋_y ≡ x \bdom y ≡ y\ceilratio{x}{y} − x \end{equation}
is de functie die het niet-negatieve verschil geeft tussen \( x \) en het dichtstbijzijnde veelvoud van \( y \) dat niet kleiner is dan \( x \). Er geldt altijd
\begin{align} x = ⌈x⌉ − ⌈x⌋_1 \\ x = y\ceilratio{x}{y} − ⌈x⌋_y \end{align}
\( \{ m, n \} = \Div(x,y) \) is een functie die twee uitkomsten \( m, n \) geeft zodat \( x = my + n \) met \( m \) een heel getal, \( 0 ≤ n \lt y > 0 \) en
\begin{align*} m & = \floorratio{x}{y} \\ n & = ⌊x⌉_y = x \bmod y \end{align*}
Een paar handige relaties:
\begin{align} ⌈x⌉ − ⌊x⌋ & = C(x⊥1) \\ ⌈x⌋_1 + ⌊x⌉_1 & = C(x⊥1) \\ ⌊−x⌋ & = −⌈x⌉ = −⌊x⌋ − C(x⊥1) \\ ⌈−x⌉ & = −⌊x⌋ = −⌈x⌉ + C(x⊥1) \\ ⌊x + y⌋ & = ⌊x⌋ + ⌊y⌋ + C(⌊x⌉_1 + ⌊y⌉_1 ≥ 1) \\ ⌊x + y⌋_1 & = ⌊x⌋_1 + ⌊y⌋_1 − C(⌊x⌉_1 + ⌊y⌉_1 ≥ 1) \\ ⌊x − y⌋ & = ⌊x⌋ − ⌊y⌋ − C(⌊x⌉_1 \lt ⌊y⌉_1) \\ ⌊x − y⌉_1 & = ⌊x⌉_1 − ⌊y⌉_1 + C(⌊x⌉_1 \lt ⌊y⌉_1) \\ ⌈x + y⌉ & = ⌈x⌉ + ⌈y⌉ − C(⌈x⌋_1 + ⌈y⌋_1 ≥ 1) \\ ⌈x + y⌉_1 & = ⌈x⌉_1 + ⌈y⌉_1 − C(⌈x⌋_1 + ⌈y⌋_1 ≥ 1) \\ ⌈x − y⌉ & = ⌈x⌉ − ⌈y⌉ + C(⌈x⌋_1 \lt ⌈y⌋_1) \\ ⌈x − y⌉_1 & = ⌈x⌉_1 − ⌈y⌉_1 + C(⌈x⌋_1 \lt ⌈y⌋_1) \\ ⌊x⌉_1 + ⌈x⌋_1 & = C(x⊥1) \end{align}
Veel van de kalenderberekeningen die hieronder beschreven worden zijn van de vorm
\begin{align} y & = \floorratio{fx + t}{d} \label{eq:template} \\ e & = (fx + t) \bmod d \label{eq:template-e} \end{align}
ofwel
\[ \{y, e\} = \Div(fx + t, d) \]
met
\begin{equation} fx + t = dy + e \end{equation}
waar \( f \), \( t \), \( d \) vaste hele getallen zijn met \( f, d \gt 1 \) en \( 0 ≤ e \lt d \) en \( y \), \( x \) wisselende maar wel hele getallen zijn. Het tussenresultaat \( fx + t \) is dan meestal veel groter dan \( x \) en dan het eindresultaat. Dit kan problemen geven op rekenmachines en in computerprogramma's, waarop hele getallen niet groter mogen zijn dan een bepaalde limiet die we hier \( w \) noemen. (Getallen met drijvende komma, zoals 1.234 × 1020, mogen veel groter zijn, maar ook daarvan is de nauwkeurigheid beperkt, en dan moet je bang zijn voor afrondfouten.)
Tussenresultaten groter dan \( w \) geven problemen, dus zou om problemen te voorkomen ongeveer \( |fx| ≤ w \) moeten zijn, dus \( |x| ≤ \frac{w}{f} \), wat veel kleiner is dan \( w \) zelf.
Als \( |t| ≥ d \), dan kunnen we formule \eqref{eq:template}ff omschrijven naar
\begin{align} fx + t & = fx + \floorratio{t}{d} d + (t \bmod d) \\ y & = \floorratio{t}{d} + \floorratio{fx + (t \bmod d)}{d} \\ e & = (fx + (t \bmod d)) \bmod d \end{align}
waarin de tweede term van de laatste twee formules dezelfde vorm heeft als formule \eqref{eq:template}ff, als je \( t \bmod d \) hernoemt tot een nieuwe \( t \). We nemen hieronder aan dat dat gebeurd is, en dus dat \( |t| \lt d \).
Als \( f \gt d \), dan kunnen we formule \eqref{eq:template}ff omschrijven naar
\begin{align} fx + t & = \left( \floorratio{f}{d} d + (f \bmod d) \right) x + t \\ y & = \floorratio{f}{d} x + \floorratio{(f \bmod d) x + t}{d} \label{eq:template2} \\ e & = ((f \bmod d)x + t) \bmod d \end{align}
Dan mag \( |x| \) bijna zo groot zijn als \( \frac{w}{f \bmod d} \) voordat er problemen komen.
Formules \eqref{eq:template2}ff hebben weer de vorm van formule \eqref{eq:template}ff, als je \( f \bmod d \) hernoemt tot een nieuwe \( f \). Hieronder nemen we aan dat dat gebeurd is, en dus dat \( f \lt d \).
Als we eerst de deling door \( d \) zouden kunnen doen en pas daarna de vermenigvuldiging met \( f \), dan zouden de tussenresultaten kleiner blijven dan \( x \) zelf. We zouden zoiets als \( f\floorratio{x}{d} \) willen berekenen wat ongeveer gelijk is aan \( y \), en dan daar een correctie op toepassen om echt \( y \) te krijgen.
We kunnen formule \eqref{eq:template}ff herschrijven tot
\begin{align} fx + t & = f\left( \floorratio{x}{d} d + (x \bmod d) \right) + t \\ y & = f\floorratio{x}{d} + \floorratio{f(x \bmod d) + t}{d} \label{eq:detour1} \\ e & = (f(x \bmod d) + t) \bmod d \end{align}
Nu is het grootste tussenresultaat niet meer \( fx + t \), dat zo groot kan worden als \( fw \), maar \( f(x \bmod d) + t \), dat niet groter kan worden dan \( fd \).
Formules \eqref{eq:detour1}ff hebben weer de vorm van formule \eqref{eq:template}ff, als je \( x \bmod d \) hernoemt tot een nieuwe \( x \).
Bijvoorbeeld, stel dat \( d = 12345 \), \( f = 8432 \), \( t = 871 \), en \( w = 2^{31} − 1 = 2.147.483.647 \), en dat we \( y \), \( e \) willen uitrekenen voor \( x = 300.000 \).
We gebruiken de omweg van formule \eqref{eq:detour1}. We vinden
\begin{align*} \floorratio{x}{d} & = \floorratio{300000}{12345} = 24 \\ x \bmod d & = 300000 \bmod 12345 = 3720 \\ y = & f\floorratio{x}{d} + \floorratio{f(x \bmod d) + t}{d} \\ & = 8432×24 + \floorratio{8432×3720 + 871}{12345} \\ & = 202368 + \floorratio{31367911}{12345} \\ & = 202368 + 2540 = 204908 \\ e & = 31367911 \bmod 12345 = 11611 \end{align*}
Het grootste tussenresultaat is 31.367.911, wat ruim kleiner is dan \( w \).
Als we willekeurig grote getallen konden gebruiken, dan hadden we gevonden
\begin{align*} y & = \floorratio{fx + t}{d} = \floorratio{8432×300000 + 871}{12345} = \floorratio{2529600871}{12345} = 204908 \\ e & = 2529600871 \bmod 12345 = 11611 \end{align*}
dus hetzelfde resultaat, maar dan met een tussenresultaat 2.529.600.871 dat groter is dan \( w \).
Maar soms is een tussenresultaat van (bijna) \( fd \) ook nog te groot, want \( fd \) kan veel groter zijn dan \( w \) ook als \( d \) en \( f \) apart veel kleiner zijn dan \( w \). Als \( fd \) niet groter mag worden dan \( w \), dan mogen \( d \) en \( f \) niet allebei groter zijn dan \( \sqrt{w} \), en dat is een stuk kleiner dan \( w \) zelf. Bijvoorbeeld, voor 32-bitsgetallen is \( w = 2^{31} - 1 = 2.147.483.647 \) en is \( \sqrt{w} ≈ 46341 \), dus zelfs als \( d \) en \( f \) allebei maar iets groter zijn dan 46431, wat toch niet heel erg groot is, dan is \( fd \) al te groot om in een 32-bitsgetal te passen.
Stel we kiezen een \( P \gt 0 \) en berekenen daarmee eenmalig
\begin{align} \{Q, R\} & = \Div(fP, d) \\ Q & = \floorratio{fP}{d} \\ R & = fP \bmod d \end{align}
waarmee
\begin{equation} fP = dQ + R \end{equation}
Bepaal dan voor elke gewenste \( x \)
\begin{align} \{q, r\} & = \Div(x, P) \\ q & = \floorratio{x}{P} \\ r & = x \bmod P \end{align}
zodat
\begin{equation} x = qP + r \end{equation}
en dan
\begin{align} fx + t & = fqP + fr + t = qdQ + qR + fr + t \\ y & = \floorratio{qdQ + qR + fr + t}{d} = qQ + \floorratio{qR + fr + t}{d} \label{eq:detour2} \\ e & = (qdQ + qR + fr + t) \bmod d = (qR + fr + t) \bmod d \end{align}
Nu is het grootste tussenresultaat \( m ≡ qR + fr + t \). We weten dat \( r \lt P \), dus \( fr \lt fP \). Om niet in de problemen te komen moet \( |m| ≤ w \) zijn. We hebben
\[ |m| ≤ \left| \floorratio{x}{P} \right| R + fP + |t| ≤ |x|\frac{R}{P} + fP + |t| \]
dus moeten we hebben
\[ |x|\frac{R}{P} + fP + |t| ≤ w \]
Als \( R = 0 \), dan moeten we hebben \( fP + |t| ≤ w \) ofwel
\begin{equation} P ≤ \frac{w − |t|}{f} \end{equation}
Als \( R \gt 0 \) dan moeten we hebben
\begin{equation} |x| ≤ X ≡ (w − fP − |t|) \frac{P}{R} \end{equation}
We zien dat \( 0 \lt P \lt \frac{w − |t|}{f} ≤ \frac{w}{f} \) moet zijn, want anders is \( X ≤ 0 \).
We willen het bereik van \( x \) zo groot mogelijk hebben, dus zoeken we \( P \) en \( R \) zodat \( X \) zo groot mogelijk wordt, gegeven \( w \), \( f \), \( t \). \( R \) moet dus liefst klein zijn.
Als we formules \eqref{eq:detour1}ff gebruiken dan is het voldoende dat \( X ≥ d \) om alle waarden \( |x| ≤ w \) aan te kunnen, want dan kunnen we formules \eqref{eq:detour1}ff gebruiken om eerst \( |x| \lt d \) te maken. Als we formules \eqref{eq:detour1}ff niet gebruiken, dan moet \( X ≥ w \) zijn om alle waarden \( |x| \lt w \) aan te kunnen.
Er kunnen meerdere combinaties van \( P \), \( Q \) en \( R \) zijn die \( X ≥ w \) of \( X ≥ d \) geven, en die zijn dan allemaal goed genoeg. Binnen die groep geven we weer de voorkeur aan kleine \( P \), \( Q \), \( R \), want dat rekent gemakkelijker.
De allerkleinste \( R \) ongelijk aan nul is gelijk aan de grootste gemene deler \( c \) van \( d \) en \( f \), en de bijbehorende \( P, Q \gt 0 \) kunnen gevonden worden met het Uitgebreide Algoritme van Euclides ― of door alle \( d \) of \( w/f \) (neem de kleinste) mogelijkheden voor \( P \) af te lopen.
Het Uitgebreide Algoritme van Euclides levert een relatie op van de vorm
\begin{equation} φf − δd = c \end{equation}
voor \( c \gt 0 \) (als je \( c \lt 0 \) vindt, vermenigvuldig dan \( φ \), \( δ \) en \( c \) met −1). Als \( φ \) en \( δ \) positief zijn, dan is \( P_1 = φ \) en \( Q_1 = δ \), maar \( φ \) en \( δ \) kunnen ook negatief zijn. In het algemeen bereken je \( P_1 \), \( Q_1 \), \( R_1 \) als volgt:
\begin{align*} P_1 & = φ \bmod \frac{d}{c} \\ Q_1 & = δ \bmod \frac{f}{c} \\ R_1 & = c \end{align*}
Als die \( P = P_1 \), \( Q = Q_1 \), \( R = R_1 \) bij elkaar horen, dan is
\begin{equation} fP_1 − dQ_1 = R_1 \end{equation}
Dan horen ook \( P = kP_1 \), \( Q = kQ_1 \), \( R = kR_1 \) bij elkaar, voor hele \( 0 \lt k ≤ \floorratio{d}{R_1} \), want \( R \) moet kleiner dan \( d \) blijven. Om ook grotere \( k \) aan te kunnen is het daarom beter om \( Q \) en \( R \) volgens hun definitie uit \( P \) te berekenen.
\begin{align*} P & = kP_1 \\ Q & = \floorratio{fP}{d} = \floorratio{kfP_1}{d} = \floorratio{k(dQ_1 + R_1)}{d} = kQ_1 + \floorratio{kR_1}{d} \\ R & = fP \bmod d = k(dQ_1 + R_1) \bmod d = kR_1 \bmod d \end{align*}
dus het beperken van \( R \) tot waarden kleiner dan \( d \) leidt ertoe dat \( Q \) groter wordt, om toch \( fP − dQ = R \) te hebben. Als \( kR_1 \lt d \) dan is \( P = kP_1 \), \( Q = kQ_1 \), \( R = kR_1 \) zoals verwacht.
Het heeft weinig zin om \( P ≥ d \) toe te laten, want anders kan het grootste tussenresultaat groter of gelijk worden aan \( fP = fd \), en dat kan groter worden dan \( w \), want als dat niet zo was dan hadden we formule \eqref{eq:detour1} kunnen gebruiken en was de huidige meer ingewikkelde methode helemaal niet nodig. We zoeken dus naar \( P \lt d \).
Als \( P_2 = P + m\frac{d}{c} \), met \( c \) de grootste gemene deler van \( f \) en \( d \), dan
\begin{align*} Q_2 & = \floorratio{fP_2}{d} = \floorratio{fP + m\frac{fd}{c}}{d} = \floorratio{fP}{d} + m\frac{f}{c} = Q + m\frac{f}{c} \\ R_2 & = fP_2 − dQ_2 = fP + m\frac{fd}{c} − \left( dQ + m \frac{df}{c} \right) = fP − dQ = R \end{align*}
dus als we bij \( P \) een veelvoud van \( \frac{d}{c} \) optellen of aftrekken, dan verschuift \( Q \) over het bijbehorende veelvoud van \( \frac{f}{c} \) en blijft \( R \) hetzelfde. In het bijzonder kunnen we nemen
\begin{align} P & = kP_1 \bmod d \\ Q & = kQ_1 \bmod f \\ R & = kR_1 \bmod d \end{align}
voor \( k \lt d \) want er zijn niet meer dan zoveel unieke waarden van \( P \lt d \).
Bijvoorbeeld, stel dat \( d = 765433 \), \( f = 25920 \), \( t = 13835 \), \( w = 2^{31} −1 = 2147483647 \). Dan is \( \frac{w}{f} = \frac{2^{31} − 1}{25920} ≈ 82850 \), dus zoeken we een \( P \lt 82850 \lt 765433 \), en een zo klein mogelijke \( R \).
Het Uitgebreide Algoritme van Euclides (of een zoektocht) voor deze \( d \) en \( f \) levert op dat \( 99902f − 3383d = 1 \), dus \( P_1 = 99902 \), \( Q_1 = 3383 \), \( R_1 = 1 \). Dan
\begin{align*} P & = kP_1 \bmod d \\ Q & = kQ_1 \bmod f \\ R & = kR_1 \bmod d \end{align*}
De volgende tabel toont enkele combinaties voor kleine \( R \).
| \({R}\) | \({P}\) | \({Q}\) | \({Q′}\) |
|---|---|---|---|
| 1 | 99902 | 3383 | 3383 |
| 2 | 199804 | 6766 | 6766 |
| 7 | 699314 | 23681 | 23681 |
| 8 | 33783 | 1144 | 1144 |
| 9 | 133685 | 4527 | 4527 |
De volgende tabel toont de combinaties met de grootste \( X \).
| \({R}\) | \({P}\) | \({Q}\) | \({X}\) |
|---|---|---|---|
| 8 | 33783 | 1144 | 5.4 × 1012 |
| 16 | 67566 | 2288 | 1.7 × 1012 |
| 31 | 35230 | 1193 | 1.4 × 1012 |
| 54 | 36677 | 1242 | 8.1 × 1011 |
| 39 | 69013 | 2337 | 6.3 × 1011 |
Al deze \( X \) zijn ruim groter dan \( w ≈ 2.15×10^{9} \). \( X ≥ w \) voor 1498 waarden van \( R \) tussen 8 en 20312, en \( X ≥ d \) voor 82576 waarden van \( R \) tussen 8 en 765426. Omdat we oplossingen voor \( X ≥ w \) vonden hebben we formules \eqref{eq:detour1}ff niet nodig. Binnen de groep met \( X ≥ w \) zoeken we naar de kleinste waarde van \( PQR \). We vinden
| \({R}\) | \({P}\) | \({Q}\) | \({PQR}\) | \({X}\) |
|---|---|---|---|---|
| 23 | 1447 | 49 | 1.6 × 106 | 1.33 × 1011 |
| 46 | 2894 | 98 | 1.3 × 107 | 1.30 × 1011 |
| 544 | 945 | 32 | 1.6 × 107 | 3.69 × 109 |
| 69 | 4341 | 147 | 4.4 × 107 | 1.28 × 1011 |
| 92 | 5788 | 196 | 1.0 × 108 | 1.26 × 1011 |
We kiezen \( P = 1447 \), dan \( R = 23 \) en \( Q = 49 \).
Nu rekenen we \( y\), \( e \) uit voor \( x = 1710321 \). Dan vinden we
\begin{align*} q & = \floorratio{x}{P} = \floorratio{1710321}{1447} = 1181 \\ r & = x \bmod P = 1710321 \bmod 1447 = 1414 \\ y & = qQ + \floorratio{qR + fr + t}{d} \\ & = 1181×49 + \floorratio{1181×23 + 25920×1414 + 13835}{765433} \\ & = 57869 + \floorratio{36691878}{765433} \\ & = 57869 + 47 = 57916 \\ e & = 36691878 \bmod 765433 = 716527 \end{align*}
Het grootste tussenresultaat was 36.691.878, wat ruim kleiner is dan \( w \).
Als we willekeurige grote tussenresultaten mochten hebben, dan hadden we gevonden
\begin{align*} y & = \floorratio{fx + t}{d} = \floorratio{25920×1710321 + 13835}{765433} = \floorratio{44331534155}{765433} = 57916 \\ e & = 44331534155 \bmod 765433 = 716527 \end{align*}
dus hetzelfde resultaat, maar met een veel groter tussenresultaat 44.331.534.155.
Nog een voorbeeld: \( d = 146097 \), \( f = 4800 \), \( t = 15793 \), \( w = 2^{31} − 1 = 2147483647 \). Dan is \( \frac{w}{f} = \frac{2^{31} − 1}{4800} ≈ 447392 \), dus we zoeken een \( P \lt 146097 \lt 447392 \) en een zo klein mogelijke \( R \).
Met het Uitgebreide Algoritme van Euclides (of een zoektocht) vinden we dat \( −15188f + 499d = 3 \) en er is geen som van een veelvoud van \( f \) en een veelvoud van \( d \) die dichter bij 0 ligt. Dus
\begin{align*} φ & = −15188 \\ δ & = −499 \\ c & = 3 \\ P_1 & = −15188 \bmod \frac{146097}{3} = −15188 \bmod 48699 = 33511 \\ Q_1 & = −499 − \floorratio{−15188×3}{146097} \frac{4800}{3} = −499 − (−1)×1200 = 1101 \\ R_1 & = 3 \end{align*}
Even controleren:
\[ fP_1 − dQ_1 = 4800×33511 − 146097×1101 = 3 = R_1 \]
Voor kleine \( R \) vinden we de volgende combinaties:
| \({k}\) | \({R}\) | \({P}\) | \({Q}\) |
|---|---|---|---|
| 1 | 3 | 33511 | 1101 |
| 2 | 6 | 67022 | 2202 |
| 3 | 9 | 100533 | 3303 |
| 4 | 12 | 134044 | 4404 |
Er zijn 57132 combinaties waarvoor \( X ≥ w \). De combinaties met de kleinste \( PQR \) zijn:
| \({R}\) | \({P}\) | \({Q}\) | \({PQR}\) | \({X}\) |
|---|---|---|---|---|
| 48 | 487 | 16 | 3.74 × 105 | 2.18 × 1010 |
| 9 | 3135 | 103 | 2.91 × 106 | 7.43 × 1011 |
| 96 | 974 | 32 | 2.99 × 106 | 2.17 × 1010 |
| 375 | 761 | 25 | 7.13 × 106 | 4.35 × 109 |
| 144 | 1461 | 48 | 1.01 × 107 | 2.17 × 1010 |
We kiezen \( P = 487 \), dan \( Q = 16 \) en \( R = 48 \). We rekenen \( y\), \( e \) uit voor \( x = 731767 \). Dan is
\begin{align*} q & = \floorratio{731767}{487} = 1502 \\ r & = 731767 \bmod 487 = 293 \\ y & = 1502×16 + \floorratio{1502×48 + 4800×293 + 15793}{146097} \\ & = 24032 + \floorratio{1494289}{146097} = 24032 + 10 = 24042 \\ e & = 1494289 \bmod 146097 = 33319 \end{align*}
Het grootste tussenresultaat is 1.494.289, wat ruim kleiner is dan \( w \). Met de originele formule hadden we gevonden
\begin{align*} y & = \floorratio{4800×731767 + 15793}{146097} = \floorratio{3512497393}{146097} = 24042 \\ e & = 3512497393 \bmod 146097 = 33319 \end{align*}
dus dezelfde uitkomsten maar dan met een grootste tussenresultaat gelijk aan 3.512.497.393, wat ruim groter is dan \( w \).
Ik heb voor alle \( w \) van 3 tot 1024 onderzocht wat de grootste waarden van \( f \) en \( d \) zijn waarvoor oplossingen te vinden zijn met \( X ≥ d \) of \( X ≥ w \), en wat de grootste \( P \), \( Q \), \( R \) en \( X \) zijn voor zulke oplossingen, en het grootste aantal \( c \) oplossingen, en het totale aantal \( N \) van combinaties van \( f \) en \( d \) waarvoor tenminste één oplossing is. Ik vind
\begin{align} \max(f_w) & ≈ \floorratio{w}{4} \\ \max(f_d) & ≈ \floorratio{w}{3} \\ \max(d_w) & ≈ w − 5 + (w \bmod 2) \\ \max(d_d) & ≈ w − 1 \\ \max(c_w) & ≈ \floorratio{w+8}{16} \\ \max(c_d) & ≈ \floorratio{w−1}{2} \\ \max(P_w) & ≈ \floorratio{w}{2} − 2 + (w \bmod 2) \\ \max(P_d) & ≈ \floorratio{w}{2} − 1 \\ \max(Q) & ≈ \floorratio{2\sqrt{w − 1} − 3}{2} \\ \max(R_w) & ≈ \floorratio{\sqrt{w + 1} − 1}{2} \\ \max(R_d) & ≈ \frac{\sqrt{w(w + 1100)}}{25} \\ \max(X) & ≈ \floorratio{w^2}{8} \\ N_w & ≈ \frac{1}{5}w^{5/3} \\ N_d & ≈ \frac{1}{3}w^{5/3} \end{align}
waar de variabelen met subscript \( w \) alleen slaan op \( X \gt w \), die met subscript \( d \) alleen op \( X \gt d \), en die zonder subscript slaan op allebei. De formules voor \( \max(R_d) \), \( N_w \) en \( N_d \) zijn benaderingen; de andere formules zijn exact voor \( 10 ≤ w ≤ 1024 \).
Bijvoorbeeld, voor \( w = 1023 \) vind ik
\begin{align*} \max(f_w) & ≈ \floorratio{1023}{4} = 255 \\ \max(f_d) & ≈ \floorratio{1023}{3} = 341 \\ \max(d_w) & ≈ 1023 − 5 + (1023 \bmod{2}) = 1019 \\ \max(d_d) & ≈ 1023 − 1 = 1022 \\ \max(c_w) & ≈ \floorratio{1023 + 8}{16} = 64 \\ \max(c_d) & ≈ \floorratio{1023 − 1}{2} = 511 \\ \max(P_w) & ≈ \floorratio{1023}{2} − 2 + (1023 \bmod{2}) = 510 \\ \max(P_d) & ≈ \floorratio{1023}{2} − 1 = 510 \\ \max(Q) & ≈ \floorratio{2×\sqrt{1023 − 1} − 3}{2} ≈ ⌊30.47⌋ = 30 \\ \max(R_w) & ≈ \floorratio{\sqrt{1023 + 1} − 1}{2} ≈ ⌊15.50⌋ = 15 \\ \max(R_d) & ≈ \frac{\sqrt{1023 × (1023 + 1100)}}{25} ≈ 58.95 \\ \max(X) & ≈ \floorratio{1023^2}{8} = 130816 \\ N_w & ≈ \frac{1}{5}1023^{5/3} ≈ 20772.52 \\ N_d & ≈ \frac{1}{3}1023^{5/3} ≈ 34620.87 \end{align*}
Deze waarden kloppen allemaal, behalve dat \( R_d = 59 \), \( N_w = 20014 \) en \( N_d = 33937 \).
Als we bovenstaande formules extrapoleren naar \( w = 2^{31} − 1 \) (voor waarden met een breedte van 32 bits), dan vinden we ongeveer
\begin{align*} \max(f_w) & ≈ 5.4×10^8 \\ \max(f_d) & ≈ 7.2×10^8 \\ \max(d) & ≈ 2.1×10^9 \\ \max(c_w) & ≈ 1.3×10^8 \\ \max(c_d) & ≈ 1.1×10^9 \\ \max(P) & ≈ 1.1×10^9 \\ \max(Q) & ≈ 46340 \\ \max(R_w) & ≈ 23170 \\ \max(R_d) & ≈ 8.6×10^7 \\ \max(X) & ≈ 5.8×10^{17} \\ N_w & ≈ 7.1×10^{14} \\ N_d & ≈ 1.2×10^{15} \end{align*}
dus als we zoeken naar een oplossing voor \( X ≥ w \) (zodat we formules \eqref{eq:detour1}ff niet nodig hebben) dan hoeven we hooguit 23170 verschillende waarden van \( R \) te proberen. Als zo'n oplossing niet bestaat, dan zoeken we naar een oplossing voor \( X ≥ d \) (waarbij we formules \eqref{eq:detour1} wel nodig hebben) en moeten we tot ongeveer 86 miljoen waarden van \( R \) proberen, wat nog steeds veel minder is dan de tot 1100 miljoen waarden van \( P \).
Voor een gegeven \( w \) is er voor lang niet alle combinaties van \( d \) en \( f \) tenminste één oplossing met \( X ≥ w \) of \( X ≥ d \). Bijvoorbeeld, voor \( w = 499 \) zijn er maar 6554 combinaties van \( d \) en \( f \) met tenminste één oplossing met \( X ≥ w \), en 10560 combinaties met tenminste één oplossing met \( X ≥ d \), terwijl er \( \frac{1}{2} (w − 2)×(w − 3) = 123256 \) combinaties zijn met \( 2 ≤ f \lt d \lt w \). Hoe groter \( f \) is, hoe kleiner de kans dat er een oplossing is voor de combinatie van die \( f \) en een willekeurige \( d \gt f \).
Echter, als \( f \) en \( d \) flink kleiner zijn dan \( w \) dan is er wel een goede kans op een oplossing. Bijvoorbeeld, voor \( w = 2^{31} − 1 \) en voor \( f \) en \( d \) in de buurt van \( f ≈ 25920 \) en \( d ≈ 765433 \) is er maar voor ongeveer 1 op de 9100 combinaties van \( f \) en \( d \) geen oplossing met \( X ≥ d \), en voor maar ongeveer 1 op de 54 combinaties geen oplossing met \( X ≥ w \).
We spreken voor het gemak over een kalender met alleen "dagen" en "maanden", waarbij de maanden langer zijn dan dagen, maar de formules werken natuurlijk ook voor andere tijdseenheden. Over kalenders met meer dan twee tijdseenheden hebben we het later.
In het simpelste geval is de gemiddelde lengte van de maand gelijk aan \( p \) dagen en zijn alle maanden óf \( ⌊p⌋ \) óf \( ⌊p⌋ + 1 \) dagen lang. Het doorlopende dagnummer \( y \) hangt op de volgende manier af van maandnummer \( x \) en dagnummer-in-de-maand \( z \):
\begin{align} c(x) & ≡ ⌊px + r⌋ \\ y & ≡ c(x) + z \end{align}
waarbij \( x \), \( y \), \( c(x) \), \( z \) hele getallen zijn, en \( p ≥ 1 \) en \( r \) voor een bepaalde kalender vaste waarden hebben. De eerste maand heeft \( x = 0 \) en de eerste dag van de maand heeft \( z = 0 \), want dat rekent eenvoudiger.
De eerste dag (\( z = 0 \)) van de eerste maand (\( x = 0 \)) heeft lopende dagnummer \( y = 0 \), dus
\begin{equation} ⌊r⌋ = 0 \end{equation}
De lengte \( L(x) \) van maand \( x \) is
\begin{equation} \begin{split} L(x) & = c(x + 1) − c(x) \\ & = ⌊px + r + p⌋ − ⌊px + r⌋ \\ & = ⌊px + r⌋ + ⌊p⌋ + C(⌊px + r⌉_1 + ⌊p⌉_1 ≥ 1) − ⌊px + r⌋ \\ & = ⌊p⌋ + C(⌊px + r⌉_1 + ⌊p⌉_1 ≥ 1) \end{split} \end{equation}
Elke maand is \( ⌊p⌋ \) of \( ⌊p⌋ + 1 \) dagen lang. Maand \( x \) is lang (met \( ⌊p⌋ + 1 \) dagen) als \( ⌊px + r⌉_1 + ⌊p⌉_1 ≥ 1 \). Gemiddeld is er na elke
\begin{equation} Q = \frac{1}{⌊p⌉_1} \label{eq:Q} \end{equation}
maanden, maar dat is niet altijd een heel getal, dus in de praktijk is het aantal maanden tussen twee opeenvolgende lange maanden gelijk aan \( ⌊Q⌋ \) of \( ⌈Q⌉ \).
Met \( r = 0 \) krijgen we een bepaald patroon van lange en korte maanden. Stel dat dat patroon op zich wel goed is, maar wel \( a \) maanden verschoven moet worden zodat maand \( x_0 \) in de kalender met \( r = 0 \) overeenkomt met maand \( x = x_0 + a \) in de nieuwe kalender. Dan
\begin{equation} \begin{split} c(x) & = c(x_0 + a) − c(a) \\ & = ⌊p(x_0 + a)⌋ − ⌊pa⌋ \\ & = ⌊px_0 + pa − ⌊pa⌋⌋ \\ & = ⌊px_0 + ⌊pa⌉_1⌋ \end{split} \end{equation}
dus
\begin{equation} r = ⌊pa⌉_1 \end{equation}
Het aftrekken van \( c(a) \) zorgt ervoor dat \( c(0) = 0 \).
Hoe gaan we van \( y \) terug naar \( x \)?
\begin{equation} \begin{split} y & = ⌊px + r⌋ + z \\ px + r + z − 1 & \lt y ≤ px + r + z \\ x & \lt \frac{y − z + 1 − r}{p} ≤ x + \frac{1}{p} ≤ x + 1 \end{split} \end{equation}
\( x \) moet een heel getal zijn, en er is maar één heel getal dat aan de laatste regel met ongelijkheden voldoet, en dat is
\begin{equation} x = \ceilratio{y − z + 1 − r}{p} − 1 \end{equation}
Om bovenstaande formule te gebruiken moeten we \( z \) al weten, maar die weten we in het algemeen nog niet. Voor \( z = 0 \) is de formule
\begin{equation} x = \ceilratio{y + 1 − r}{p} − 1 \end{equation}
en dat is zeker goed voor \( y \) waarvoor \( z = 0 \) (dus voor de eerste dag van elke maand). Werkt die ook voor andere \( z \)?
\begin{align} \begin{split} x & = \ceilratio{y + 1 − r}{p} − 1 \\ & = \ceilratio{⌊px + r⌋ + z + 1 − r}{p} − 1 \\ & = \ceilratio{px + r − ⌊px + r⌉_1 + z + 1 − r}{p} − 1 \\ & = x − 1 + \ceilratio{−⌊px + r⌉_1 + z + 1}{p} \end{split} \\ \begin{split} 1 & = \ceilratio{−⌊px + r⌉_1 + z + 1}{p} \\ 0 & \lt \frac{−⌊px + r⌉_1 + z + 1}{p} ≤ 1 \\ 0 & \lt −⌊px + r⌉_1 + z + 1 ≤ p \\ ⌊px + r⌉_1 − 1 & \lt z ≤ p − 1 + ⌊px + r⌉_1 \\ 0 & ≤ z ≤ ⌊p⌋ − 1 + ⌊p⌉_1 + ⌊px + r⌉_1 \end{split} \end{align}
Dus \( z \) mag altijd tenminste zo groot worden als \( ⌊p⌋ − 1 \) (dus tenminste \( ⌊p⌋ \) dagen in elke maand), en mag gelijk worden aan \( ⌊p⌋ \) (dus \( ⌊p⌋ + 1 \) dagen in de maand) als \( ⌊p⌉_1 + ⌊px + r⌉_1 ≥ 1 \), wat precies de eis is waaraan maand \( x \) moet voldoen om een lange maand te zijn, dus dat klopt met elkaar. De maand \( x \) die hoort bij lopende dagnummer \( y \) is
\begin{equation} x = ξ(y) ≡ \ceilratio{y + 1 − r}{p} − 1 \label{eq:ξ} \end{equation}
We vonden eerder dat \( ⌊r⌋ = 0 \), en dan is ook \( ξ(0) = 0 \) zoals het hoort: de dag met lopende dagnummer 0 valt altijd in de maand met lopende maandnummer 0.
We zullen meer formules van dit type tegenkomen, dus kijken we wat meer in het algemeen naar
\begin{equation} ξ(y) = \ceilratio{y + t}{p} − 1\label{eq:ξgeneric} \end{equation}
Dan is
\begin{equation} \begin{split} c(ξ(y)) & = \left\lfloor p \left( \ceilratio{y + t}{p} − 1 \right) + r \right\rfloor \\ & = \left\lfloor p\left( \frac{y + t}{p} − 1 + \left\lceil \frac{y + t}{p} \right\rfloor_1 \right) + r \right\rfloor \\ & = \left\lfloor y + t − p + \left\lceil y + t \right\rfloor_p + r \right\rfloor \\ & = y + \left\lfloor t + r − p + \left\lceil y + t \right\rfloor_p \right\rfloor \end{split} \end{equation}
\begin{equation} \begin{split} z & = y − c(ξ(y)) \\ & = −\left\lfloor t + r − p + \left\lceil y + t \right\rfloor_p \right\rfloor \label{eq:z} \end{split} \end{equation}
We kunnen de formules voor \( x \) en \( z \) omschrijven zodat we \( \Div \) kunnen gebruiken:
\begin{align} k' & = y + t \\ \{m', n' \} & = \Div(k', p) \\ m' & = \floorratio{k'}{p} \\ n' & = ⌊k'⌉_p = k' \bmod p \\ x & = m' − C(n' = 0) \\ z & = ⌈n' + pC(n' = 0) − t − r⌉ \end{align}
Formule \eqref{eq:ξ} is als formule \eqref{eq:ξgeneric} als \( t = 1 − r \). Dan gaan we als volgt van lopende maandnummer \( x \) en dagnummer \( z \) in de maand naar lopende dagnummer \( y \):
\begin{align} c(x) & = ⌊px + r⌋ \\ y & = c(x) + z \label{eq:xnaary} \end{align}
en van \( y \) naar \( x \) en \( z \):
\begin{align} x & = \ceilratio{y + 1 − r}{p} − 1 \label{eq:ynaarx2} \\ z & = −\left\lfloor 1 − p + ⌈y + 1 − r⌋_p \right\rfloor \end{align}
of, met \( \Div \):
\begin{align} k' & = y + 1 − r \\ \{m', n'\} & = \Div(k', p) \\ m' & = \ceilratio{k'}{p} \\ n' & = ⌊k'⌉_p = k' \bmod p \\ x & = m' − C(n' = 0) \\ z & = ⌈n' + pC(n' = 0)⌉ − 1 \end{align}
Een voorbeeld, met \( p = 30.6 \) en \( r = 0 \). We vinden dan voor het begin van de eerste paar maanden
| \({x}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| \({px}\) | 0 | 30.6 | 61.2 | 91.8 | 122.4 | 153 | 183.6 | 214.2 | 244.8 | 275.4 | 306 |
| \({c(x)}\) | 0 | 30 | 61 | 91 | 122 | 153 | 183 | 214 | 244 | 275 | 306 |
| \({L(x)}\) | 0 | 30 | 31 | 30 | 31 | 31 | 30 | 31 | 30 | 31 | 31 |
Omdat \( 5p = 153 \) een heel getal is herhaalt het patroon van maandlengtes zich na 5 maanden. We zien hier het patroon 31−30−31−30−31 dat in de Gregoriaanse kalender de maanden maart - juli en augustus - december beschrijft.
Nu gaan we de andere kant op voor een paar lopende dagnummers:
| \({y}\) | −2 | −1 | 0 | 1 | 120 | 121 | 122 | 123 |
| \({k′}\) | −1 | 0 | 1 | 2 | 121 | 122 | 123 | 124 |
| \({m'}\) | −1 | 0 | 0 | 0 | 3 | 3 | 4 | 4 |
| \({n'}\) | 29.6 | 0 | 1 | 2 | 29.2 | 30.2 | 0.6 | 1.6 |
| \({x}\) | −1 | −1 | 0 | 0 | 3 | 3 | 4 | 4 |
| \({z}\) | 29 | 30 | 0 | 1 | 29 | 30 | 0 | 1 |
Rekenmachines en computers rekenen meestal met een beperkt aantal cijfers achter de komma, dus kun je last krijgen van afrondingsfouten. Als \( (y + 1)/p = 6,99999999998 \) maar door een hele kleine afrondfout denkt je rekenmachine dat \( (y + 1)/p = 7,00000000001 \), dan vindt je rekenmachine dat \( ⌈(y + 1)/p⌉ − 1 = 7 \) in plaats van 6, en dan vind je de verkeerde maand.
Het omvormen van formules met \( ⌈•⌉ \) of \( ⌈•⌋_1 \) naar formules met \( ⌊•⌋ \) of \( ⌊•⌉_1 \) of \( \Div \) is gemakkelijker als alleen hele getallen worden gebruikt, want voor willekeurige hele getallen \( v \) en \( w \) (\( w \gt 0 \)) geldt
\begin{align} \ceilratio{v}{w} & = \floorratio{v + w − 1}{w} \\ ⌈v⌋_w & = w − 1 − ⌊v + w − 1⌉_w \end{align}
Als de gemiddelde lengte \( p \) een breuk is, dan kunnen we zulke afrondingsfouten ontlopen door de formules om te schrijven tot formules met breuken. We stellen
\begin{equation} p = \frac{f}{g} \end{equation}
met \( f\), \( g\) hele getallen groter dan nul. Dan vinden we
\begin{align} r & = ⌊pa⌉_1 = \left\lfloor \frac{fa}{g} \right\rceil_1 = \frac{⌈fa⌋_g}{g} \label{eq:r} \\ c(x) & = ⌊px + r⌋ = \floorratio{fx + ⌊fa⌉_g}{g} \end{align}
\begin{equation} \begin{split} ξ(y) & = \ceilratio{y + t}{p} − 1 \\ & = \ceilratio{(y + t)g}{f} − 1 \\ & = \floorratio{gy + gt − 1}{f} \end{split} \end{equation}
\begin{equation} \begin{split} z & = −\left\lfloor t + r − p + \left\lceil y + t \right\rfloor_p \right\rfloor \\ & = −\left\lfloor t + r − p + \frac{f − 1 − \left\lfloor (y + t)g − 1 \right\rceil_f}{g} \right\rfloor \\ & = −\floorratio{gt + gr − f + f − 1 − \left\lfloor (y + t)g − 1 \right\rceil_f}{g} \\ & = −\floorratio{gt + gr − 1 − \left\lfloor (y + t)g − 1 \right\rceil_f}{g} \\ & = \ceilratio{\left\lfloor (y + t)g − 1 \right\rceil_f − gt − gr + 1}{g} \\ & = \floorratio{\left\lfloor (y + t)g − 1 \right\rceil_f − gt − gr + 1 + g − 1}{g} \\ & = \floorratio{\left\lfloor (y + t)g − 1 \right\rceil_f − gt − gr + g}{g} \\ & = \left\lfloor \frac{\left\lfloor (y + t)g − 1 \right\rceil_f}{g} − t − r \right\rfloor + 1 \end{split} \end{equation}
Met \( t = 1 − r \) vinden we
\begin{equation} ξ(y) = \floorratio{gy + g − gr − 1}{f} \end{equation}
\begin{equation} \begin{split} z & = \left\lfloor \frac{\left\lfloor gy + g − gr − 1 \right\rceil_f}{g} − 1 + r − r \right\rfloor + 1 \\ & = \floorratio{\left\lfloor gy + g − gr − 1 \right\rceil_f}{g} \end{split} \end{equation}
Samenvattend, van lopende maandnummer \( x \) en dagnummer \( z \) in de maand naar lopende dagnummer \( y \):
\begin{align} c(x) & = \floorratio{fx + (fa \bmod g)}{g} \\ y & = c(x) + z \end{align}
en van \( y \) naar \( x \) en \( z \):
\begin{align} k & = gy + g − (fa \bmod g) − 1 \\ \{ x, n \} & = \Div(k, f) \\ x & = \floorratio{k}{f} \label{eq:ynaarxr} \\ n & = k \bmod f \\ z & = \floorratio{n}{g} \end{align}
Nu kun je alle berekeningen doen met breuken, die geen cijfers achter de komma hebben en dus geen afrondfouten geven.
Voor dezelfde kalender als voorheen hebben we \( p = 30.6 = 153/5 \), dus \( f = 153 \), \( g = 5 \). Ook \( r = 0 \) dus \( a = 0 \). We vinden dan voor het begin van de eerste paar maanden
| \({x}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| \({⌊fx/g⌋}\) | 0 | 30 | 61 | 91 | 122 | 153 | 183 | 214 | 244 | 275 | 306 |
| \({⌈fx⌋_g}\) | 0 | 3 | 1 | 4 | 2 | 0 | 3 | 1 | 4 | 2 | 0 |
| \({c(x)}\) | 0 | 30 | 61 | 91 | 122 | 153 | 183 | 214 | 244 | 275 | 306 |
| \({L(x)}\) | 0 | 30 | 31 | 30 | 31 | 31 | 30 | 31 | 30 | 31 | 31 |
Nu gaan we de andere kant op voor een paar lopende dagnummers:
| \({y}\) | −2 | −1 | 0 | 1 | 120 | 121 | 122 | 123 |
| \({k}\) | −6 | −1 | 4 | 9 | 604 | 609 | 614 | 619 |
| \({x}\) | −1 | −1 | 0 | 0 | 3 | 3 | 4 | 4 |
| \({n}\) | 147 | 152 | 4 | 9 | 145 | 150 | 2 | 7 |
| \({z}\) | 29 | 30 | 0 | 1 | 29 | 30 | 0 | 1 |
Hierboven namen we aan dat een lange maand maar één dag langer was dan een korte maand, maar dat verschil mag best groter zijn. Stel dat korte maanden \( q \) dagen lang zijn en dat lange maanden \( q + d \) dagen lang zijn, met \( q\), \( d \) hele getallen groter dan nul, en dat een fractie \( ψ \) (tussen 0 en 1) van de maanden lang is. Dan is de gemiddelde lengte van een maand gelijk aan
\begin{equation} p = q + dψ \end{equation}
dagen. De formule om het doorlopende dagnummer \( y \) te berekenen uit maandnummer \( x \) en dagnummer-in-de-maand \( z \) is dan
\begin{equation} \begin{split} y & = c + z = qx + d⌊ψ(x + a)⌋ − d⌊ψa⌋ + z \\ & = qx + d⌊ψx + ψa − ⌊ψa⌋⌋ + z = qx + d⌊ψx + σ⌋ + z \end{split} \label{eq:xnaary3} \end{equation}
\begin{equation} σ ≡ ψa − ⌊ψa⌋ = ψa \bmod 1 \end{equation}
\begin{equation} c = qx + d⌊ψx + σ⌋ \end{equation}
Hoe gaan we nu de andere kant op? Daartoe vergelijken we het doorlopende dagnummer \( c \) dat uit vergelijking \eqref{eq:xnaary3} komt voor de eerste dag (\( z = 0 \)) van maand \( x \) met het doorlopende dagnummer (voor het gemak hernoemd tot \( c_s \)) dat uit vergelijking \eqref{eq:xnaary} komt voor dezelfde \( x \) voor dezelfde gemiddelde maandlengte \( p \) (maar met \( d = 1 \) en \( a = 0 \)):
\begin{equation} \begin{split} c_s(x) & ≡ ⌊px⌋ \\ & = ⌊qx + dψx⌋ \\ & = qx + ⌊dψx⌋ \end{split} \end{equation}
We vinden dan
\begin{equation} c − c_p = d⌊ψx + σ⌋ − ⌊dψx⌋ = d(ψx + σ − δ) − (dψx − ε) = dσ − dδ + ε \end{equation}
voor bepaalde \( δ\), \( ε \) met
\begin{equation} 0 ≤ \{δ,ε\} \lt 1 \end{equation}
dus
\begin{equation} dσ − d \lt c − c_p \lt dσ + 1 \end{equation}
\begin{equation} dσ − d + 1 ≤ c − c_p ≤ dσ \end{equation}
dus het begin van maand \( x \) in de doelkalender is tussen \( dσ + 1 − d \) en \( dσ \) dagen na het begin van maand \( x \) in de simpele kalender. Omdat \( 0 ≤ σ \lt 1 \) is ook \( −d \lt c − c_p \lt d \), dus het verschil tussen het begin van een bepaalde maand in de doelkalender en dezelfde maand in de simpelere kalender is altijd minder dan \( d \) dagen (in beide richtingen).
Voor die simpelere kalender hebben we formule \eqref{eq:ynaarx2} om het bijbehorende maandnummer uit te rekenen voor alle \( \lfloor p\rfloor \) of \( ⌈p⌉ \) dagen in die maand, dus als dagnummer \( y \) overeenkomt met een dag in de eerste \( \lfloor p\rfloor \) dagen van een maand \( x \) in de doelkalender, dan zal voor die \( x \) gelden
\begin{align} x_\text{onder} & ≤ x ≤ x_\text{boven} \label{eq:ondbov3} \\ x_\text{onder} & ≡ \ceilratio{y − dσ + 1}{p} − 1 \\ x_\text{boven} & ≡ \ceilratio{y − dσ + d}{p} − 1 \label{eq:ynaarx3} \end{align}
In de doelkalender kan een maand tot \( q + d \) dagen lang zijn, terwijl in de overeenkomstige simpelere kalender een maand niet langer kan zijn dan \( ⌈p⌉ \) dagen, wat minder is dan \( q + d \). Een aantal (minder dan \( d \)) dagen voorbij dag \( \lfloor p\rfloor \) van een maand kunnen in de doelkalender nog steeds bij dezelfde maand horen, maar zouden in de simpelere kalender al in een volgende maand vallen. Voor zulke dagen kan formule \eqref{eq:ynaarx3} dus een maandnummer geven dat te hoog is, maar dan geldt formule \eqref{eq:ondbov3} nog steeds.
Als \( d ≤ p \) dan is het verschil tussen \( x_\text{boven} \) en \( x_\text{onder} \) hooguit 1. In dat geval
\begin{align} c_\text{boven} & = qx_\text{boven} + d⌊ψx_\text{boven} + σ⌋ \\ z_\text{boven} & = y − c_\text{boven} \\ ζ & = \floorratio{z_\text{boven}}{q + d} \\ x & = x_\text{boven} + ζ \label{eq:xζ3} \\ z & = y − c = y − qx − d⌊ψx + σ⌋ \end{align}
Stel, \( f = 1001 \), \( g = 165 \), \( d = 2 \), \( q = 5 \), \( a = 77 \). Dan is
\begin{align*} p & = \frac{f}{g} = \frac{1001}{165} = 6 \frac{11}{165} \\ ψ & = \frac{176}{330} \\ σ & = ψa \bmod 1 = \frac{13552}{330} \bmod 1 = \frac{22}{330} \end{align*}
Ook is dan \( d ≤ p \), dus formule \eqref{eq:xζ3} mag gebruikt worden.
Het doorlopende dagnummer \( y \) van de eerste dag van maand \( x = 37 \) is dan (uit formule \eqref{eq:xnaary3})
\[ y = qx + d⌊ψx + σ⌋ = 5×37 + 2×\left\lfloor \frac{37×176}{330} + \frac{22}{330} \right\rfloor = 185 + 2×\floorratio{6534}{330} = 223 \]
Nu rekenen we uit welke maand overeenkomt met doorlopend dagnummer \( y = 223 \). Dan is
\begin{align*} x_\text{onder} & = \ceilratio{y + 1}{p} − 1 = \ceilratio{224×165}{1001} − 1 = 36 \\ x_\text{boven} & = \ceilratio{y + d}{p} − 1 = \ceilratio{225×165}{1001} − 1 = 37 \end{align*}
dus het maandnummer kan 36 of 37 zijn. Voor \( x_\text{boven} \) vinden we
\begin{align*} c_\text{boven} & = 5×37 + 2×\floorratio{176×37}{330} + \frac{22}{330} = 223 \\ z_\text{boven} & = y − c_\text{boven} = 223 − 223 = 0 \\ ζ & = 0 \\ x & = x_\text{boven} = 37 \\ z & = z_\text{boven} = 0 \end{align*}
En hier is nog een voorbeeld. Met \( f = 829 \), \( g = 235 \), \( d = 2 \), \( q = 3 \), \( ψ = 124/470 \), \( a = 0 \) rekenen we uit welke maand overeenkomt met doorlopend dagnummer \( y = 1448 \). Dan is \( p = q + dψ = 3 + 2×124/470 ≥ 2 = d \), dus we kunnen formule \eqref{eq:xζ3} gebruiken. Dan is
\begin{align*} x_\text{onder} & = \ceilratio{y + 1}{p} − 1 = \ceilratio{1449×235}{829} − 1 = 410 \\ x_\text{boven} & = \ceilratio{y + d}{p} − 1 = \ceilratio{1450×235}{829} − 1 = 411 \end{align*}
dus het maandnummer kan 410 of 411 zijn. Voor \( x_\text{boven} \) vinden we
\begin{align*} c_\text{boven} & = 3×411 + 2×\floorratio{411×124}{470} = 1449 \\ z_\text{boven} & = y − c_\text{boven} = 1448 − 1449 = −1 \\ ζ & = −1 \\ x & = x_\text{boven} + ζ = 410 \\ z & = y − c = 1448 − 3×410 − 2×\floorratio{411×124}{470} = 2 \end{align*}
Als \( p = f/g = q + dh/g \) een breuk is (\( f \), \( g \), \( q \), \( d \), \( h \) hele getallen) dan vinden we
\begin{align} y & = c + z = qx + d\floorratio{hx + s}{g} + z \label{eq:xnaary3r} \\ s & ≡ ha − g\floorratio{ha}{g} = ha \bmod g \\ x_\text{boven} & = \floorratio{gy + dg − ds − 1}{f} \label{eq:ynaarx3r} \\ c_\text{boven} & = qx_\text{boven} + d\floorratio{hx_\text{boven} + s}{g} \\ z_\text{boven} & = y − c_\text{boven} \\ ζ & = \floorratio{z_\text{boven}}{q + d} \\ x & = x_\text{boven} + ζ \\ z & = y − c = y − qx − d\floorratio{hx + s}{g} \end{align}
Nu laten we toe dat er nog meer verschillende maandsoorten zijn met verschillende lengtes. In formule \eqref{eq:xnaary3} gaf \( ⌊ψ(x + a)⌋ \) het patroon van lange maanden (met verschuiving naar wens). We laten nu een willekeurig aantal van die patronen toe, elk met hun eigen lengteverschil \( d_i \) (waarvoor we nu ook negatieve waarden toelaten), voorkomstfractie \( 0 \lt ψ_i \lt 1 \) en verschuiving \( a_i \). Dan vinden we
\begin{equation} \begin{split} y & = c + z = qx + ∑_{i}d_i ⌊ψ_i(x + a_i)⌋ − ∑_{i}d_i ⌊ψ_{i}a_i⌋ + z \\ & = qx + ∑_{i}d_i ⌊ψ_{i}x + ψ_{i}a_i − ⌊ψ_{i}a_i⌋⌋ + z \\ & = qx + ∑_{i}d_i ⌊ψ_{i}x + σ_i⌋ + z \label{eq:xnaary4} \end{split} \end{equation}
\begin{equation} c = qx + ∑_{i}d_i ⌊ψ_{i}x + σ_i⌋ \end{equation}
\begin{equation} σ_i ≡ ψ_{i}a_i − ⌊ψ_{i}a_i⌋ = ψ_{i}a_i \bmod 1 \end{equation}
De afleiding van de formule in omgekeerde richting gaat analoog die van formule \eqref{eq:ynaarx3}, maar nu moeten we ook rekening houden met mogelijk negatieve \( d_i \). We vinden
\begin{align} p & = q + ∑_{i}d_{i}ψ_{i} \\ c_s & = ⌊px⌋ = qx + ⌊∑_{i}d_{i}ψ_{i}⌋ \end{align}
\begin{equation} \begin{split} c − c_s & = ∑_{i}d_i⌊ψ_{i}x + σ_i⌋ − ⌊∑_{i}d_{i}ψ_{i}x⌋ \\ & = ∑_{i}d_i (ψ_{i}x + σ_i − δ_i) − \left( ∑_{i}d_{i}ψ_{i}x − ε \right) \\ & = ∑_{i}d_{i}σ_i − ∑_{i}d_{i}δ_i + ε \end{split} \end{equation}
voor
\begin{equation} 0 ≤ δ_i, ε \lt 1 \end{equation}
Als er tenminste één \( d_i \gt 0 \) is, dan is
\begin{equation} c − c_s \gt ∑_{i}d_{i}σ_i − ∑_{\gt0}d_i \end{equation}
(waar \( ∑_{\gt0}d_i \) de som van alle \( d_i \) is die groter zijn dan 0) en anders
\begin{equation} c − c_s ≥ ∑_{i}d_{i}σ_i \end{equation}
Ook
\begin{equation} c − c_s \lt ∑_{i}d_{i}σ_i − ∑_{\lt0}d_i + 1 \end{equation}
Samen geeft dat
\begin{equation} ∑_{i}d_{i}σ_i − ∑_{\gt0}d_i + 1 ≤ y − y_p ≤ ∑_{i}d_{i}σ_i − ∑_{\lt0}d_i \end{equation}
als er positieve \( d_i \) zijn, en anders
\begin{equation} ∑_{i}d_{i}σ_i ≤ c − c_s ≤ ∑_{i}d_{i}σ_i − ∑_{i}d_i \end{equation}
We kunnen dit combineren tot
\begin{equation} ∑_{i}d_{i}σ_i − ∑_{\gt0}d_i ≤ c − c_s ≤ ∑_{i}d_{i}σ_i − ∑_{\lt0}d_i \end{equation}
ongeacht of er positieve \( d_i \) zijn. Hiermee
\begin{equation} c − ∑_{i}d_{i}σ_i + ∑_{\lt0}d_i ≤ c_s ≤ c − ∑_{i}d_{i}σ_i + ∑_{\gt0}d_i \end{equation}
en dus
\begin{align} x_\text{onder} & = \ceilratio{y − ∑_{i}d_{i}σ_i + ∑_{\lt0}d_i}{p} − 1 \\ x_\text{boven} & = \ceilratio{y − ∑_{i}d_{i}σ_i + ∑_{\gt0}d_i}{p} − 1 \label{eq:ynaarx4} \end{align}
Als \( ∑_{\gt0}d_i − ∑_{\lt0}d_i \lt p \) dan schelen \( x_\text{onder} \) en \( x_\text{boven} \) hooguit 1. Dan
\begin{align} c_\text{boven} & = qx_\text{boven} + ∑_{i}d_i⌊ψ_{i}x_\text{boven} + σ_i⌋ \\ z_\text{boven} & = y − c_\text{boven} \\ ζ & = \floorratio{z_\text{boven}}{q + ∑_{\gt0}d_i} \\ x & = x_\text{boven} + ζ \label{eq:xζ4} \\ z & = y − c − y − qx − ∑_{i}d_i⌊ψ_{i}x + σ_i⌋ \end{align}
Als alle \( ψ_i = h_i/g \) breuken zijn met een gemeenschappelijke noemer \( g \), dan vinden we
\begin{align} f & ≡ qg + ∑_{i}d_{i}h_{i} \\ p & = \frac{f}{g} \\ y & = c + z = qx + ∑_{i}d_i\floorratio{h_{i}x + s_i}{g} + z \label{eq:xnaary4r} \\ s_i & ≡ h_{i}a_i − g\floorratio{h_{i}a_i}{g} = h_{i}a_i \bmod g \\ x_\text{boven} & = \floorratio{gy + g∑_{\gt0}d_i − ∑_{i}d_{i}s_i − 1}{f} \label{eq:ynaarx4r} \\ c_\text{boven} & = qx_\text{boven} + ∑_{i}d_i\floorratio{h_{i}x_\text{boven} + s_i}{g} \\ z_\text{boven} & = y − c_\text{boven} \\ ζ & = \floorratio{z_\text{boven}}{q + ∑_{\gt0}d_i} \\ x & = x_\text{boven} + ζ \\ z & = y − c = y − qx − ∑_{i}d_i\floorratio{h_{i}x + s_i}{g} \end{align}
\( g \) is het kleinste gemene veelvoud van de noemers van alle \( ψ_i \), of is een veelvoud daarvan. Je kunt voor \( g \) het product van de noemers van alle \( ψ_i \) nemen, maar soms kan een kleinere \( g \) gebruikt worden.
Stel, we willen een kalender hebben waarin elke maand tenminste 17 dagen lang is, en elke 3e maand 2 dagen extra krijgt, en elke 5e maand 3 dagen extra. De lengtes van de eerste paar maanden zijn dan: 17, 17, 19, 17, 20, 19, 17, 17, 19, 20, 17, 19, 17, 17, 22. Hoe rekenen we met die kalender?
Dan hebben we
| \({i}\) | 1 | 2 |
| \({d_i}\) | 2 | 3 |
| \({ψ_i}\) | 1/3 = 5/15 | 1/5 = 3/15 |
| \({a_i}\) | 0 | 0 |
| \({h_i}\) | 5 | 3 |
| \({s_i}\) | 0 | 0 |
voor \( g = 15 \) (het product van noemers 3 en 5). Dan is \( p = (17×15 + 2×5 + 3×3)/15 = 268/15 = 17 + 13/15 \), dus \( f = 268 \) en \( y = 17x + 2⌊x/3⌋ + 3⌊x/5⌋ \) en \( x_\text{boven} = ⌊(15y + 15×5 − 0 − 1)/268⌋ = ⌊(15y + 74)/268⌋ \).
De volgende tabel toont de resultaten die je krijgt als je voor bepaalde kalenderdata \( x \), \( z \) de bijbehorende lopende dagnummers \( y \) uitrekent, en als je daarna uit die \( y \) weer het maandnummer \( x = x_\text{boven} + ζ \) uitrekent.
| \({x}\) | 0 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 | 5 | 6 | 6 | 7 | 7 | 8 | 8 | 9 | 9 | 10 | 10 | 11 | 11 | 12 | 12 | 13 | 13 | 14 | 14 | 15 | 15 |
| \({z}\) | 0 | 16 | 0 | 16 | 0 | 18 | 0 | 16 | 0 | 19 | 0 | 18 | 0 | 16 | 0 | 16 | 0 | 18 | 0 | 19 | 0 | 16 | 0 | 18 | 0 | 16 | 0 | 16 | 0 | 21 | 0 | 16 |
| \({y}\) | 0 | 16 | 17 | 33 | 34 | 52 | 53 | 69 | 70 | 89 | 90 | 108 | 109 | 125 | 126 | 142 | 143 | 161 | 162 | 181 | 182 | 198 | 199 | 217 | 218 | 234 | 235 | 251 | 252 | 273 | 274 | 290 |
| \({x_\text{boven}}\) | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 | 5 | 6 | 6 | 7 | 7 | 8 | 8 | 9 | 9 | 10 | 10 | 11 | 11 | 12 | 12 | 13 | 13 | 14 | 14 | 15 | 15 | 16 |
| \({y_\text{boven}}\) | 0 | 17 | 17 | 34 | 34 | 53 | 53 | 70 | 70 | 90 | 90 | 109 | 109 | 126 | 126 | 143 | 143 | 162 | 162 | 182 | 182 | 199 | 199 | 218 | 218 | 235 | 235 | 252 | 252 | 274 | 274 | 291 |
| \({ζ}\) | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 | 0 | −1 |
| \({x_\text{boven} + ζ}\) | 0 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 | 5 | 6 | 6 | 7 | 7 | 8 | 8 | 9 | 9 | 10 | 10 | 11 | 11 | 12 | 12 | 13 | 13 | 14 | 14 | 15 | 15 |
Voorgaande methoden voor het berekenen van de kalenderdatum uit het doorlopende dagnummer voor kalenders met erg ongelijke maanden gingen er van uit dat de variatie in maandlengtes kleiner is dan de gemiddelde maandlengte: \( d ≤ p \) als er twee verschillende maandlengtes zijn, of \( ∑_{\gt0}d_i − ∑_{\lt0}d_i \lt p \) als er meer verschillende maandlengtes zijn. Wat nu als aan die voorwaarde niet voldaan is?
In dat geval zul je de juiste maand moeten vinden door te zoeken. Probeer eerst maandnummer \( x = x_\text{boven} \) en reken de bijbehorende \( z = y − c \) en \( ζ \) uit. Is deze \( ζ \lt 0 \)? Tel dan \( ζ \) op bij \( x \) en probeer opnieuw, net zo lang tot \( ζ = 0 \): dan heb je de juiste \( x \) gevonden.
Stel, \( q = 3 \), \( d = 7 \), \( ψ = 1/3 \), dan is \( h = 1 \), \( g = 3 \), \( f = 16 \), \( p = q + dψ = 3 + 5/3 = 5 \frac{2}{3} \) dus aan de eis \( d ≤ p \) is niet voldaan. Met deze kalender hebben de eerste drie maanden de lengte \( 3, 3, 10 \) dagen, en dat herhaalt zich elke drie maanden weer. Voor deze kalender is
\begin{align*} x_\text{boven} & = \floorratio{3y + 20}{16} \\ x_\text{onder} & = \floorratio{3y + 2}{16} \\ c & = 3x + 7\floorratio{x}{3} \end{align*}
We vinden
| \({y}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| \({x_\text{boven}}\) | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 4 | 4 | 4 |
| \({c_\text{boven}}\) | 3 | 3 | 3 | 3 | 6 | 6 | 6 | 6 | 6 | 6 | 16 | 16 | 16 | 16 | 19 | 19 | 19 |
| \({z_0}\) | −3 | −2 | −1 | 0 | −2 | −1 | 0 | 1 | 2 | 3 | −6 | −5 | −4 | −3 | −5 | −4 | −3 |
| \({ζ_0}\) | −1 | −1 | −1 | 0 | −1 | −1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | −1 | −1 | 0 |
| \({c_1}\) | 0 | 0 | 0 | 3 | 3 | 6 | 6 | 6 | 6 | 16 | 16 | 16 | |||||
| \({z_1}\) | 0 | 1 | 2 | 1 | 2 | 4 | 5 | 6 | 7 | −2 | −1 | 0 | |||||
| \({ζ_1}\) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | −1 | −1 | 0 | |||||
| \({c_2}\) | 6 | 6 | |||||||||||||||
| \({z_2}\) | 8 | 9 | |||||||||||||||
| \({ζ_2}\) | 0 | 0 | |||||||||||||||
| \({x}\) | 0 | 0 | 0 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 3 |
| \({z}\) | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Bijvoorbeeld: voor \( y = 11 \) vinden we
\begin{align*} x_\text{boven} & = \floorratio{3×11 + 20}{16} = 3 \\ c_\text{boven} & = 3×3 + 7\floorratio{3}{3} = 16 \\ z_0 & = y − c_\text{boven} = 11 − 16 = −5 \end{align*}
Die \( z_0 \) is kleiner dan nul, dus verlagen we \( x \) met één (\( x = 3 − 1 = 2 \)) en proberen we het opnieuw. Met die nieuwe \( x \) vinden we
\begin{align*} c_1 & = 3×2 + 7\floorratio{2}{3} = 6 \\ z_1 & = y − c_1 = 11 − 6 = 5 \end{align*}
en dat is niet meer negatief, dus zijn we klaar. Voor \( y = 11 \) is \( x = 2 \) en \( z = 5 \).
Je kunt deze procedure desgewenst ook gebruiken als \( d ≤ p \).
Het grootste aantal maandnummers dat je misschien moet nakijken voordat je de goede gevonden hebt is gelijk aan de maximale waarde die \( x_\text{boven} − x_\text{onder} \) kan bereiken, plus 1. Nu is voor kalenders met twee verschillende maandlengtes
\begin{equation} x_\text{boven} − x_\text{onder} = \ceilratio{y − dσ + d}{p} − \ceilratio{y − dσ + 1}{p} \end{equation}
De grootste waarde die dat kan bereiken is \( ⌈(d − 1)/p⌉ \), dus het aantal \( N \) maanden dat je hooguit hoeft te proberen is gelijk aan
\begin{equation} N = \ceilratio{d − 1}{p} + 1 \end{equation}
Voor kalenders met meer dan twee verschillende maandlengtes is
\begin{equation} x_\text{boven} − x_\text{onder} = \ceilratio{y − ∑_{i}d_{i}σ_i + ∑_{\gt0}d_i}{p} − \ceilratio{y − ∑_{i}d_{i}σ_i + ∑_{\lt0}d_i}{p} \end{equation}
en dat heeft als grootst mogelijke waarde \( ⌈(∑_{\gt0}d_i − ∑_{\lt0}d_i)/p⌉ \) dus voor zo'n kalender is
\begin{equation} N = \ceilratio{∑_{\gt0}d_i − ∑_{\lt0}d_i}{p} + 1 \end{equation}
In het voorgaande beschouwden we kalenders waarvan de maandlengtes uit te drukken zijn als de som van verschillende patronen, bijvoorbeeld met elke tweede maand een dag extra en bovendien elke derde maand nog eens twee dagen extra, zodat elke zesde maand in totaal drie dagen extra krijgt. Maar wat nu als de maandlengtes zichzelf na een bepaald aantal herhalen maar er verder geen patroon in te ontdekken valt?
We gebruiken als voorbeeld een kalender met de volgende maandlengtes, die zich steeds herhalen: 7, 13, 5, 11, 4 dagen. Het "jaar" is 7 + 13 + 5 + 11 + 4 = 40 dagen lang. Het verband tussen lopende dagnummer \( y \), lopende maandnummer \( x \), en dagnummer-in-de-maand \( z \) (allen beginnend bij 0) is dan
| \({y}\) | 0 | 1 | … | 6 | 7 | … | 19 | 20 | … | 24 | 25 | … | 35 | 36 | … | 39 |
| \({x}\) | 0 | 0 | … | 0 | 1 | … | 1 | 2 | … | 2 | 3 | … | 3 | 4 | … | 4 |
| \({z}\) | 0 | 1 | … | 6 | 0 | … | 12 | 0 | … | 4 | 0 | … | 10 | 0 | … | 3 |
De kalender heeft \( f \) dagen in \( g \) maanden, met een gemiddelde maandlengte gelijk aan \( p = f/g \) dagen. Het verband tussen het lopende dagnummer \( y \) en het lopende maandnummer \( x \) is een trapfunctie: na een (wisselend) aantal dagen neemt het maandnummer toe met één. Zo'n trede van één die gebeurt net vóór dag \( a \) en zich elke \( f \) dagen weer herhaalt krijgen we met een functie
\[ \floorratio{y + f − a}{f} = \floorratio{y − a}{f} + 1 \]
De \( + 1 \) zorgt ervoor dat de waarde voor \( y = 0 \) gelijk is aan \( 0 \): dat rekent prettiger.
Voor de voorbeeldkalender is \( f = 40 \) en \( g = 5 \) en is er onder andere een trede net voor dag \( a = 7 \). Die krijgen we met
\[ x = 1 + \floorratio{y − 7}{40} \]
| \({y}\) | 0 | 1 | … | 6 | 7 | 8 | … | 46 | 47 | 48 |
| \({y−7}\) | −7 | −6 | −1 | 0 | 1 | 39 | 40 | 41 | ||
| \({x}\) | 0 | 0 | 0 | 1 | 1 | 1 | 2 | 2 |
Als er \( g \) maanden zijn, elk met hun eigen \( a_i \) (voor \( i \) van 1 tot en met \( g \)), dan is hun gecombineerde effect
\begin{equation} x = g + ∑_i\floorratio{y − a_i}{f} \end{equation}
Als de opeenvolgende maandlengtes gelijk zijn aan \( m_i \), dan zit de eerste trede bij \( a_1 = 0 \), de tweede bij \( a_2 = a_1 + m_1 = m_1 \), de derde bij \( a_3 = a_2 + m_2 = m_1 + m_2 \), en in het algemeen
\begin{equation} a_i = ∑_{j\lt i}m_j \end{equation}
Daarmee is
\begin{equation} x = g + ∑_i\floorratio{y − ∑_{j\lt i}m_j}{f} \label{eq:willekeurigynaarx} \end{equation}
Voor de voorbeeldkalender hebben we \( f = 40 \), \( g = 5 \) en
| \({i}\) | 1 | 2 | 3 | 4 | 5 |
| \({m_i}\) | 7 | 13 | 5 | 11 | 4 |
| \({a_i}\) | 0 | 7 | 20 | 25 | 36 |
en daarmee
\begin{align*} x & = \floorratio{y + 40 − 0}{40} + \floorratio{y + 40 − 7}{40} + \floorratio{y + 40 − 20}{40} + \floorratio{y + 40 − 25}{40} + \floorratio{y + 40 − 36}{40} \\ & = \floorratio{y + 40}{40} + \floorratio{y + 33}{40} + \floorratio{y + 20}{40} + \floorratio{y + 15}{40} + \floorratio{y + 4}{40} \end{align*}
Bijvoorbeeld, als \( y = 21 \) dan
\[ x = \floorratio{61}{40} + \floorratio{54}{40} + \floorratio{41}{40} + \floorratio{36}{40} + \floorratio{25}{40} = 1 + 1 + 1 + 0 + 0 = 3 \]
De andere kant op hebben we ook treden, maar nu wisselen dagen en maanden van rol als lengte en hoogte van de treden. Daarmee wordt de formule voor het lopende dagnummer \( c \) van de eerste dag van maand \( x \):
\begin{equation} c = ∑_{i}m_i\floorratio{x + g − i}{g} \end{equation}
Met weer dezelfde kalender vinden we
\[ c = 7 \floorratio{x + 4}{5} + 13 \floorratio{x + 3}{5} + 5 \floorratio{x + 2}{5} + 11 \floorratio{x + 1}{5} + 4 \floorratio{x}{5} \]
| \({x}\) | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| \({7⌊(x+4)/5⌋}\) | 0 | 7 | 7 | 7 | 7 | 7 |
| \({13⌊(x+3)/5⌋}\) | 0 | 0 | 13 | 13 | 13 | 13 |
| \({5⌊(x+2)/5⌋}\) | 0 | 0 | 0 | 5 | 5 | 5 |
| \({11⌊(x+1)/5⌋}\) | 0 | 0 | 0 | 0 | 11 | 11 |
| \({4⌊x/5⌋}\) | 0 | 0 | 0 | 0 | 0 | 4 |
| \({c}\) | 0 | 7 | 20 | 25 | 36 | 40 |
De formule om van het lopende maandnummer \( x \) en het dagnummer-in-de-maand \( z \) te gaan naar lopende dagnummer \( y \) (allen beginnend bij 0) is dan (met \( i \) die loopt van 1 tot en met \( g \))
\begin{equation} y = c + z = ∑_{i}m_i\floorratio{x + g − i}{g} + z \label{willekeurigxnaary} \end{equation}
Deze formules zijn (als je de sommaties uitschrijft) een stuk langer dan de formules die we eerder afleidden voor kalenders met interne patronen, dus het is voordelig als je voor een kalender zulke interne patronen herkent, maar lang niet alle kalenders hebben zulke patronen.
De simpele kalender uit hoofdstuk 12.3 heeft \( y = ⌊px + σ⌋ + z \). Om die kalender het begin van maand \( x \) op dag \( y \) te laten leggen moeten we dus hebben \( y = ⌊px + σ⌋ \) waaruit volgt dat \( y ≤ px + σ \lt y + 1 \) ofwel (voor \( x \gt 0 \)) \( (y − σ)/x ≤ p \lt (y + 1 − σ)/x \). We weten dat \( 0 ≤ σ \lt 1 \), dus
\[ \frac{y − 1}{x} \lt \frac{y − σ}{x} ≤ p \lt \frac{y + 1 − σ}{x} \lt \frac{y + 1}{x} \]
dus
\begin{equation} \frac{y − 1}{x} \lt p \lt \frac{y + 1}{x} \label{eq:beperkp} \end{equation}
Niet elke \( p \) die hieraan voldoet geeft een simpele kalender, maar als een \( p \) hieraan niet voldoet voor tenminste één van de maanden dan is er zeker geen simpele kalender voor deze maandlengtes.
Onze voorbeeldkalender voldoet niet aan de eisen die nodig zijn om de simpele formules uit hoofdstuk 12.3 te kunnen gebruiken, want er zijn meer dan twee verschillende maandlengtes, zelfs als je de laatste maand buiten beschouwing laat. Met formule \eqref{eq:beperkp} kunnen we het ook zien. De eerste dag van maand \( x = 1 \) heeft \( y = 7 \), dus moet \( 6 \lt p \lt 8 \). De eerste dag van maand \( x = 2 \) heeft \( y = 20 \) dus moet \( 9\frac{1}{2} = 19/2 \lt p \lt 21/2 = 10\frac{1}{2} \), en nu gaat het al fout, want om het begin van maand \( x = 1 \) goed te plaatsen moet \( p \) kleiner zijn dan 8, maar om het begin van maand \( x = 2 \) goed te plaatsen moet \( p \) groter zijn dan 9½, en dat kan niet allebei tegelijk.
Het is zeldzaam dat een kalender volledig bepaald is door alleen één periode, dus meestal moet je verschillende perioden combineren. Stel we hebben rechte lijnen voor twee perioden:
\begin{align} y_1 & = c_1(x_1) + z_1 \\ y_2 & = c_2(x_2) + z_2 \end{align}
en de andere kant op
\begin{align} x_1 & = c_1'(y_1) \\ z_1 & = y_1 − c_1(x_1) \\ x_2 & = c_2'(y_2) \\ z_2 & = y_2 − c_2(x_2) \end{align}
waarbij \( c'(y) \) de inverse van \( c(x) \) is: \( c'(c(x)) = x \) en \( c(c'(y)) = y \).
In de simpele gevallen hebben we
\begin{eqnarray} \{ x_1, r_1 \} & = \Div(g_1y_1 + g_1 − 1 − s_1, f_1) \\ z_1 & = \floorratio{r_1}{g_1} \\ \{ x_2, r_2 \} & = \Div(g_2y_2 + g_2 − 1 − s_2, f_2) \\ z_2 & = \floorratio{r_2}{g_2} \end{eqnarray}
We nemen aan dat de eerste lijn voor de kleinere periode is, en de tweede lijn voor de grotere. Er zijn twee manieren om deze te combineren: We kunnen de \( y_1 \) gelijk stellen aan \( z_2 \), of aan \( x_2 \). In het eerste geval hebben de twee perioden dezelfde schrikkeleenheden, bijvoorbeeld dagen. In het tweede geval hebben de twee perioden verschillende soorten schrikkeleenheden (bijvoorbeeld soms een extra dag voor de eerste, en soms een extra maand voor de tweede). Als de grotere periode helemaal geen schrikkeleenheden nodig heeft, dan mag je kiezen welke combinatiemethode je wilt gebruiken.
Laten we het eerste geval de "vlakke" combinatie noemen, omdat de schrikkeleenheid hetzelfde blijft, en het tweede geval de "getrapte" combinatie, omdat de schrikkeleenheid een trapje hoger gaat.
De combinatie van maanden en jaren is in de meeste (misschien alle?) zonnekalenders (zoals de Gregoriaanse kalender, de Juliaanse kalender en de Egyptische kalender) vlak, dus van de eerste soort. Een maand kan een dagje korter of langer zijn dan een andere maand (en precies één maand kan veel korter zijn), en een jaar kan een dagje korter of langer zijn dan een ander jaar. De lengte van een jaar hangt niet af van de lengte van de maanden, want de regels voor de lengte van het jaar hangen af van het jaartal maar niet van een maandnummer.
De combinatie van maanden en jaren in een zongebonden maankalender (zoals de Joodse en Babylonische kalenders) kan vlak zijn met erg ongelijke jaarlengtes (\( d \gt 1 \)), of getrapt (dan meestal met \( d = 1 \)). Een maand kan een dagje korter of langer zijn dan een andere maand, en een jaar kan een maand korter of langer zijn dan een ander jaar. (Voor de vlakke combinatie kan één maand van het jaar een stuk korter zijn.) Op deze manier kun je twee afzonderlijke (astronomische) verschijnselen volgen: de beweging van de Zon (met het jaar), en de beweging van de Maan (met de maand). Als de combinatie getrapt is dan hangt de lengte van een jaar af van de lengte van de maanden, want de lengte van het jaar is dan een bepaald aantal maanden, niet een bepaald aantal dagen.
Niet-zongebonden maankalenders (zoals de administratieve Islamitische kalender) doen meestal niet aan schrikkeljaren, dus dan werken allebei de combinatiemethoden.
Als een kalender meer dan twee belangrijke grote perioden heeft met schrikkelregels (bijvoorbeeld niet alleen voor de maand en het jaar, maar ook voor de eeuw), dan is het mogelijk dat sommige combinaties vlak zijn en andere combinaties getrapt.
Als we met meer dan één periode rekening moeten houden dan is het voor het omrekenen van een doorlopend dagnummer naar een kalenderdatum rekentechnisch belangrijk dat de nummering binnen elk zulke periode begint bij 0.
Als voorbeeld nemen we voor kalender 1 een simpele met \( p_1 = 7/3 = 2 \frac{2}{3} \) en voor kalender 2 een simpele met \( p_2 = 37/5 = 7 \frac{2}{5} \). Dan hebben we
\begin{align*} \\ y_1 & = \floorratio{7x_1}{3} + z_1 = c_1 + z_1 \\ y_2 & = \floorratio{37x_2}{5} + z_2 = c_2 + z_2 \\ x_1 & = \floorratio{3y_1 + 2}{7} \\ z_1 & = \floorratio{(3y_1 + 2) \bmod 7}{3} \\ x_2 & = \floorratio{5y_2 + 4}{37} \\ z_2 & = \floorratio{(5y_2 + 4) \bmod 37}{5} \end{align*}
of
\begin{align*} \{x_1, r_1\} & = \Div(3y_1 + 2, 7) \\ z_1 & = \floorratio{r_1}{3} \\ \{x_2, r_2\} & = \Div(5y_2 + 4, 37) \\ z_2 & = \floorratio{r_2}{5} \end{align*}
In dit geval is \( z_2 = y_1 \), dus we vinden
\begin{equation} y_2 = c_2(x_2) + c_1(x_1) + z_1 \label{eq:vlak} \end{equation}
en omgekeerd
\begin{align} x_2 & = c_2'(y_2) \label{eq:vlakr} \\ y_1 & = z_2 = y_2 − c_2(x_2) \\ x_1 & = c_1'(y_1) \\ z_1 & = y_1 − c_1(x_1) \end{align}
Voor simpele gevallen
\begin{align} \{x_2, r_2\} & = \Div(g_2y_2 + g_2 − 1 − s_2, f_2) \\ \{x_1, r_1\} & = \Div\left( g_1\floorratio{r_2}{g_2} + g_1 − 1 − s_1, f_1 \right) \\ z_1 & = \floorratio{r_1}{g_1} \end{align}
Hier is (bijvoorbeeld) \( y_2 \) het doorlopende dagnummer, \( x_2 \) het jaartal, \( y_1 = z_2 \) het dagnummer in het jaar, \( x_1 \) het maandnummer in het jaar (met 0 voor de eerste maand), en \( z_1 \) het dagnummer in de maand (met 0 voor de eerste dag).
Voor het berekenen van de kalenderdatum uit het doorlopende dagnummer moeten we eerst de grotere periode berekenen (\( x_2 \), \( z_2 \)), en daarna de kleinere (\( x_1 \), \( z_1 \)).
De twee voorbeeldkalenders geven dan, voor de eerste 20 dagen,
| \({y_2}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| \({x_2}\) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 |
| \({r_2}\) | 4 | 9 | 14 | 19 | 24 | 29 | 34 | 2 | 7 | 12 | 17 | 22 | 27 | 32 | 0 | 5 | 10 | 15 | 20 | 25 |
| \({z_2}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 |
| \({y_1}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 |
| \({x_1}\) | 0 | 0 | 1 | 1 | 2 | 2 | 2 | 0 | 0 | 1 | 1 | 2 | 2 | 2 | 0 | 0 | 1 | 1 | 2 | 2 |
| \({r_1}\) | 2 | 5 | 1 | 4 | 0 | 3 | 6 | 2 | 5 | 1 | 4 | 0 | 3 | 6 | 2 | 5 | 1 | 4 | 0 | 3 |
| \({z_1}\) | 0 | 1 | 0 | 1 | 0 | 1 | 2 | 0 | 1 | 0 | 1 | 0 | 1 | 2 | 0 | 1 | 0 | 1 | 0 | 1 |
Doorlopend dagnummer \( y_2 = 16 \) komt overeen met dag \( z_1 = 0 \) van maand \( x_1 = 1 \) van jaar \( x_2 = 2 \).
In dit geval is \( x_2 = y_1 \), dus we vinden
\begin{equation} y_2 = c_2(c_1(x_1) + z_1) + z_2 \end{equation}
en omgekeerd
\begin{align} y_1 & = c_2'(y_2) \\ z_2 & = y_2 − c_2(y_1) \\ x_1 & = c_1'(y_1) \\ z_1 & = y_1 − c_1(x_1) \end{align}
Voor simpele gevallen
\begin{align} \{y_1, r_2\} & = \Div(g_2y_2 + g_2 − 1 − s_2, f_2) \\ z_2 & = \floorratio{r_2}{g_2} \\ \{x_1, r_1\} & = \Div(g_1y_1 + g_1 − 1 − s_1, f_1) \\ z_1 & = \floorratio{r_1}{g_1} \end{align}
Hier is (bijvoorbeeld) \( y_2 \) het doorlopende dagnummer, \( x_1 \) het jaartal, \( x_2 = y_1 \) het doorlopende maandnummer, \( z_1 \) het maandnummer in het jaar (met 0 voor de eerste maand), en \( z_2 \) het dagnummer in de maand (met 0 voor de eerste dag).
Met onze twee voorbeeldkalenders vinden we
| \({y_2}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| \({x_2}\) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 |
| \({r_2}\) | 4 | 9 | 14 | 19 | 24 | 29 | 34 | 2 | 7 | 12 | 17 | 22 | 27 | 32 | 0 | 5 | 10 | 15 | 20 | 25 |
| \({z_2}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 |
| \({y_1}\) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 |
| \({x_1}\) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
| \({r_1}\) | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 1 | 1 | 1 | 1 | 1 | 1 |
| \({z_1}\) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
Doorlopend dagnummer \( y_2 = 16 \) komt overeen met dag \( z_2 = 2 \) van maand \( z_1 = 0 \) van jaar \( x_1 = 1 \).
In de meeste kalenders zijn er hogere en lagere perioden, en verandert het nummer van een hogere periode veel minder vaak dan het nummer van een lagere periode. Op de 7e dag van de 3e maand volgt de 8e dag van de 3e maand − het maandnummer verandert veel minder vaak dan het dagnummer.
Sommige kalenders hebben verschillende perioden die gelijktijdig oplopen. Ook de meestgebruikte kalenders hebben vaak zo'n geval, in de vorm van weekdagen en dagen van de maand. Als het een dag later wordt, dan verandert het dagnummer in de maand en ook de weekdag. Op maandag de 7e volgt dinsdag de 8e − het dagnummer en de weekdag veranderen even snel.
We hebben de weekdag niet nodig om een bepaalde dag uniek aan te wijzen (30 augustus 2011 wijst precies één dag aan, daarvoor hoeven we niet te weten dat dat een dinsdag was), dus komt de weekdag vaak niet voor in kalenderberekeningen. Echter, er zijn ook kalenders (bijvoorbeeld de kalenders van Midden-Amerika) waarin gelijktijdige perioden wel gebruikt worden om een bepaalde dag aan te wijzen. Hieronder bekijken we zulke gevallen.
Stel, een kalender gebruikt gelijktijdig perioden \( p_i \) voor \( i \) van 1 tot en met \( n \). Het dagnummer in elke periode begint bij 0. We schrijven een datum in die kalender als \( \{x\} = \{x_1,x_2,…,x_n\} \), waarin \( x_i \) het dagnummer uit periode \( i \) is. Als \( x_i \) gelijk is aan \( p_i − 1 \), dan heeft de volgende dag weer \( x_i = 0 \).
Bijvoorbeeld, in een kalender met \( p_1 = 13 \) en \( p_2 = 20 \) volgen na dag \( \{11,8\} \) de volgende dagen: \( \{12,9\} \), \( \{0,10\} \), \( \{1,11\} \), …, \( \{9,19\} \), \( \{10,0\} \), \( \{11,1\} \).
Om een doorlopend dagnummer \( J \) om te rekenen naar \( \{x\} \) kunnen we dan de volgende formule gebruiken:
\begin{equation} x_i = (J + a_i) \bmod p_i \label{eq:cycli} \end{equation}
Hierin is \( a_i \) de waarde die \( x_i \) krijgt als \( J = 0 \). Die waarde hangt af van de kalender.
Stel dat in de kalender uit het vorige voorbeeld \( J = 0 \) overeenkomt met \( \{11,8\} \). Dan is \( a_1 = 11 \) en \( a_2 = 8 \), en dan
\begin{align*} x_1 = (J + 11) \bmod 13 \\ x_2 = (J + 8) \bmod 20 \end{align*}
Dag \( J = 11 \) komt dan overeen met \( x_1 = (11 + 11) \bmod 13 = 22 \bmod 13 = 9 \) en \( x_2 = (11 + 8) \bmod 20 = 19 \bmod 20 = 19 \), dus \( \{9,19\} \).
Het is een stuk lastiger om de andere kant op te gaan. Dan moeten we een \( J \) vinden zodat voor alle \( i \) aan vergelijking \eqref{eq:cycli} voldaan is, ofwel
\begin{equation} J ≡ x_i − a_i \pmod{p_i} \end{equation}
We definiëren
\begin{equation} c_i = x_i − a_i \end{equation}
We bekijken eerst het geval \( n = 2 \). Dan moeten we \( J \) oplossen uit
\begin{align} J & ≡ c_1 \pmod{p_1} \label{eq:c1} \\ J & ≡ c_2 \pmod{p_2} \label{eq:c2} \end{align}
Alle oplossingen van formule \eqref{eq:c1} zijn van de vorm
\begin{equation} J = c_1 + kp_1 \end{equation}
als \( k \) door alle hele getallen loopt. Invullen in formule \eqref{eq:c2} geeft
\begin{equation} kp_1 ≡ c_2 − c_1 \pmod{p_2} \label{eq:kp_1} \end{equation}
Als we een getal \( r_2 \) konden vinden zodat \( r_2p_1 ≡ 1 \pmod{p_2} \), dan zouden we uit voorgaande formule \( k \) kunnen oplossen. Zo'n getal \( r_2 \) bestaat alleen als \( p_1 \) en \( p_2 \) relatief priem zijn, ofwel als ze geen delers (groter dan 1) gemeen hebben.
Als de grootste gemene deler van \( p_1 \) en \( p_2 \) gelijk is aan \( g \) (groter of gelijk aan 1), en
\begin{equation} q_i = \frac{p_i}{g} \end{equation}
dan kunnen we formule \eqref{eq:kp_1} omschrijven tot
\begin{equation} kgq_1 ≡ c_2 − c_1 \pmod{gq_2} \end{equation}
Als \( c_2 − c_1 \) deelbaar is door \( g \), dan kunnen we overal door \( g \) delen en vinden we
\begin{equation} kq_1 = \frac{c_2 − c_1}{g} \pmod{q_2} \label{eq:red} \end{equation}
Voor data uit kalenders gebaseerd op formule \eqref{eq:cycli} is \( c_2 − c_1 \) deelbaar door \( g \), dus we gaan daar van uit.
Omdat \( q_1 \) en \( q_2 \) relatief priem zijn bestaat er een getal \( r_2 \) zodat \( r_2q_1 ≡ 1 \pmod{q_2} \). Daarmee vinden we uit formule \eqref{eq:red}
\begin{equation} k ≡ kq_1r_2 ≡ \frac{c_2 − c_1}{g} r_2 \pmod{q_2} \end{equation}
en daarmee
\begin{align} kp_1 & ≡ q_1r_2\frac{c_2 − c_1}{g} \pmod{q_2p_1} \\ J & = c_1 + kp_1 ≡ c_1 + q_1r_2(c_2 − c_1) ≡ c_1 (1 − r_2q_1) + c_2r_2q_1 \pmod{q_2p_1} \end{align}
ofwel
\begin{equation} J ≡ (x_1 − a_1) (1 − r_2q_1) + (x_2 − a_2)r_2q_1 \pmod{p_2q_1} \label{eq:cyclitoj} \end{equation}
Samengevat:
\begin{equation} g = \gcd(p_1, p_2) \end{equation}
\[ s ≡ 1 \pmod{p_2/g} \]
\begin{equation} J ≡ sx_2 + (1 − s)x_1 − (sa_2 + (1 − s)a_1) \pmod{p_1p_2/g} \end{equation}
Hoe vind je nu zo'n \( r_2 \) zodat \( s = r_2q_1 ≡ 1 \pmod{q_2} \)? Omdat je voor een gegeven kalender die \( r_2 \) of \( s \) maar eenmaal hoeft te vinden is het meestal het minste werk om opeenvolgende waarden te proberen tot je de goede vindt. Je hoeft hooguit \( q_2 \) opeenvolgende waarden te proberen. Als je heel vaak zo'n \( r_2 \) moet uitrekenen, gebruik dan het Uitgebreide Algoritme van Euclides.
De grootste gemene deler van \( p_1 \) en \( p_2 \) kun je vinden met het gewone Algoritme van Euclides.
We gebruiken weer de kalender uit het vorige voorbeeld, met \( p_1 = 13 \), \( p_2 = 20 \), \( a_1 = 11 \) en \( a_2 = 8 \). De grootste gemene deler van 13 en 20 is 1, dus \( g = 1 \). Nu zoeken we \( s \). Dat is het kleinste veelvoud van \( p_1/g = 13/1 = 13 \) waarvoor \( s ≡ 1 \pmod{20} \) ofwel \( s \bmod 20 = 1 \).
| \({k}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| \({s = 13k}\) | 0 | 13 | 26 | 39 | 52 | 65 | 78 | 91 | 104 | 117 | 130 | 143 | 156 | 169 | 182 | 195 | 208 | 221 | 234 | 247 | 260 |
| \({s \bmod 20}\) | 0 | 13 | 6 | 19 | 12 | 5 | 18 | 11 | 4 | 17 | 10 | 3 | 16 | 9 | 2 | 15 | 8 | 1 | 14 | 7 | 0 |
We vinden \( s = 17×13 = 221 \), want \( 221 ≡ 1 \pmod{20} \).
Dan is
\begin{align*} J & ≡ 221x_2 − 220x_1 − (221×8 − 220×11) \\ & ≡ 221x_2 − 220x_1 + 652 \\ & ≡ 221x_2 + 40x_1 + 132 \\ & ≡ 40x_1 + 221x_2 + 132 \pmod{13×20 = 260} \end{align*}
Voor datum \( \{9,19\} \) vinden we dan
\begin{align*} J & ≡ 40×9 + 221×19 + 132 \\ & ≡ 360 + 4199 + 132 \\ & ≡ 100 + 39 + 132 ≡ 271 ≡ 11 \pmod{260} \end{align*}
dus dag \( J = 11 \) en elke 260 dagen eerder of later komen overeen met datum \( \{9,19\} \).
De volgorde van de twee beginrelaties maakt niet uit, dus we kunnen ook de rollen van \( p_1 \) en \( p_2 \) (en van \( a_1 \) en \( a_2 \)) omwisselen. We zoeken naar het kleinste veelvoud \( s \) van \( p_2/g = 20/1 = 20 \) waarvoor \( s ≡ 1 \pmod{13} \) ofwel \( s \bmod 13 = 1 \). Dat levert \( s = 40 \) want \( 40 = 3×13 + 1 ≡ 1 \pmod{13} \). Dan is
\begin{align*} J & ≡ 40x_1 ― 39x_2 − (40×11 − 39×8) \\ & ≡ 40x_1 ― 39x_2 − 128 \\ & = 40x_1 + 221x_2 + 132 \pmod{260} \end{align*}
hetzelfde als voorheen.
Let op! Formule \eqref{eq:cyclitoj} geeft alleen zinnige resultaten voor \( \{x\} \) die ook echt in de kalender voorkomen. Als \( g \) niet gelijk is aan 1, dan komen niet alle mogelijke \( \{x\} \) voor. Als je een \( \{x\} \) invult die niet in de kalender voorkomt, dan komt er toch een redelijk uitziend resultaat uit de formule, maar dat klopt dan niet.
Nu bekijken we een kalender waarbij de perioden niet relatief priem zijn, met \( p_1 = 10 \), \( p_2 = 15 \), \( a_1 = a_2 = 0 \). Dan is
\begin{align*} x_1 = J \bmod 10 \\ x_2 = J \bmod 15 \end{align*}
De grootste gemene deler van \( p_1 \) en \( p_2 \) is \( g = 5 \). We zoeken het kleinste veelvoud \( s \) van \( p_1/g = 10/5 = 2 \) waarvoor \( s ≡ 1 \pmod{15/5 = 3} \). Dat is \( s = 4 \), want \( 4 = 2×2 = 3 + 1 ≡ 1 \pmod{3} \). Daarmee
\begin{align*} J & ≡ 4x_2 − 3x_1 − 0 ≡ 27x₁ + 4x₂ \pmod{10×15/5 = 30} \end{align*}
Voor \( J \) van 8 tot 17 vinden we dan voor \( \{x\} \): \( \{8,8\} \), \( \{9,9\} \), \( \{0,10\} \), \( \{1,11\} \), \( \{2,12\} \), \( \{3,13\} \), \( \{4,14\} \), \( \{5,0\} \), \( \{6,1\} \), \( \{7,2\} \).
Voor die \( \{x\} \) vinden we:
| \({x_1}\) | 8 | 9 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| \({x_2}\) | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 0 | 1 | 2 |
| \({27x_1 + 4x_2}\) | 248 | 279 | 40 | 71 | 102 | 133 | 164 | 135 | 166 | 197 |
| \({J \bmod 30}\) | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
Omdat \( g \) niet gelijk is aan 1 komen veel combinaties van \( x_1 \) en \( x_2 \) niet voor in deze kalender. Alleen combinaties waarvoor \( x_1 − x_2 \) deelbaar is door 5 komen voor in deze kalender. Bijvoorbeeld \( \{3,7\} \) komt niet voor. Als we daarop bovenstaande formule voor \( J \) toepassen dan vinden we \( J ≡ 27×3 + 4×7 ≡ 19 \pmod{30} \), maar voor \( J = 19 \) vinden we \( x_1 = 9 \) en \( x_2 = 4 \), dus \( \{9,4\} \) en niet \( \{3,7\} \). Ook voor onmogelijke \( \{x\} \) komt er een nette \( J \) uit de formule.
Met behulp van formule \eqref{eq:cyclitoj} komt uit \( J ≡ x_1 − a_1 \pmod{p_1} \) en \( J ≡ x_2 − a_2 \pmod{p_2} \) een andere formule \( J ≡ C_2 \pmod{P_2} \) met
\begin{align} C_2 & ≡ (x_1 − a_1) (1 − s_2) + (x_2 − a_2) s_2 \\ P_2 & ≡ p_1p_2/g_1 \end{align}
Die formule heeft weer dezelfde vorm als de twee formules waar we mee begonnen, dus kunnen we die formule weer op dezelfde manier combineren met \( J ≡ x_3 − a_3 \pmod{p_3} \), en zo door tot we alle \( p_i \) gehad hebben. Uiteindelijk vinden we een formule die weer diezelfde vorm heeft \( J ≡ C_n \pmod{P_n} \) en dat is dan de uiteindelijke oplossing.
De procedure is dan als volgt. Gegeven \( x_i \), \( p_i \), \( a_i \) voor \( i \) van 1 tot en met \( n \),
Laten we een kalender bekijken met de volgende kenmerken:
| \({i}\) | 1 | 2 | 3 |
| \({p_i}\) | 4 | 5 | 6 |
| \({a_i}\) | 3 | 1 | 2 |
Dan reken je als volgt om van doorlopend dagnummer \( J \) naar kalenderdatum \( \{x\} \):
\begin{align*} x_1 & = (J + 3) \bmod 4 \\ x_2 & = (J + 1) \bmod 5 \\ x_3 & = (J + 2) \bmod 6 \end{align*}
In de omgekeerde richting vinden we:
\begin{align*} C_1 & = x_1 − 3 \\ P_1 & = 4 \\ g_2 & = \gcd(4, 5) = 1 \\ s_2 & = 16 = 4×4 = 3×5 + 1 ≡ 1 \pmod{5} \\ C_2 & = C_1×(1 − 16) + (x_2 − 1)×16 \\ & = −15×(x_1 − 3) + 16×(x_2 − 1) \\ & = −15x_1 + 16x_2 + 29 \\ P_2 & = 4×5/1 = 20 \\ g_3 & = \gcd(20, 6) = 2 \\ s_3 & = 10 = 5×2 = 3×3 + 1 ≡ 1 \pmod{3} \\ C_3 & = C_2×(1 − 10) + (x_3 − 2)×10 \\ & = −9×(−15x_1 + 16x_2 + 29) + 10×(x_3 − 2) \\ & = 135x_1 − 144x_2 + 10x_3 − 281 \\ P_3 & = 20×6/2 = 60 \end{align*}
De oplossing is \( J ≡ C_3 ≡ 15x_1 + 36x_2 + 10x_3 + 19 \pmod{60} \).
Even controleren: als \( J = 654 \), dan \( x_1 = (654 + 3) \bmod 4 = 1 \), \( x_2 = (654 + 1) \bmod 5 = 0 \), \( x_3 = (654 + 2) \bmod 6 = 2 \). En van \( \{x\} \) naar \( J \) vinden we \( J ≡ 15×1 + 36×0 + 10×2 + 19 ≡ 54 \pmod{60} \), en dat klopt, want \( 54 ≡ 654 \pmod{60} \).
Omdat de datum \( \{x\} \) gegeven is als een serie posities in zich herhalende kringlopen is er een oneindig aantal dagen die bij die datum passen. Voor het doorlopende dagnummer \( J \) dat overeenkomt met datum \( \{x\} \) vonden we formule \eqref{eq:cycle}, die een oplossing geeft \( \bmod P_n \). Als je een dagnummer \( J \) gevonden hebt dat hoort bij datum \( \{x\} \), dan kun je willekeurige veelvouden van \( P_n \) daar bijtellen of aftrekken en dan heb je weer een dagnummer dat hoort bij datum \( \{x\} \). Hoe kiezen we de juiste?
Om de juiste oplossing te kiezen uit de oneindige verzameling van mogelijke oplossingen moeten we extra informatie gebruiken. Een toepasselijke manier is om de laatste oplossing te kiezen voor of op een bepaalde dag, bijvoorbeeld de laatste dag op of voor \( J = 700 \) die overeenkomt met datum \( \{1,0,2\} \).
Als die grensdag \( J_0 \) is, en \( J ≡ C_n \pmod{P_n} \), dan
\begin{align} J_0 − P_n & \lt J ≤ J_0 \\ J_0 − P_n & \lt C_n + kP_n ≤ J_0 \\ J_0 − C_n − P_n & \lt kP_n ≤ J_0 − C_n \\ \frac{J_0 − C_n}{P_n} − 1 & \lt k ≤ \frac{J_0 − C_n}{P_n} \\ \floorratio{J_0 − C_n}{P_n} − 1 & \lt k ≤ \floorratio{J_0 − C_n}{P_n} \end{align}
Er is maar één waarde van \( k \) die aan deze ongelijkheid voldoet, namelijk
\begin{equation} k = \floorratio{J_0 − C_n}{P_n} \end{equation}
Nu is
\[ \floorratio{x}{y} = \frac{x}{y} − \frac{x \bmod y}{y} \]
dus
\[ y\floorratio{x}{y} = x − (x \bmod y) \]
dus
\begin{equation} kP_n = P_n\floorratio{J_0 − C_n}{P_n} = J_0 − C_n − ((J_0 − C_n) \bmod P_n) \end{equation}
en
\begin{equation} J = C_n + kP_n = J_0 − ((J_0 − C_n) \bmod P_n) \label{eq:laatste} \end{equation}
Bijvoorbeeld, wat is de laatste dag op of voor \( J_0 = 700 \) die overeenkomt met datum \( \{1,0,2\} \) in de kalender uit het vorige voorbeeld?
We vonden daar \( C_n = 15x_1 + 36x_2 + 10x_3 + 19 \) en \( P_n = 60 \), dus \( C_n = 15×1 + 36×0 + 10×2 + 19 = 54 \). Met formule \eqref{eq:laatste} vinden we dan \( J = 700 − ((700 − 54) \bmod 60) = 700 − (646 \bmod 60) = 700 − 46 = 654 \) en dat klopt: 654 + 60 = 714 is groter dan 700, dus 654 is de laatste \( J \) die kleiner of gelijk is aan \( J_0 \) en die past bij datum \( \{1,0,2\} \).
We moeten \( J = 654 \) vinden voor \( J_0 \) van 654 tot en met 654 + 60 − 1 = 713, en dat doen we ook:
| \({J_0}\) | \({J_0 − C_n}\) | \({(J_0 − C_n) \bmod P_n}\) | \({J}\) |
| 653 | 599 | 59 | 594 |
| 654 | 600 | 0 | 654 |
| 712 | 658 | 58 | 654 |
| 713 | 659 | 59 | 654 |
| 714 | 660 | 0 | 714 |
Deze samenvatting noemt dagen en maanden, maar geldt ook voor andere tijdseenheden. We onderscheiden vier verschillende moeilijkheidsgraden: van 1 tot 4 worden de formules ingewikkelder maar kunnen ze ook meer gevallen aan.
De tabel hieronder vat de kalenderformules samen, en maakt gebruik van de volgende definities:
Tabel 1: Kalenderformulessamenvatting
# | \({p}\) | \({f}\) | \({c}\) | \({c'}\) | \({s}\) | \({ζ}\) |
|---|---|---|---|---|---|---|
| 1 | \({q+ψ}\) | \({qg+h}\) | \({\floorratio{fx}{g}}\) | \({\floorratio{gy+g−1}{f}}\) | \({0}\) | \({0}\) |
| 2 | \({q+ψ}\) | \({qg+h}\) | \({\floorratio{fx+s}{g}}\) | \({\floorratio{gy+g−s−1}{g}}\) | \({fa \bmod g}\) | \({0}\) |
| 3 | \({q+dψ}\) | \({qg+dh}\) | \({qx+d\floorratio{hx+s}{g}}\) | \({\floorratio{gy+dg−ds−1}{g}}\) | \({ha \bmod g}\) | \({\floorratio{z}{q + d}}\) |
| 4 | \({q+∑d_{i}ψ_i}\) | \({qg+∑d_{i}h_i}\) | \({qx+∑d_i\floorratio{h_{i}x+s_i}{g}}\) | \({\floorratio{gy+g∑_{\gt0}d_i−∑d_{i}s_i−1}{f}}\) | \({h_{i}a_i \bmod g}\) | \({\floorratio{z}{q + ∑_{\gt0}d_i}}\) |
Voor kalendertypen 3 en 4 geeft de formule voor \( x \) een bovengrens voor het maandnummer. De algemene procedure om het juiste maandnummer te vinden is dan:
Probeer de \( x \) die uit de formule in de tabel komt. Reken de bijbehorende \( c \) uit en daarna \( z = y − c \) en \( ζ \). Als \( ζ \) gelijk is aan 0 dan ben je klaar. Tel anders \( ζ \) (die negatief is) op bij \( x \) en probeer opnieuw.
Als \( d ≤ p \) (voor kalendertype 3) of \( ∑_{\gt0}d_i − ∑_{\lt0}d_i \lt p \) (voor kalendertype 4), dan hoef je \( ζ \) hooguit één maal uit te rekenen. Anders kunnen meer keren nodig zijn, tot \( ⌈(d − 1)/p⌉ + 1 \) (voor kalendertype 3) of \( ⌈(∑_{\gt0}d_i − ∑_{\lt0}d_i)/p⌉ + 1 \) (voor kalendertype 4) keer.
Als er meer dan twee tijdsperioden in het spel zijn, dan moeten verschillende kalenderniveaus gecombineerd worden. Van kalenderdatum richting doorlopend dagnummer geldt
\begin{equation} y_i = c_i(x_i) + z_i \end{equation}
en van doorlopend dagnummer richting kalenderdatum
\begin{align} x_i & = c'_i(y_i) \\ z_i & = y_i − c_i(x_i) \end{align}
Als de kleinste tijdseenheid in twee kalenders hetzelfde is (bijvoorbeeld dagen) dan moeten die kalenders op de vlakke manier gecombineerd worden, dan is \( z_{i+1} = y_i \). Als de kleinste tijdseenheid van kalender \( i + 1 \) gelijk is aan de grootste tijdseenheid van kalender \( i \), dan moeten die kalenders op de getrapte manier gecombineerd worden, dan is \( x_{i+1} = y_i \).
Bijna alle kalenders onderscheiden drie basisperioden: dagen, maanden en jaren. Met één kalenderniveau (rechte lijn) kun je twee perioden verbinden, dus voor drie perioden zijn tenminste twee kalenderniveaus nodig.
In de Juliaanse kalender volgt op drie gewone jaren van 365 dagen een schrikkeljaar van 366 dagen. Deze periode van vier jaren bevat dus 3×365 + 366 = 1461 dagen. Elke periode van vier jaren heeft dezelfde volgorde van maanden met hun maandlengtes.
Alle maanden hebben 30 of 31 dagen, behalve februari die er 28 of 29 heeft. Die extra-korte maand februari is een beetje een probleem, want die zorgt ervoor dat we te maken hebben met maar liefst vier verschillende maandlengtes. Dat lossen we op door februari te zien als laatste maand van het rekenjaar. Dan wordt maart maand 0 van het rekenjaar, en februari is maand 11 van datzelfde rekenjaar.
Voor maand \( m \) van jaar \( j \) vinden we dan rekenmaand \( m_2 \) en rekenjaar \( j_2 \):
\begin{align} \{ c, m_2 \} & = \Div(m − 3, 12) \\ c & = \floorratio{m − 3}{12} \\ m_2 & = m − 12c − 3 = (m ― 3) \bmod 12 \\ j_2 & = j + c \end{align}
| \({m}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| \({c}\) | −1 | −1 | −1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| \({m_2}\) | 9 | 10 | 11 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 0 | 1 | 2 |
| \({j_2}\) | \({j−1}\) | \({j−1}\) | \({j−1}\) | \({j}\) | \({j}\) | \({j}\) | \({j}\) | \({j}\) | \({j}\) | \({j}\) | \({j}\) | \({j}\) | \({j}\) | \({j}\) | \({j}\) | \({j+1}\) | \({j+1}\) | \({j+1}\) |
en andersom
\begin{align} c & = \floorratio{m_2 + 2}{12} \\ m & = m_2 − 12c + 3 \\ j & = j_2 + c \end{align}
| \({m_2}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| \({c}\) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| \({m}\) | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 1 | 2 |
| \({j}\) | \({j_2}\) | \({j_2}\) | \({j_2}\) | \({j_2}\) | \({j_2}\) | \({j_2}\) | \({j_2}\) | \({j_2}\) | \({j_2}\) | \({j_2}\) | \({j_2+1}\) | \({j_2+1}\) |
Als we een vlakke combinatie van kalenders gebruiken dan begint de onderste kalender (dagen-maanden) telkens opnieuw voor elk jaar in de bovenste kalender (dagen-jaren). De laatste maand van het rekenjaar wordt dan afgekapt door de bovenste kalender, dus maakt het niet uit als die maand zonder afkapping teveel dagen zou bevatten. Dan kunnen we in de onderste kalender alle maanden 30 of 31 dagen geven, en dan is het een stuk simpeler.
De maandlengtes van maart tot en met januari zijn: 31 - 30 - 31 - 30 - 31 - 31 - 30 - 31 - 30 - 31 - 31. Deze volgorde van maandlengtes krijgen we als we kalendertype 2 uit hoofdstuk 12.11 gebruiken met \( f = 153 \), \( g = 5 \), \( a = 4 \) dus \( s = fa \bmod g = 153×4 \bmod 5 = 2 \). In die kalender krijgt februari 30 dagen, maar dat wordt ingekort tot 28 of 29 door de bovenste kalender.
Die bovenste kalender moet jaarlengtes van 365 - 365 - 365 - 366 geven, en dat elke 4 jaar herhalen. Die volgorde van jaarlengtes krijgen we als we kalendertype 1 gebruiken met \( f = 1461 \), \( g = 4 \).
De eerste dag van rekenjaar 0, ofwel 1 maart van het jaar 0 in de Juliaanse kalender, heeft CJDN \( J_0 = 1721118 \).
De stappen zijn nu als volgt, van de Juliaanse kalender naar CJDN:
Reken om van jaar \( j \), maand \( m \), dag \( d \) naar rekenjaar \( x_2 \), rekenmaand \( x_1 \), en rekendag \( z_1 \). De eerste rekenperiode voor elke tijdseenheid (rekenjaar, rekenmaand, rekendag) moet nummer 0 hebben, anders kloppen de berekeningen niet.
\begin{align} \{ c_0, x_1\} & = \Div(m ― 2, 12) \\ c_0 & = \floorratio{m − 3}{12} \\ x_1 & = m − 12c_0 − 3 = (m ― 3) \bmod 12 \\ x_2 & = j + c_0 \\ z_1 & = d − 1 \end{align}
We combineren de twee kalenderniveaus op de vlakke manier, dus \( z_2 = y_1 \):
\begin{align} c_1 & = \floorratio{153x_1 + 2}{5} \\ y_1 & = c_1 + z_1 \\ z_2 & = y_1 \\ c_2 & = \floorratio{1461x_2}{4} \\ y_2 & = c_2 + z_2 \end{align}
Tel de CJDN van lopende dagnummer 0 erbij op:
\begin{equation} J = y_2 + J_0 = y_2 + 1721118 \end{equation}
Bijvoorbeeld, wat is het CJDN dat hoort bij Juliaanse datum 6 juli 2003? Dan is \( j = 2003 \), \( m = 7 \), \( d = 6 \), en daarmee
\begin{align*} c_0 & = \floorratio{7 − 3}{12} = 0 \\ x_1 & = 7 − 12×0 − 3 = 4 \\ x_2 & = 2003 + 0 = 2003 \\ z_1 & = 6 − 1 = 5 \\ c_1 & = \floorratio{153×4 + 2}{5} = \floorratio{614}{5} = 122 \\ y_1 & = 122 + 5 = 127 \\ z_2 & = 127 \\ c_2 & = \floorratio{1461×2003}{4} = \floorratio{2926383}{4} = 731595 \\ y_2 & = 731595 + 127 = 731722 \\ J & = 731722 + 1721118 = 2452840 \end{align*}
Nog een voorbeeld. Wat is het CJDN dat hoort bij Juliaanse datum 1 december 2000? Dan is \( j = 2000 \), \( m = 12 \), \( d = 1 \), en daarmee
\begin{align*} c_0 & = \floorratio{12 − 3}{12} = 0 \\ x_1 & = 12 − 12×0 − 3 = 9 \\ x_2 & = 2000 + 0 = 2000 \\ z_1 & = 1 − 1 = 0 \\ c_1 & = \floorratio{153×9 + 2}{5} = \floorratio{1379}{5} = 275 \\ y_1 & = 275 + 0 = 275 \\ z_2 & = 275 \\ c_2 & = \floorratio{1461×2000}{4} = \floorratio{2922000}{4} = 730500 \\ y_2 & = 730500 + 275 = 730775 \\ J & = 730775 + 1721118 = 2451893 \end{align*}
We kunnen deze stappen samenvoegen en indikken, tot:
\begin{align} c_0 & = \floorratio{m − 3}{12} \\ J & = \floorratio{1461×(j + c_0)}{4} + \floorratio{153m − 1836c_0 − 457}{5} + d + 1721117 \end{align}
Voor hetzelfde voorbeeld als hierboven vinden we \( j = 2003 \), \( m = 7 \), \( d = 6 \), dus
\begin{align*} c_0 & = \floorratio{7 − 3}{12} = 0 \\ J & = \floorratio{1461×(2003 + 0)}{4} + \floorratio{153×7 − 1836×0 − 457}{5} + 6 + 1721117 \\ & = \floorratio{2926383}{4} + \floorratio{614}{5} + 6 + 1721117 \\ & = 731595 + 122 + 6 + 1721117 = 2452840 \end{align*}
hetzelfde antwoord als voorheen.
Hiervoor doorlopen we de omgekeerde procedure als hierboven, met dezelfde kalenderniveaus als hierboven. Kalenderniveau 1 is van kalendertype 2 met \( f = 153 \), \( g = 5 \), \( a = 4 \) (dus \( s = fa \bmod g = 153×4 \bmod 5 = 2 \)) en kalenderniveau 2 is van kalendertype 1 met \( f = 1461 \), \( g = 4 \).
Eerst trekken we het Juliaanse dagnummer van lopende dagnummer 0 af van het Juliaanse dagnummer om het lopende dagnummer te vinden:
\begin{equation} y_2 = J − J_0 = J − 1721118 \end{equation}
Dan rekenen we het lopende dagnummer op de vlakke manier om naar een rekenjaar, rekenmaand, en rekendag:
\begin{align} \{x_2, r_2\} & = \Div(4y_2 + 3, 1461) \\ z_2 & = \floorratio{r_2}{4} \\ \{x_1, r_1\} & = \Div(5z_2 + 2, 153) \\ z_1 & = \floorratio{r_1}{5} \end{align}
En als laatste vertalen we naar dag-maand-jaar:
\begin{align} c_0 & = \floorratio{x_1 + 2}{12} \\ j & = x_2 + c_0 \\ m & = x_1 − 12c_0 + 3 = ((x_1 + 2) \bmod 12) + 1 \\ d & = z_1 + 1 \end{align}
Bijvoorbeeld, welke Juliaanse datum komt overeen met CJDN 2452840? Dan is \( J = 2452840 \) en dan
\begin{align*} y_2 & = 2452840 − 1721118 = 731722 \\ \{x_2, r_2\} & = \Div(4×731722 + 3, 1461) = \Div(2926891, 1461) = \{2003, 508\} \\ z_2 & = \floorratio{508}{4} = 127 \\ y_1 & = 127 \\ \{x_1, r_1\} & = \Div(5×127 + 2, 153) = \Div(637, 153) = \{4, 25\} \\ z_1 & = \floorratio{25}{5} = 5 \\ c_0 & = \floorratio{4 + 2}{12} = 0 \\ j & = 2003 + 0 = 2003 \\ m & = 4 − 12×0 + 3 = 7 \\ d & = 5 + 1 = 6 \end{align*}
De datum is 6 juli 2003.
Welke Juliaanse datum komt overeen met CJDN 2451893? Dan is \( J = 2451893 \) en dan
\begin{align*} y_2 & = 2451893 − 1721118 = 730775 \\ \{x_2, r_2\} & = \Div(4×730775, 1461) = \Div(2923103, 1461) = \{2000, 1103\} \\ z_2 & = \floorratio{1103}{4} = 275 \\ y_1 & = z_2 = 275 \\ \{x_1, r_1\} & = \Div(5×275 + 2, 153) = \Div(1377, 153) = \{9, 0\} \\ z_1 & = \floorratio{0}{4} = 0 \\ c_0 & = \floorratio{9 + 2}{12} = \floorratio{11}{12} = 0 \\ j & = 2000 + 0 = 2000 \\ m & = 9 − 12×0 + 3 = 12 \\ d & = 0 + 1 = 1 \end{align*}
De datum is 1 december 2000.
En welke Juliaanse datum komt overeen met CJDN 173? Dan is \( J = 173 \) en dan
\begin{align*} y_2 & = 173 − 1721118 = −1720945 \\ \{x_2, r_2\} & = \Div(4×−1720945, 1461) = \Div(−6883777, 1461) = \{−4712, 455\} \\ z_2 & = \floorratio{455}{4} = 113 \\ y_1 & = 113 \\ \{x_1, r_1\} & = \Div(5×113 + 2, 153) = \Div(567, 153) = \{3, 108\} \\ z_1 & = \floorratio{108}{5} = 21 \\ c_0 & = \floorratio{3 + 2}{12} = 0 \\ j & = −4712 + 0 = −4712 \\ m & = 3 − 12×0 + 3 = 6 \\ d & = 21 + 1 = 22 \end{align*}
De datum is 22 juni −4712.
Ook dit kunnen we nog wat indikken, tot
\begin{align} y_2 & = J − 1721118 \\ k_2 & = 4y_2 + 3 \\ k_1 & = 5\floorratio{k_2 \bmod 1461}{4} + 2 \\ x_1 & = \floorratio{k_1}{153} \\ c_0 & = \floorratio{x_1 + 2}{12} \\ j & = \floorratio{k_2}{1461} + c_0 \\ m & = x_1 − 12c_0 + 3 \\ d & = \floorratio{k_1 \bmod 153}{5} + 1 \end{align}
of, met gebruik van \( \Div() \),
\begin{align} \{x_2, r_2\} & = \Div(4J − 6884469, 1461) \\ \{x_1, r_1\} & = \Div\left( 5\floorratio{r_2}{4} + 2, 153 \right) \\ d & = \floorratio{r_1}{5} + 1 \\ c_0 & = \floorratio{x_1 + 2}{12} \\ j & = x_2 + c_0 \\ m & = x_1 − 12c_0 + 3 \end{align}
Welke Juliaanse datum komt overeen met CJDN 2451893? Dan is \( J = 2451893 \) en dan
\begin{align*} y_2 & = 2451893 − 1721118 = 730775 \\ k_2 & = 4×730775 + 3 = 2923103 \\ k_1 & = 5\floorratio{2923103 \bmod 1461}{4} + 2 = 5\floorratio{1103}{4} + 2 = 5×275 + 2 = 1377 \\ x_1 & = \floorratio{1377}{153} = 9 \\ c_0 & = \floorratio{9 + 2}{12} = \floorratio{11}{12} = 0 \\ j & = \floorratio{2923103}{1461} + 0 = 2000 + 0 = 2000 \\ m & = 9 − 12×0 + 3 = 12 \\ d & = \floorratio{(1377 \bmod 153}{5} + 1 = \floorratio{0}{5} + 1 = 1 \end{align*}
of
\begin{align} \{x_2, r_2\} & = \Div(4×2451893 − 6884469, 1461) = \Div(2923103, 1461) = \{2000, 1103\} \\ \{x_1, r_1\} & = \Div\left( 5\floorratio{1103}{4} + 2, 153 \right) = \Div(5×275 + 2, 153) = \Div(1377, 153) = \{9, 0\} \\ d & = \floorratio{0}{5} + 1 = 1 \\ c_0 & = \floorratio{9 + 2}{12} = \floorratio{11}{12} = 0 \\ j & = 2000 + 0 = 2000 \\ m & = 9 − 12×0 + 3 = 12 \end{align}
De datum is 1 december 2000.
We kunnen ook een getrapte combinatie van kalenders gebruiken; dan hebben we een kalenderniveau nodig dat van een doorlopend maandnummer \( x \) naar een doorlopend dagnummer \( y \) gaat, rekening houdend met schrikkeljaren. Dan is er geen hoger kalenderniveau meer dat een te lange laatste maand afkapt, dus moeten de formules ook gelden voor hele grote doorlopende maandnummers.
We moeten dan eerst het jaartal \( x_1 \) en het maandnummer-in-het-jaar \( z_1 \) omrekenen naar een doorlopend maandnummer \( y_1 \), maar dat is erg simpel:
\begin{equation} y_1 = 12x_1 + z_1 \end{equation}
Op het tweede kalenderniveau moeten we het doorlopende maandnummer omrekenen naar een doorlopend dagnummer. Van de 12 maanden van een jaar zijn er 7 lang, met elk 31 dagen, dus hebben we een formule \( ⌊7×(x_2 + a)/12⌋ \) nodig (dat zich elke 12 maanden herhaalt), maar wat moet dan de waarde van \( a \) zijn?
Als \( a = 0 \), dan geeft \( ⌊7x_2/12⌋ \) de waarden (voor \( x_2 \) van 0 tot 12): 0 0 1 1 2 2 3 4 4 5 5 6 7. Elke keer dat die waarde eentje groter wordt was de maand daarvoor een lange maand, dus deze waarden betekenen dat de afwisseling tussen korte (K) en lange (L) maanden was: K L K L K L L K L K L L, maar wij zoeken L K L K L K L L K L K L. Dat krijgen we als we het patroon verschuiven over −1 maand (eentje naar links), dus \( a = −1 \). Dan is \( s = fa \bmod g = −7 \bmod 12 = 5 \), dus vinden we \( ⌊(7x_2 + 5)/12⌋ \).
Dan zijn alle maanden goed, behalve februari (\( x_2 = 1 \)) want die krijgt 30 dagen maar moet er 28 hebben in een gewoon jaar of 29 in een schrikkeljaar. We trekken 2 dagen af van elke februari met de formule \( −2⌊(x_2 + 10)/12⌋ \). We tellen er in het eerste van elke vier jaar weer 1 dag bij met de formule \( ⌊(x_2 + 46)/48⌋ \). Al met al vinden we
\begin{equation} c_2 = 30x_2 + \floorratio{7x_2 + 5}{12} − 2\floorratio{x_2 + 10}{12} + \floorratio{x_2 + 46}{48} \end{equation}
Dit is kalendertype 4, maar voor het terugrekenen is het beter als alle breuken dezelfde noemer gebruiken. Het kleinst gemene veelvoud van de noemers 12, 12 en 48 is 48, dus we gebruiken \( g = 48 \). Dan
\begin{equation} c_2 = 30x_2 + \floorratio{28x_2 + 20}{48} − 2\floorratio{4x_2 + 40}{48} + \floorratio{x_2 + 46}{48} \end{equation}
ofwel kalendertype 4 met \( q = 30 \), \( g = 48 \), \( \{d_1,h_1,s_1\} = \{1,28,20\} \), \( \{d_2,h_2,s_2\} = \{−2,4,40\} \), \( \{d_3,h_3,s_3\} = \{1,1,46\} \).
De procedure wordt dan
Reken om van jaar \( j \), maand \( m \), dag \( d \) naar rekenjaar \( x_1 \), rekenmaand \( z_1 \) en rekendag \( z_2 \). Het nummer van de eerste rekenjaar/maand/dag moet 0 zijn, anders kloppen de berekeningen niet
\begin{align} x_1 & = j \\ z_1 & = m − 1 \\ z_2 & = d − 1 \end{align}
Het CJDN \( J_0 \) dat overeenkomt met \( \{x_1,z_1,z_2\} = \{0,0,0\} \) ofwel 1 januari van het jaar 0 (in de Juliaanse kalender) is 1721058.
Combineer de kalenderniveaus op de getrapte manier, dus \( x_2 = y_1 \):
\begin{align} c_1 & = 12x_1 \\ y_1 & = c_1 + z_1 \\ x_2 & = y_1 \\ c_2 & = 30x_2 + \floorratio{28x_2 + 20}{48} − 2\floorratio{4x_2 + 40}{48} + \floorratio{x_2 + 46}{48} \\ y_2 & = c_2 + z_2 \end{align}
Tel het CJDN van lopende dagnummer 0 erbij op:
\begin{equation} J = y_2 + J_0 = y_2 + 1721058 \end{equation}
Bijvoorbeeld, wat is het CJDN dat hoort bij Juliaanse datum 6 juli 2003? Dan is \( j = 2003 \), \( m = 7 \), \( d = 6 \), en daarmee \( x_1 = 2003 \), \( z_1 = 6 \), \( z_2 = 5 \). Dan vinden we
\begin{align*} c_1 & = 12×2003 = 24036 \\ y_1 & = 24036 + 6 = 24042 \\ x_2 & = 24042 \\ c_2 & = 30×24042 + \floorratio{28×24042 + 20}{48} − 2×\floorratio{4×24042 + 40}{48} + \floorratio{24042 + 46}{48} \\ & = 721260 + \floorratio{673196}{48} − 2×\floorratio{96208}{48} + \floorratio{24088}{48} \\ & = 721260 + 14024 − 2×2004 + 501 = 731777 \\ y_2 & = 731777 + 5 = 731782 \\ J & = 731782 + 1721058 = 2452840 \end{align*}
We kunnen bovenstaande formules samenvoegen tot
\begin{align} c & = 12j + m \\ J & = 30c + \floorratio{7c − 2}{12} − 2\floorratio{c + 9}{12} + \floorratio{c + 45}{48} + d + 1721027 \end{align}
Bijvoorbeeld, wat is het CJDN dat hoort bij Juliaanse datum 6 juli 2003? Dan is \( j = 2003 \), \( m = 7 \), \( d = 6 \), en daarmee
\begin{align*} c & = 12×2003 + 7 = 24043 \\ J & = 30×24043 + \floorratio{7×24043 − 2}{12} − 2\floorratio{24043 + 9}{12} + \floorratio{24043 + 45}{48} + 6 + 1721027 \\ & = 721290 + \floorratio{168299}{12} − 2\floorratio{24052}{12} + \floorratio{24088}{48} + 6 + 1721027 \\ & = 721290 + 14024 − 2×2004 + 501 + 6 + 1721027 = 2452840 \end{align*}
Hiervoor doorlopen we dezelfde procedure als hierboven, maar in de omgekeerde richting.
Bereken het doorlopende dagnummer \( y_2 \) door het CJDN van lopende dagnummer 0 af te trekken van het Juliaanse dagnummer \( J \):
\begin{equation} y_2 = J − J_0 = J − 1721058 \end{equation}
Met \( q = 30 \), \( g = 48 \), \( \{d_1,h_1,s_1\} = \{1,28,20\} \), \( \{d_2,h_2,s_2\} = \{−2,4,40\} \), \( \{d_3,h_3,s_3\} = \{1,1,46\} \) is \( f = qg + ∑d_{i}h_i = 30×48 + 1×28 − 2×4 + 1×1 = 1461 \), dus de gemiddelde maandlengte is \( f/g = 1461/48 = 487/16 = 30 + 7/16 \) dag. Verder is nog \( ∑d_{i}s_i = 1×20 − 2×40 + 1×46 = −14 \) en \( ∑_{\gt0}d_i = 2 \), en dus
\begin{equation} g∑_{\gt0}d_i − ∑_i d_i s_i − 1 = 48×2 − (−14) − 1 = 109 \end{equation}
Reken om naar rekenjaar \( x_1 \), rekenmaand \( z_1 \) en rekendag \( z_2 \):
\begin{align} x_2 & = c'_2(y_2) = \floorratio{48y_2 + 109}{1461} \\ & \begin{split} c_2 & = 30x_2 + \floorratio{28x_2 + 20}{48} − 2\floorratio{4x_2 + 40}{48} + \floorratio{x_2 + 46}{48} \\ & = 30x_2 + \floorratio{7x_2 + 5}{12} − 2\floorratio{x_2 + 10}{12} + \floorratio{x_2 + 46}{48} \end{split} \\ z_2 & = y_2 − c_2 \\ ζ & = \floorratio{z_2}{32} \\ x_2 & ↤ x_2 + ζ \\ & \begin{split} c_2 & ↤ 30x_2 + \floorratio{28x_2 + 20}{48} − 2\floorratio{4x_2 + 40}{48} + \floorratio{x_2 + 46}{48} \\ & = 30x_2 + \floorratio{7x_2 + 5}{12} − 2\floorratio{x_2 + 10}{12} + \floorratio{x_2 + 46}{48} \end{split} \\ z_2 & ↤ y_2 − c_2 \\ y_1 & = x_2 \\ x_1 & = c'_1(y_1) = \floorratio{y_1}{12} \\ c_1 & = 12x_1 \\ z_1 & = y_1 − c_1 \end{align}
Reken dan om naar jaar \( j \), maand \( m \), dag \( d \):
\begin{align} j & = x_1 \\ m & = z_1 + 1 \\ d & = z_2 + 1 \end{align}
Bijvoorbeeld, wat is de Juliaanse datum die hoort bij CJDN 2452840? Dan is \( J = 2452840 \), en daarmee
\begin{align*} y_2 & = 2452840 − 1721058 = 731782 \\ x_2 & = \floorratio{48×731782 + 81}{1461} = \floorratio{35125617}{1461} = 24042 \\ c_2 & = 30×24042 + \floorratio{28×24042 + 20}{48} − 2×\floorratio{4×24042 + 40}{48} + \floorratio{24042 + 46}{48} \\ & = 721260 + \floorratio{673196}{48} − 2×\floorratio{96208}{48} + \floorratio{24088}{48} \\ & = 721260 + 14024 − 4008 + 501 = 731777 \\ z_2 & = 731782 − 731777 = 5 \\ ζ & = \floorratio{5}{32} = 0 \end{align*}
Omdat \( ζ = 0 \) blijven \( x_2 \), \( c_2 \), \( z_2 \) onveranderd. Dan
\begin{align*} y_1 & = 24042 \\ x_1 & = \floorratio{24042}{12} = 2003 \\ c_1 & = 12×2003 = 24036 \\ z_1 & = 24042 − 24036 = 6 \\ j & = 2003 \\ m & = 6 + 1 = 7 \\ d & = 5 + 1 = 6 \end{align*}
dus de datum is 6 juli 2003.
De Gregoriaanse kalender is gelijk aan de Juliaanse kalender, behalve in de regels wanneer februari 29 dagen heeft in plaats van 28. In de Juliaanse kalender heeft februari elk vierde jaar 29 dagen, als het jaartal deelbaar is door 4. In de Gregoriaanse kalender geldt dezelfde regel, behalve dat februari toch 28 dagen heeft als het jaartal deelbaar is door 100, behalve als het jaartal deelbaar is door 400, want dan heeft februari toch weer 29 dagen.
Om Gregoriaanse jaren met een enkele rechte lijn met een enkel patroon te benaderen moeten de schrikkelwaarden terugkomen na elke \( ⌊Q⌋ \) of \( ⌈Q⌉ \) perioden (voor een gunstige \( Q \); zie vergelijking \eqref{eq:Q}). Helaas passen de schrikkelregels van de Gregoriaanse kalender daar niet bij, want die zeggen dat de tijd tussen twee schrikkeljaren soms 4 jaar is en soms 8 jaar.
De volgende \( p \) zouden in aanmerking kunnen komen:
We kunnen nu met de 146097/4-lijn de perioden van 100 jaar vinden, en dan met de 36525/100-lijn de jaren in de 100-jaarperiode, en dan (net als voor de Juliaanse kalender) met de 153/5-lijn de maanden. 1 maart van het jaar 0 in de Gregoriaanse kalender komt overeen met \( J_0 = 1721120 \). We gebruiken dan drie kalenderniveaus, met de volgende waarden:
| \({i}\) | \({f_i}\) | \({g_i}\) | \({a_i}\) | \({s_i}\) |
|---|---|---|---|---|
| 1 | 153 | 5 | 4 | 2 |
| 2 | 36525 | 100 | 0 | 0 |
| 3 | 146097 | 4 | 0 | 0 |
De stappen zijn nu als volgt, van de Gregoriaanse kalender naar het CJDN:
Reken om van jaar \( j \), maand \( m \), dag \( d \) naar rekeneeuw \( x_3 \), rekenjaar \( x_2 \), rekenmaand \( x_1 \), en rekendag \( z_1 \).
\begin{align} c_0 & = \floorratio{m − 3}{12} \\ x_4 & = j + c_0 \\ \{x_3, x_2\} & = \Div(x_4, 100) \\ x_1 & = m − 12c_0 − 3 \\ z_1 & = d − 1 \end{align}
We combineren de drie kalenderniveaus op vlakke manier, dus \( z_2 = y_1 \) en \( z_3 = y_2 \):
\begin{align} c_1 & = \floorratio{153x_1 + 2}{5} \\ y_1 & = c_1 + z_1 \\ z_2 & = y_1 \\ c_2 & = \floorratio{36525x_2}{100} \\ y_2 & = c_2 + z_2 \\ z_3 & = y_2 \\ c_3 & = \floorratio{146097x_3}{4} \\ y_3 & = c_3 + z_3 \end{align}
Tel het CJDN van lopende dagnummer 0 erbij op:
\begin{equation} J = y_3 + J_0 = y_3 + 1721120 \end{equation}
Samengevoegd en ingedikt geeft dat:
\begin{align} c_0 & = \floorratio{m − 3}{12} \\ x_4 & = j + c_0 \\ \{x_3, x_2\} & = \Div(x_4, 100) \\ x_1 & = m − 12c_0 − 3 \\ J & = \floorratio{146097x_3}{4} + \floorratio{36525x_2}{100} + \floorratio{153x_1 + 2}{5} + d + 1721119 \label{eq:gregtocjdn1} \end{align}
Bijvoorbeeld, welke CJDN komt overeen met Gregoriaanse datum 6 juli 2003? Dan is \( j = 2003 \), \( m = 7 \), \( d = 6 \) en daarmee
\begin{align*} c_0 & = \floorratio{7 − 3}{12} = 0 \\ x_4 & = 2003 + 0 = 2003 \\ \{x_3, x_2\} & = \Div(2003, 100) = \{20, 3\} \\ x_1 & = 7 − 12×0 − 3 = 4 \\ J & = \floorratio{146097×20}{4} + \floorratio{36525×3}{100} + \floorratio{153×4 + 2}{5} + 6 + 1721119 \\ & = 730485 + 1095 + 122 + 6 + 1721119 = 2452827 \end{align*}
Nu gaan we weer de andere kant op, met dezelfde drie kalenderniveaus als hierboven.
Eerst trekken we het CJDN van lopende dagnummer 0 af van het CJDN om het lopende dagnummer te vinden:
\begin{equation} y_3 = J − J_0 = J − 1721120 \end{equation}
Dan rekenen we het lopende dagnummer op de vlakke manier om naar een rekeneeuw, rekenjaar, rekenmaand en rekendag:
\begin{align} \{x_3, r_3\} & = \Div(4y_3 + 3, 146097) \\ z_3 & = \floorratio{r_3}{4} \\ y_2 & = z_3 \\ \{x_2, r_2\} & = \Div(100y_2 + 99, 36525) \\ z_2 & = \floorratio{r_2}{100} \\ y_1 & = z_2 \\ \{x_1, r_1\} & = \Div(5y_1 + 2, 153) \\ z_1 & = \floorratio{r_1}{5} \end{align}
En als laatste vertalen we naar dag-maand-jaar:
\begin{align} c_0 & = \floorratio{x_1 + 2}{12} \\ j & = 100x_3 + x_2 + c_0 \\ m & = x_1 − 12c_0 + 3 \\ d & = z_1 + 1 \end{align}
Bijvoorbeeld, welke datum in de Gregoriaanse kalender komt overeen met CJDN 2452827? Dan is \( J = 2452827 \) en dan
\begin{align*} y_3 & = J − 1721120 = 731707 \\ \{x_3, r_3\} & = \Div(4×731707, 146097) = \Div(2926831, 146097) = \{20, 4891\} \\ z_3 & = \floorratio{4891}{4} = 1222 \\ y_2 & = 1222 \\ \{x_2, r_2\} & = \Div(100×1222 + 99, 36525) = \Div(122299, 36525) = \{3, 12724\} \\ z_2 & = \floorratio{12724}{100} = 127 \\ y_1 & = 127 \\ \{x_1, r_1\} & = \Div(5×127 + 2, 153) = \Div(637, 153) = \{4, 25\} \\ z_1 & = \floorratio{25}{5} = 5 \\ c_0 & = \floorratio{4 + 2}{12} = 0 \\ j & = 100×20 + 3 + 0 = 2003 \\ m & = 4 − 12×0 + 3 = 7 \\ d & = 5 + 1 = 6 \end{align*}
De datum is 6 juli 2003.
Dit dikt een klein beetje in tot:
\begin{align} \{x_3, r_3\} & = \Div(4J − 6884477, 146097) \\ \{x_2, r_2\} & = \Div\left( 100\floorratio{r_3}{4} + 99, 36525 \right) \\ \{x_1, r_1\} & = \Div\left( 5\floorratio{r_2}{100} + 2, 153 \right) \\ d & = \floorratio{r_1}{5} + 1 \\ c_0 & = \floorratio{x_1 + 2}{12} \\ j & = 100x_3 + x_2 + c_0 \\ m & = x_1 − 12c_0 + 3 \end{align}
Bijvoorbeeld, welke datum in de Gregoriaanse kalender komt overeen met CJDN 2452827? Dan is \( J = 2452827 \) en dan
\begin{align*} \{x_3, r_3\} & = \Div(4×2452827 − 6884477, 146097) = \Div(2926831, 146097) = \{20, 4891\} \\ \{x_2, r_2\} & = \Div\left( 100\floorratio{4891}{4} + 99, 36525 \right) = \Div(100×1222 + 99, 36525) = \Div(122299, 36525) = \{3, 12724\} \\ \{x_1, r_1\} & = \Div\left( 5\floorratio{12724}{100} + 2, 153 \right) = \Div(5×127 + 2, 153) = \Div(637, 153) = \{4, 25\} \\ d & = \floorratio{25}{5} + 1 = 5 + 1 = 6 \\ c_0 & = \floorratio{4 + 2}{12} = 0 \\ j & = 100×20 + 3 + 0 = 2003 \\ m & = 4 − 12×0 + 3 = 7 \end{align*}
De datum is 6 juli 2003.
We kunnen toe met twee kalenderniveaus en vlakke combinatie als we kalendertype 4 gebruiken voor het bovenste niveau, met meerdere maandlengtes. Dan is voor dat bovenste niveau
\begin{align*} q & = 365 \\ g & = 400 \\ \{d_1,h_1,s_1\} & = \{1,100,0\} \\ \{d_2,h_2,s_2\} & = \{−1,4,0\} \\ \{d_3,h_3,s_3\} & = \{1,1,0\} \end{align*}
Het onderste kalenderniveau is hetzelfde als hierboven, dus
\begin{align} c_3 & = \floorratio{m − 3}{12} \\ x_2 & = j + c_3 \\ x_1 & = m − 12c_3 − 3 \\ z_1 & = d − 1 \\ c_1 & = \floorratio{153x_1 + 2}{5} \\ y_1 & = c_1 + z_1 \\ z_2 & = y_1 \\ & \begin{split} c_2 & = 365x_2 + \floorratio{100x_2}{400} − \floorratio{4x_2}{400} + \floorratio{x_2}{400} \\ & = 365x_2 + \floorratio{x_2}{4} − \floorratio{x_2}{100} + \floorratio{x_2}{400} \end{split} \\ y_2 & = c_2 + z_2 \\ J & = y_2 + J_0 = y_2 + 1721120 \end{align}
Bijvoorbeeld, welke CJDN komt overeen met Gregoriaanse datum 6 juli 2003? Dan is \( j = 2003 \), \( m = 7 \), \( d = 6 \) en daarmee
\begin{align*} c_3 & = \floorratio{7 − 3}{12} = 0 \\ x_1 & = 7 − 12×0 − 3 = 4 \\ x_2 & = 2003 + 0 = 2003 \\ z_1 & = 6 − 1 = 5 \\ c_1 & = \floorratio{153×4 + 2}{5} = \floorratio{614}{5} = 122 \\ y_1 & = 122 + 5 = 127 \\ z_2 & = 127 \\ c_2 & = 365×2003 + \floorratio{100×2003}{400} − \floorratio{4×2003}{400} + \floorratio{2003}{400} \\ & = 731095 + \floorratio{200300}{400} − \floorratio{8012}{400} + 5 \\ & = 731095 + 500 − 20 + 5 = 731580 \\ y_2 & = 731580 + 127 = 731707 \\ J & = 731707 + 1721120 = 2452827 \end{align*}
Dit dikt in tot:
\begin{align} c_3 & = \floorratio{m − 3}{12} \\ x_2 & = j + c_3 \\ x_1 & = m − 12c_3 − 3 \\ J & = 365x_2 + \floorratio{x_2}{4} − \floorratio{x_2}{100} + \floorratio{x_2}{400} + \floorratio{153x_1 + 2}{5} + d + 1721119 \end{align}
Nu gaan we weer de andere kant op, met voor de bovenste kalender (van kalendertype 4)
\( q = 365 \), \( g = 400 \), \( \{d_1,h_1,s_1\} = \{1,100,0\} \), \( \{d_2,h_2,s_2\} = \{−1,4,0\} \), \( \{d_3,h_3,s_3\} = \{1,1,0\} \)
Dan is
\begin{equation} f = qg + ∑d_{i}h_i = 365×400 + 1×100 − 1×4 + 1×1 = 146097 \end{equation}
dus de gemiddelde jaarlengte is \( f/g = 146097/400 = 365 \frac{97}{400} \) dag.
Eerst trekken we het CJDN van lopende dagnummer 0 af van het CJDN om het lopende dagnummer te vinden:
\begin{equation} y_2 = J − J_0 = J − 1721120 \end{equation}
Dan rekenen we het lopende dagnummer op de vlakke manier om naar een rekenjaar, rekenmaand, en rekendag:
\begin{align} x_2 & = c'_2(y_2) = \floorratio{400y_2 + 799}{146097} \\ & \begin{split} c_2 & = 365x_2 + \floorratio{100x_2}{400} − \floorratio{4x_2}{400} + \floorratio{x_2}{400} \\ & = 365x_2 + \floorratio{x_2}{4} − \floorratio{x_2}{100} + \floorratio{x_2}{400} \end{split} \\ z_2 & = y_2 − c_2 \\ ζ & = \floorratio{z_2}{367} \\ x_2 & ↤ x_2 + ζ \\ & \begin{split} c_2 & ↤ 365x_2 + \floorratio{100x_2}{400} − \floorratio{4x_2}{400} + \floorratio{x_2}{400} \\ & = 365x_2 + \floorratio{x_2}{4} − \floorratio{x_2}{100} + \floorratio{x_2}{400} \end{split} \\ z_2 & ↤ y_2 − c_2 \\ y_1 & = z_2 \\ x_1 & = c'_1(y_1) = \floorratio{5y_1 + 2}{153} \\ c_1 & = \floorratio{153x_1 + 2}{5} \\ z_1 & = y_1 − c_1 \end{align}
En als laatste vertalen we naar dag-maand-jaar:
\begin{align} c_0 & = \floorratio{x_1 + 2}{12} \\ j & = x_2 + c_0 \\ m & = x_1 − 12c_0 + 3 \\ d & = z_1 + 1 \end{align}
Bijvoorbeeld, welke datum in de Gregoriaanse kalender komt overeen met CJDN 2452827? Dan is \( J = 2452827 \) en dan
\begin{align*} y_2 & = J − 1721120 = 731707 \\ x_2 & = \floorratio{400×731707 + 799}{146097} = \floorratio{292683599}{146097} = 2003 \\ c_2 & = 365×2003 + \floorratio{100×2003}{400} − \floorratio{4×2003}{400} + \floorratio{2003}{400} \\ & = 731095 + \floorratio{200300}{400} − \floorratio{8012}{400} + 5 = 731095 + 500 − 20 + 5 = 731580 \\ z_2 & = 731707 − 731580 = 127 \\ ζ & = \floorratio{127}{367} = 0 \end{align*}
Omdat \( ζ = 0 \) blijven \( x_2 \), \( c_2 \), \( z_2 \) hetzelfde. Dan
\begin{align*} y_1 & = 127 \\ x_1 & = \floorratio{5×127 + 2}{153} = \floorratio{637}{153} = 4 \\ c_1 & = \floorratio{153×4 + 2}{5} = \floorratio{614}{5} = 122 \\ z_1 & = 127 − 122 = 5 \\ c_0 & = \floorratio{4 + 2}{12} = 0 \\ j & = 2003 + 0 = 2003 \\ m & = 4 − 12×0 + 3 = 7 \\ d & = 5 + 1 = 6 \end{align*}
De datum is 6 juli 2003.
In de berekening van \( x_2 \) kan de teller heel groot worden: In het voorbeeld was dat 292.683.599 voor een datum in het jaar 2003. Als je dit algoritme gebruikt in een computerprogramma dat rekent met waarden van 32 bits groot, dan zal \( x_2 \) te groot worden voor data die meer dan 14.698 jaar liggen vanaf Juliaanse Dag nummer 0, dus vanaf het jaar 9986. Hoofdstuk 12.2 legt uit hoe je hiervoor een oplossing kunt vinden. Zo'n oplossing is om formule
\[ x_2 = \floorratio{400y_2 + 799}{146097} \]
te vervangen door
\begin{align} q & = \floorratio{y_2}{1461} \\ r & = y_2 \bmod 1461 \\ x_2 & = 4q + \floorratio{12q + 400r + 799}{146097} \end{align}
Bijvoorbeeld, als \( y_2 = 9.000.000 \) dan is
\[ x_2 = \floorratio{400×9000000 + 799}{146097} = \floorratio{3600000799}{146097} = 24641 \]
Het grootste tussenresultaat is 3.600.000.799, wat groter is dan de grootste waarde (2.147.483.648) die past in een geheugenlocatie van 32 bits. Met het alternatief vinden we
\begin{align*} q & = \floorratio{9000000}{1461} = 6160 \\ r & = 9000000 \bmod 1461 = 240 \\ x_2 & = 4×6160 + \floorratio{12×6160 + 400×240 + 799}{146097} = 24640 + \floorratio{170719}{146097} = 24640 + 1 = 24641 \end{align*}
Nu is het grootste tussenresultaat 9000000, wat ruim past in een geheugenlocatie van 32 bits.
Net als voor de Juliaanse kalender kunnen we een getrapte combinatie van kalenderniveaus gebruiken. Vergeleken met de Juliaanse kalender moeten we de schrikkelregels voor elke 100 jaar en elke 400 jaar er nog bij stoppen:
\begin{equation} \begin{split} c_2 & = 30x_2 + \floorratio{7x_2 + 5}{12} − 2\floorratio{x_2 + 10}{12} + \floorratio{x_2 + 46}{48} \\ & − \floorratio{x_2 + 1198}{1200} + \floorratio{x_2 + 4798}{4800} \end{split} \end{equation}
Ook hier willen we graag alle noemers gelijk hebben; dan wordt het
\begin{equation} \begin{split} c_2 & = 30x_2 + \floorratio{2800x_2 + 2000}{4800} − 2\floorratio{400x_2 + 4000}{12} \\ & + \floorratio{100x_2 + 4600}{4800} − \floorratio{4x_2 + 4792}{4800} \\ & + \floorratio{x_2 + 4798}{4800} \end{split} \end{equation}
dus kalendertype 4 met \( q = 30 \), \( g = 4800 \), \( \{d_1,h_1,s_1\} = \{1,2800,2000\} \), \( \{d_2,h_2,s_2\} = \{−2,400,4000\} \), \( \{d_3,h_3,s_3\} = \{1,100,4600\} \), \( \{d_4,h_4,s_4\} = \{−1,4,4792\} \), \( \{d_5,h_5,s_5\} = \{1,1,4798\} \).
Het CJDN \( J_0 \) dat overeenkomt met \( \{x_1,z_1,z_2\} = \{0,0,0\} \) ofwel 1 januari van het jaar 0 (in de Gregoriaanse kalender) is 1721060.
Verder is alles hetzelfde als voor de Juliaanse kalender. We vinden dan
\begin{align} x_1 & = j \\ z_1 & = m − 1 \\ z_2 & = d − 1 \\ c_1 & = 12x_1 \\ y_1 & = c_1 + z_1 \\ x_2 & = y_1 \\ & \begin{split} c_2 & = 30x_2 + \floorratio{2800x_2 + 2000}{4800} − 2\floorratio{400x_2 + 4000}{4800} \\ & + \floorratio{100x_2 + 4600}{4800} − \floorratio{4x_2 + 4792}{4800} + \floorratio{x_2 + 4798}{4800} \\ & = 30x_2 + \floorratio{7x_2 + 5}{12} − 2\floorratio{x_2 + 10}{12} + \floorratio{x_2 + 46}{48} \\ & − \floorratio{x_2 + 1198}{1200} + \floorratio{x_2 + 4798}{4800} \end{split} \\ y_2 & = c_2 + z_2 \\ J & = y_2 + J_0 = y_2 + 1721060 \end{align}
Bijvoorbeeld, welk CJDN komt overeen met Gregoriaanse datum 6 juli 2003? Dan is \( j = 2003 \), \( m = 7 \), \( d = 6 \) en daarmee \( x_1 = 2003 \), \( z_1 = 7 − 1 = 6 \), \( z_2 = 6 − 1 = 5 \), en dan
\begin{align*} c_1 & = 12×2003 = 24036 \\ y_1 & = 24036 + 6 = 24042 \\ x_2 & = 24042 \\ c_2 & = 30×24042 + \floorratio{2800×24042 + 2000}{4800} − 2×\floorratio{400×24042 + 4000}{4800} \\ & + \floorratio{100×24042 + 4600}{4800} − \floorratio{4×24042 + 4792}{4800} + \floorratio{24042 + 4798}{4800} \\ & = 721260 + \floorratio{67319600}{4800} − 2×\floorratio{9620800}{4800} + \floorratio{2408800}{4800} − \floorratio{100960}{4800} + \floorratio{28840}{4800} \\ & = 721260 + 14024 − 4008 + 501 − 21 + 6 = 731762 \\ y_2 & = 731762 + 5 = 731767 \\ J & = 731767 + 1721060 = 2452827 \end{align*}
We kunnen bovenstaande formules samenvoegen tot
\begin{align} c & = 12j + m \\ & \begin{split} J & = 30c + \floorratio{7c − 2}{12} − 2\floorratio{c + 9}{12} + \floorratio{c + 45}{48} \\ & − \floorratio{c + 1197}{1200} + \floorratio{c + 4797}{4800} + d + 1721029 \end{split} \end{align}
Hiervoor doorlopen we dezelfde procedure als hierboven, maar in de omgekeerde richting.
Bereken het doorlopende dagnummer \( y_2 \) door het CJDN van lopende dagnummer 0 af te trekken van CJDN \( J \):
\begin{equation} y_2 = J − J_0 = J − 1721060 \end{equation}
Met \( q = 30 \), \( g = 4800 \), \( \{d_1,h_1,s_1\} = \{1,2800,2000\} \), \( \{d_2,h_2,s_2\} = \{−2,400,4000\} \), \( \{d_3,h_3,s_3\} = \{1,100,4600\} \), \( \{d_4,h_4,s_4\} = \{−1,4,4792\} \), \( \{d_5,h_5,s_5\} = \{1,1,4798\} \) is
\[ f = qg + ∑d_{i}h_i = 30×4800 + 1×2800 − 2×400 + 1×100 − 1×4 + 1×1 = 146097 \]
dus de gemiddelde maandlengte is \( f/g = 146097/4800 = 30 \frac{699}{1600} \) dagen. Verder is
\[ ∑d_{i}s_i = 1×2000 − 2×4000 + 1×4600 − 1×4792 + 1×4798 = −1394 \]
Reken om naar rekenjaar \( x_1 \), rekenmaand \( z_1 \) en rekendag \( z_2 \):
\begin{align} x_2 & = c'_2(y_2) = \floorratio{4800y_2 + 15793}{146097} \label{eq:g3} \\ & \begin{split} c_2 & = 30x_2 + \floorratio{2800x_2 + 2000}{4800} − 2\floorratio{400x_2 + 4000}{4800} + \floorratio{100x_2 + 4600}{4800} \\ & − \floorratio{4x_2 + 4792}{4800} + \floorratio{x_2 + 4798}{4800} \\ & = 30x_2 + \floorratio{7x_2 + 5}{12} − 2\floorratio{x_2 + 10}{12} + \floorratio{x_2 + 46}{48} \\ & − \floorratio{x_2 + 1198}{1200} + \floorratio{x_2 + 4798}{4800} \end{split} \\ z_2 & = y_2 − c_2 \\ ζ & = \floorratio{z_2}{33} \\ x_2 & ↤ x_2 + ζ \\ & \begin{split} c_2 & ↤ 30x_2 + \floorratio{2800x_2 + 2000}{4800} − 2\floorratio{400x_2 + 4000}{4800} + \floorratio{100x_2 + 4600}{4800} \\ & − \floorratio{4x_2 + 4792}{4800} + \floorratio{x_2 + 4798}{4800} \\ & = 30x_2 + \floorratio{7x_2 + 5}{12} − 2\floorratio{x_2 + 10}{12} + \floorratio{x_2 + 46}{48} \\ & − \floorratio{x_2 + 1198}{1200} + \floorratio{x_2 + 4798}{4800} \end{split} \\ z_2 & ↤ y_2 − c_2 \\ y_1 & = x_2 \\ x_1 & = c'_1(y_1) = \floorratio{y_1}{12} \\ c_1 & = 12x_1 \\ z_1 & = y_1 − c_1 \end{align}
Reken dan om naar jaar \( j \), maand \( m \), dag \( d \):
\begin{align} j & = x_1 \\ m & = z_1 + 1 \\ d & = z_2 + 1 \end{align}
Bijvoorbeeld, welke datum in de Gregoriaanse kalender komt overeen met CJDN 2452827? Dan is \( J = 2452827 \) en dan
\begin{align*} y_2 & = J − 1721060 = 731767 \\ x_2 & = \floorratio{4800×731767 + 15793}{46097} = \floorratio{3512497393}{146097} = 24042 \\ c_2 & = 30×24042 + \floorratio{2800×24042 + 2000}{4800} − 2×\floorratio{400×24042 + 4000}{4800} \\ & + \floorratio{100×24042 + 4600}{4800} − \floorratio{4×24042 + 4792}{4800} + \floorratio{24042 + 4798}{4800} \\ & = 721260 + \floorratio{67319600}{4800} − 2×\floorratio{9620800}{4800} + \floorratio{2408800}{4800} − \floorratio{100960}{4800} + \floorratio{28840}{4800} \\ & = 721260 + 14024 − 4008 + 501 − 21 + 6 = 731762 \\ z_2 & = 731767 − 731762 = 5 \\ ζ & = \floorratio{5}{33} = 0 \end{align*}
Omdat \( ζ = 0 \) blijven \( x_2 \), \( c_2 \), \( z_2 \) hetzelfde. Dan
\begin{align*} y_1 & = 24042 \\ x_1 & = \floorratio{24042}{12} = 2003 \\ c_1 & = 12×2003 = 24036 \\ z_1 & = 24042 − 24036 = 6 \\ j & = 2003 \\ m & = 6 + 1 = 7 \\ d & = 5 + 1 = 6 \end{align*}
De datum is 6 juli 2003.
Dit kan een beetje ingedikt worden, tot
\begin{align} y_2 & = J − J_0 = J − 1721060 \\ x_2 & = \floorratio{4800y_2 + 15793}{146097} \\ & \begin{split} c_2 & = 30x_2 + \floorratio{7x_2 + 5}{12} − 2\floorratio{x_2 + 10}{12} + \floorratio{x_2 + 46}{48} \\ & − \floorratio{x_2 + 1198}{1200} + \floorratio{x_2 + 4798}{4800} \end{split} \\ z_2 & = y_2 − c_2 \\ ζ & = \floorratio{z_2}{33} \\ u & = x_2 + ζ \\ & \begin{split} d & = y_2 − 30u − \floorratio{7u + 5}{12} + 2\floorratio{u + 10}{12} − \floorratio{u + 46}{48} \\ & + \floorratio{u + 1198}{1200} − \floorratio{u + 4798}{4800} + 1 \end{split} \\ j & = \floorratio{u}{12} \\ m & = u − 12j + 1 \end{align}
In de berekening van \( x_2 \) kan de teller heel groot worden. In een computerprogramma dat rekent met waarden van 32 bits breed zal de berekening van \( x_2 \) fout gaan als \( |y_2| \) groter wordt dan pakweg 447.000 (dagen), wat overeenkomt met slechts 1224 jaar. Hoofdstuk 12.2 legt uit hoe je hiervoor een oplossing kunt vinden. Zo'n oplossing is om de formule voor \( x_2 \) te vervangen door
\begin{align} q & = \floorratio{y_2}{487} \\ r & = y_2 \bmod 487 \\ x_2 & = 16q + \floorratio{48q + 4800r + 15793}{146097} \end{align}
Bijvoorbeeld, als \( y_2 = 730.000 \), dan is \( x_2 = \floorratio{4800×730000 + 15793}{146097} = \floorratio{3504015793}{146097} = 23984 \), en dan is het grootste tussenresultaat gelijk aan 3.504.015.793, wat ruim groter is dan de grootste waarde (2.147.483.648) die past in geheugen van 32 bits breed. Met de omweg vinden we
\begin{align*} q & = \floorratio{730000}{487} = 1498 \\ r & = 730000 \bmod 487 = 474 \\ x_2 & = 1498×16 + \floorratio{1498×48 + 4800×474 + 15793}{146097} = 23968 + \floorratio{2362897}{146097} = 23968 + 16 = 23984 \end{align*}
hetzelfde resultaat als voorheen, maar nu met een grootste tussenresultaat gelijk aan 2.362.897, ruim klein genoeg om in 32 bits te passen.
Voor de Gregoriaanse kalender zijn de formules in de hoofdstukken met "(2)" en "(3)" in de titel niet eenvoudiger dan de formules met "(1)" in de titel van het hoofdstuk, dus raden we de formules van het hoofdstuk "(1)" aan voor algemeen gebruik voor deze kalender. Het is echter niet altijd mogelijk om zulke formules te vinden, dus is het prettig om dan ook lastigere maar ook krachtigere formules achter de hand te hebben.
Sommige Oosters-Orthodoxe Kerken hebben enige tijd (vanaf 1923) een door Milutin Milanković bedachte kalender gebruikt die alleen afwijkt van de Gregoriaanse kalender door de regel welke eeuwjaren schrikkeljaren zijn. In de Gregoriaanse kalender zijn dat alle eeuwjaren die niet deelbaar zijn door 400. In de Milanković-kalender zijn dat alle eeuwjaren die bij deling door 900 een rest van 200 of 600 geven. De volgende tabel toont voor de eeuwjaren van 1500 tot 2900 welke daarvan schrikkeljaren zijn in de Gregoriaanse en Milanković-kalenders.
| Jaar | Gregoriaans | Milanković |
| 1500 | nee | ja |
| 1600 | ja | nee |
| 1700 | nee | nee |
| 1800 | nee | nee |
| 1900 | nee | nee |
| 2000 | ja | ja |
| 2100 | nee | nee |
| 2200 | nee | nee |
| 2300 | nee | nee |
| 2400 | ja | ja |
| 2500 | nee | nee |
| 2600 | nee | nee |
| 2700 | nee | nee |
| 2800 | ja | nee |
| 2900 | nee | ja |
Tussen de jaren 1601 en 2799 lopen de Milanković- en Gregoriaanse kalenders gelijk. De jaren 1600 en 2800 zijn wel schrikkeljaren in de Gregoriaanse kalender maar niet in de Milanković-kalender.
Met deze regels heeft de Milanković-kalender een periode van 365×900 + 900/4 − (900/100)×(7/9) = 328718 dagen. De omrekening van datum naar CJDN is voor de Milanković-kalender bijna hetzelfde als voor de Gregoriaanse kalender (zie hoofdstuk 13.2.1):
\begin{align} c_0 & = \floorratio{m − 3}{12} \\ x_4 & = j + c_0 \\ x_3 & = \floorratio{x_4}{100} \\ x_2 & = x_4 \bmod 100 \\ x_1 & = m − 12c_0 − 3 \\ J & = \floorratio{328718x_3 + 6}{9} + \floorratio{36525x_2}{100} + \floorratio{153x_1 + 2}{5} + d + 1721119 \end{align}
Bijvoorbeeld, welke CJDN komt overeen met Milanković-datum 6 juli 2003? Dan is \( j = 2003 \), \( m = 7 \), \( d = 6 \) en daarmee
\begin{align*} c_0 & = \floorratio{7 − 3}{12} = 0 \\ x_4 & = 2003 + 0 = 2003 \\ x_3 & = \floorratio{2003}{100} = 20 \\ x_2 & = 2003 − 100×20 = 3 \\ x_1 & = 7 − 12×0 − 3 = 4 \\ z_1 & = 6 − 1 = 5 \\ c_1 & = \floorratio{153×4 + 2}{5} = \floorratio{614}{5} = 122 \\ y_1 & = 122 + 5 = 127 \\ z_2 & = 127 \\ c_2 & = \floorratio{36525×3}{100} = \floorratio{109575}{100} = 1095 \\ y_2 & = 1095 + 127 = 1222 \\ z_3 & = 1222 \\ c_3 & = \floorratio{328718×20 + 6}{9} = \floorratio{6574366}{9} = 730485 \\ y_3 & = 730485 + 1222 = 731707 \\ J & = 731707 + 1721120 = 2452827 \end{align*}
Ook in de omgekeerde richting doen we hetzelfde als voor de Gregoriaanse kalender (zie hoofdstuk 13.2.2), behalve dat we andere formules gebruiken om \( x_3 \) en \( k_3 \) uit te rekenen:
\begin{align} \{x_3, r_3\} & = \Div\left( 9×(J − 1721120) + 2, 328718 \right) \\ \{x_2, r_2\} & = \Div(100r_3 + 99, 36525) \\ \{x_1, r_1\} & = \Div(5r_2 + 2, 153) \\ c_0 & = \floorratio{x_1 + 2}{12} \\ j & = 100x_3 + x_2 + c_0 \\ m & = x_1 − 12c_0 + 3 \\ d & = \floorratio{k_1 \bmod 153}{5} + 1 \end{align}
Bijvoorbeeld, welke datum in de Milanković-kalender komt overeen met CJDN 2452827? Dan is \( J = 2452827 \) en dan
\begin{align*} \{x_3, r_3\} & = \Div( 9×(2452827 − 1721120) + 2, 328718 ) \\ & = \Div(6585365, 328718) = \{20, 11005\} \\ \{x_2, r_2\} & = \Div\left( 100\floorratio{11005}{9} + 99, 36525 \right) \\ & = \Div(100×1222 + 99, 36525) \\ & = \Div(122299, 36525) = \{3, 12724\} \\ \{x_1, r_1\} & = \Div\left( 5\floorratio{12724}{100} + 2, 153 \right) \\ & = \Div(5×127 + 2, 153) \\ & = \Div(637, 153) = \{4, 25\} \\ d & = \floorratio{25}{5} + 1 = 6 \\ c_0 & = \floorratio{4 + 2}{12} = 0 \\ j & = 100×20 + 3 + 0 = 2003 \\ m & = 4 − 12×0 + 3 = 7 \end{align*}
De datum is 6 juli 2003.
De oude Egyptenaren hadden een wel heel simpele kalender, zonder schrikkeljaren en met 30 dagen in elke maand behalve dat de laatste maand 5 dagen had. In de kalender volgens de era van Nabonassar was de eerste dag (1 Thoth van jaar 1) gelijk aan 26 februari −746 in de Juliaanse kalender, ofwel aan JD 1448638 (\( = J_0 \)).
Op het bovenste kalenderniveau heeft elk jaar 365 dagen. Op het onderste niveau heeft elke maand 30 dagen. De laatste maand heeft eigenlijk maar 5 dagen, maar dat krijgen we vanzelf door het bovenste kalenderniveau. We combineren de twee niveaus op de vlakke manier, dus \( z_2 = y_1 \).
Voor dag \( d \) van maand \( m \) van jaar \( j \) vinden we dan
\begin{align} x_2 & = j − 1 \\ x_1 & = m − 1 \\ z_1 & = d − 1 \\ c_1 & = 30x_1 \\ y_1 & = c_1 + z_1 \\ z_2 & = y_1 \\ c_2 & = 365x_2 \\ y_2 & = c_2 + z_2 \\ J & = y_2 + J_0 \end{align}
Dit dikt in tot
\begin{equation} J = 365×(j − 1) + 30×(m − 1) + d − 1 + J_0 = 365j + 30m + d + 1448242 \end{equation}
Bijvoorbeeld, welke CJDN komt overeen met dag 7 van maand 5 van jaar 218 in de Egyptische kalender? Dan vinden we
\begin{align*} x_2 & = j − 1 = 218 − 1 = 217 \\ x_1 & = m − 1 = 5 − 1 = 4 \\ z_1 & = d − 1 = 7 − 1 = 6 \\ c_1 & = 30x_1 = 30×4 = 120 \\ z_2 & = y_1 = c_1 + z_1 = 120 + 6 = 126 \\ c_2 & = 365x_2 = 365×217 = 79205 \\ y_2 & = c_2 + z_2 = 79205 + 126 = 79331 \\ J & = y_2 + J_0 = 79331 + 1448638 = 1527969 \end{align*}
dus het antwoord is CJDN 1527969.
Met de ingedikte formule vinden we
\begin{align*} J & = 365j + 30m + d + 1448242 \\ & = 365×218 + 30×5 + 7 + 1448242 \\ & = 79570 + 150 + 7 + 1448242 = 1527969 \end{align*}
dus hetzelfde antwoord als voorheen.
In omgekeerde richting zijn de berekeningen ook eenvoudig.
\begin{align} y_2 & = J − J_0 \\ \{x_2, r_2\} & = \Div(y_2, 365) \\ \{x_1, r_1\} & = \Div(r_2, 30) \\ j & = x_2 + 1 \\ m & = x_1 + 1 \\ d & = r_1 + 1 \end{align}
Welke datum in de Egyptische kalender komt overeen met CJDN 1527969? Dan is
\begin{align*} y_2 & = J − J_0 = 1527969 − 1448638 = 79331 \\ \{x_2, r_2\} & = \Div(79331, 365) = \{217, 126\} \\ \{x_1, r_1\} & = \Div(126, 30) = \{4, 6\} \\ j & = x_2 + 1 = 217 + 1 = 218 \\ m & = x_1 + 1 = 4 + 1 = 5 \\ d & = r_1 + 1 = 6 + 1 = 7 \end{align*}
De cyclus van Meton stelt dat 235 (synodische) maanden gelijk zijn aan 19 (tropische) jaren van elk 12 of 13 maanden, met 125 maanden van 30 dagen en 110 maanden van 29 dagen, dus in totaal 6940 dagen. De lange jaren (met 13 maanden) zijn het 1e, 4e, 7e, 9e, 12e, 15e en 18e jaar van elke cyclus. In het 18e jaar wordt maand 6 verdubbeld, en in de andere lange jaren wordt maand 12 verdubbeld. De eerste dag van de eerste maand (Nisannu) van het eerste jaar van de era van Seleukos komt overeen met 3 april −310 in de Juliaanse kalender, ofwel CJDN 1607558.
De Babyloniërs bepaalden het begin van elke maand aan de hand van waarnemingen. Ze gaven niet de eerste maand van elk jaar hetzelfde aantal dagen (en zo ook voor de andere maanden), maar varieerden wel het aantal maanden per jaar volgens bovenstaand schema. De verdeling van maanden over jaren ging dus onafhankelijk van de verdeling van dagen over maanden.
Als een kalender (deels) gebaseerd is op directe waarnemingen dan is hij een beetje onvoorspelbaar en kun je die niet helemaal vangen in formules. Dan hangt de kalender af van bijvoorbeeld het weer. Als het toevallig een keer flink bewolkt is dan zien de kalenderregelaars de maansikkel die avond niet maar pas de volgende avond en dan begint de nieuwe maand een dag later.
Wij leiden hier een kalender af die lijkt op die van de Babyloniërs maar die volledig voorspelbaar is. De afwijking ten opzichte van de historische kalender van de Babyloniërs zou meestal hooguit 1 dag moeten zijn.
Dat vraagt om een kalender met getrapte combinatie van een kalenderniveau tussen dag en maand en een kalenderniveau tussen maand en jaar. Van jaar \( j \) (het eerste jaar heeft nummer 1), maand \( m \) (de eerste maand heeft nummer 1), en dag \( d \) (de eerste dag heeft nummer 1) naar doorlopend dagnummer \( y_2 \) (de eerste dag heeft dagnummer 0) gaan we als volgt:
\begin{align} x_1 & = j − 1 \\ z_1 & = m − 1 \\ z_2 & = d − 1 \\ c_1 & = \floorratio{235x_1 + 13}{19} \\ y_1 & = c_1 + z_1 \\ x_2 & = y_1 \\ c_2 & = \floorratio{6940x_2}{235} \\ y_2 & = c_2 + z_2 \\ J & = y_2 + 1607558 \end{align}
Dit kan ingedikt worden tot
\begin{align} y_1 & = \floorratio{235j − 241}{19} + m \\ J & = \floorratio{6940y_1}{235} + d + 1607557 \end{align}
Het aantal jaren sinds het begin van de huidige cyclus van Meton is gelijk aan \( y_1 \bmod 19 \).
Bijvoorbeeld, welk CJDN \( J \) komt overeen met jaar 3, maand 9, dag 27 van de era van Seleukos? Dan is \( j = 3 \), \( m = 9 \), \( d = 27 \), dus
\begin{align*} y_1 & = \floorratio{235×3 − 241}{19} + 9 = \floorratio{464}{19} + 9 = 24 + 9 = 33 \\ J & = \floorratio{6940×33}{235} + 27 + 1607557 = \floorratio{229020}{235} + 1607584 = 974 + 1607584 = 1608558 \end{align*}
Nu gaan we de andere kant op, van Juliaanse dagnummer \( J \) naar dag \( d \), maand \( m \), jaar \( j \) in de era van Seleukos.
\begin{align} y_2 & = J − 1607558 \\ \{x_2, r_2\} & = \Div(235y_2 + 234, 6940) \\ z_2 & = \floorratio{r_2}{235} \\ y_1 & = x_2 \\ \{x_1, r_1\} & = \Div(19y_1 + 5, 235) \\ z_1 & = \floorratio{r_1}{19} \\ j & = x_1 + 1 \\ m & = z_1 + 1 \\ d & = z_2 + 1 \end{align}
Bijvoorbeeld, welke datum in de Babylonische kalender komt overeen met CJDN \( 1608558 \)? Dan is \( J = 1608558 \), dus
\begin{align*} y_2 & = 1608558 − 1607558 = 1000 \\ \{x_2, r_2\} & = \Div(235×1000 + 234, 6940) = \Div(235234, 6940) = \{33, 6214\} \\ z_2 & = \floorratio{6214}{235} = 26 \\ \{x_1, r_1\} & = \Div(19×33 + 5, 235) = \Div(632, 235) = \{2, 162\} \\ z_1 & = \floorratio{162}{19} = 8 \\ j & = 2 + 1 = 3 \\ m & = 8 + 1 = 9 \\ d & = 26 + 1 = 27 \end{align*}
Dit kan ingedikt worden tot
\begin{align} \{x_2, r_2\} & = \Div(235×(J − 1607558) + 234, 6940) \\ \{x_1, r_1\} & = \Div(19x_2 + 5, 235) \\ j & = x_1 + 1 \\ m & = \floorratio{r_1}{19} + 1 \\ d & = \floorratio{r_2}{235} + 1 \end{align}
Bijvoorbeeld, welke datum in de Babylonische kalender komt overeen met CJDN \( 1608558 \)? Dan is \( J = 1608558 \), dus
\begin{align*} \{x_2, r_2\} & = \Div(235×(1608558 − 1607558) + 234, 6940) = \Div(235234, 6940) = \{33, 6214\} \\ \{x_1, r_1\} & = \Div(19×33 + 5, 235) = \Div(632, 235) = \{2, 162\} \\ j & = 2 + 1 = 3 \\ m & = \floorratio{162}{19} + 1 = 9 \\ d & = \floorratio{6214}{235} + 1 = 27 \end{align*}
ofwel dag 27 van maand 9 van jaar 3.
De Joodse kalender is een zongebonden maankalender, net als de Babylonische kalender. De Joodse kalender is veel ingewikkelder dan de Babylonische, want
Als het nodig is om aan te geven dat een jaartal uit de Joodse kalender komt dan wordt daarvoor A.M. (Anno Mundi, jaar van de wereld) gebruikt.
Een kalendermaand heeft 29 of 30 dagen, een kalenderjaar heeft 12 of 13 maanden, en een kalenderdag begint om 6 uur 's avonds.
Een kalenderjaar kan 6 verschillende lengtes hebben, namelijk 353, 354, 355, 383, 384 of 385 dagen. De jaren met 354 of 384 dagen heten regelmatig. De jaren met een dag meer dan dat heten volledig, en de jaren met een dag minder heten onvolledig. Jaren met 355 of minder dagen heten gewoon en jaren met meer dagen heten embolistisch.
Nieuwjaar is de dag waarop het jaartal eentje groter wordt. In de Joodse kalender is dat niet de eerste dag van maand nummer 1 maar de eerste dag van maand nummer 7, de maand tisjrie.
Voor de berekeningen is het gunstig als elke kalenderperiode begint te tellen bij 0. Dat het jaarnummer verandert aan het begin van de 7e maand is daarvoor onhandig. We doen berekeningen met een rekenjaar dat begint bij de 1e maand (die overeenkomt met rekenmaandnummer \( x_3 = 0 \)). De maanden \( m \) = 1 t/m 6 van het voorgaande kalenderjaar \( j − 1 \) en de maanden 7 t/m 12 of 13 van het huidige kalenderjaar \( j \) zitten in rekenjaar \( x_1 = j − 1 \) als maanden \( x_3 \) = 0 t/m 11 of 12. De eerste dag van elke maand heeft rekendagnummer \( z_3 = 0 \). Nieuwjaar van kalenderjaar \( j \) komt overeen met \( x_1 = j − 1 \), \( x_3 = 6 \) en \( z_4 = 0 \).
| \({m}\) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| \({x_3}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| \({x_1 − j}\) | 0 | 0 | 0 | 0 | 0 | 0 | −1 | −1 | −1 | −1 | −1 | −1 | −1 |
Voor het omrekenen van jaar \( j \), maand \( m \) en dag \( d \) uit de Joodse kalender naar rekenjaar \( x_1 \), rekenmaand \( x_3 \) en rekendag \( z_4 \) vinden we
\begin{align} c_0 & = \floorratio{13 − m}{7} \\ x_1 & = j − 1 + c_0 \\ x_3 & = m − 1 \\ z_4 & = d − 1 \end{align}
Bijvoorbeeld, op de laatste dag van maand 13 van jaar 4682 in de Joodse kalender volgt de 1e dag van maand 1 van jaar 4682. Een paar maanden later volgt op de laatste dag van maand 6 van jaar 4682 de 1e dag van maand 7 van jaar 4683. Die laatste dag is nieuwjaar. De volgende tabel toont wat overeenkomsten.
| \({j}\) | \({m}\) | \({d}\) | \({c_0}\) | \({x_1}\) | \({x_3}\) | \({z_4}\) |
|---|---|---|---|---|---|---|
| 4682 | 13 | 29 | 0 | 4681 | 12 | 28 |
| 4682 | 1 | 1 | 1 | 4682 | 0 | 0 |
| 4682 | 6 | 29 | 1 | 4682 | 5 | 28 |
| 4683 | 7 | 1 | 0 | 4682 | 6 | 0 |
| 4683 | 12 | 30 | 0 | 4682 | 11 | 29 |
De omrekening van een datum uit de Joodse kalender naar CJDN vergt een combinatie van vier kalenderniveaus:
Op het eerste kalenderniveau is \( y_1 = c_1(x_1) + z_1 \), waarin \( y_1 \) het lopende maandnummer is, \( x_1 \) het rekenjaarnummer is, \( z_1 \) het rekenmaandnummer in het rekenjaar is, en \( c_1 \) het lopende maandnummer van de eerste maand (\( z_1 = 0 \)) van het rekenjaar is.
De embolistische jaren (kalenderjaren met 13 maanden) zijn het 3e, 6e, 8e, 11e, 14e, 17e en 19e jaar in elke cyclus van 19 jaar, die 235 maanden omvat. Het lopende maandnummer \( c_1 \) van de eerste rekenmaand (\( z_1 = 0 \)) van jaar \( x_1 \) is gelijk aan
\begin{equation} c_1 = \floorratio{235x_1 + 1}{19} \end{equation}
Als voorbeeld kijken we naar het begin van het Joodse jaar A.M. 4682. Dan is \( x_1 = 4681 \) en daarmee is
\[ c_1 = \floorratio{235×4681 + 1}{19} = \floorratio{1100036}{19} = 57896 \]
Nieuwjaar van A.M. 4682 is 57896 maanden na nieuwjaar van A.M. 1.
Als je werkt in een rekenomgeving waarin de hele getallen niet groter mogen worden dan een bepaald getal \( w \), dan mag (om geen overloop te krijgen) in voorgaande formule \( |x_1| \) niet groter zijn dan \( w/235 \), in plaats van niet groter dan \( w \). Voor \( w = 2^{31} \) komt \( w/235 \) jaren overeen met 9.138.228 jaren. Als je dat nog te weining vindt, dan kun je op de manier van hoofdstuk 12.2 alternatieven vinden. Eén alternatief, als \( w \gt 133 \), is
\begin{equation} c_1 = 12x_1 + \floorratio{7x_1 + 1}{19} \end{equation}
waarvoor \( |x_1| \) niet groter mag zijn dan \( w/7 \). Een ander alternatief, voor \( w = 2^{31} = 2147483648 \), is
\begin{align} q & = \floorratio{x_1}{3} \\ r & = x_1 \bmod 3 \\ c_1 & = 37q + \floorratio{2q + 235r + 1}{19} \end{align}
waarvoor \( |x_1| \) elke waarde mag hebben tot \( w \).
Op het tweede kalenderniveau is \( y_2 = c_2(x_2) + z_2 \), waarbij \( x_2 = c_1 \) het lopende rekenmaandnummer van de eerste rekenmaand van het jaar is, \( z_2 \) het rekendagnummer-in-de-maand van de eerste dag van die maand is, en \( y_2 \) het lopende dagnummer van de eerste dag van die maand is.
De epoche van de kalender (het begin van 1 tisjrie van het jaar A.M. 1) was om 6 uur 's avonds op zondag 6 oktober −3760 in de Juliaanse proleptische kalender, ofwel op CJD 347997,75. Voor het verbinden van kalenderdagen uit verschillende kalenders houden wij de toestand op het midden van de dag aan (als de Zon het hoogst aan de hemel staat). Dat midden van de eerste dag (nieuwjaar) van de Joodse kalender was op maandag 7 oktober −3760 (CJDN 347998 = \( J_0 \)).
Het begin van het jaar wordt bepaald aan de hand van een middelbare conjunctie tussen de Zon en de Maan, waarbij de lengte van de synodische maand wordt gesteld op 29 en 13753/25920 dagen, ofwel 765433/25920 dagen. De nieuwe maan aan het begin van de maand tisjrie (de nieuwjaarsmaand) van jaar A.M. 1 viel op 5 uur, 11 minuten en 20 seconden (= 5604/25920 dagen) na het begin van de eerste dag van die maand (en die begon om 6 uur 's avonds).
De tijd \( μ \) in dagen die is verstreken tussen het begin van de eerste dag van die kalender en de nieuwe maan aan het begin van de maand met lopende maandnummer \( c_1 \) is dan gelijk aan
\begin{equation} μ = \frac{5604 + 765433c_1}{25920} \label{eq:μ} \end{equation}
Het lopende dagnummer \( υ_0 \) van de kalenderdag waarop die nieuwe maan valt is dan
\begin{equation} υ_0 = ⌊μ⌋ \end{equation}
We kijken weer naar nieuwjaar van het Joodse jaar A.M. 4682. We vonden eerder dat \( c_1 = 57896 \). Daarmee is
\begin{align*} μ & = \frac{5604 + 765433×57896}{25920} = \frac{44315514572}{25920} = 1709703 \frac{12812}{25920} \\ υ_0 & = 1709703 \end{align*}
Als je werkt in een rekenomgeving waarin hele getallen niet groter mogen worden dan een bepaald getal \( w \), dan mag (om geen overloop te krijgen) in formule \eqref{eq:μ} \( |c_1| \) niet groter zijn dan \( w/765433 \), wat veel kleiner is dan \( w \). Voor 32-bitsgetallen komt dit overeen met maar ongeveer 226 jaar − veel te weinig om praktisch te zijn. Met behulp van hoofdstuk 12.2 vinden we betere alternatieven. Eén alternatief, als \( w \gt 356.477.760 \), is
\begin{equation} μ = 29c_1 + \frac{5604 + 13753c_1}{25920} \end{equation}
waarvoor \( |c_1| \) niet groter mag zijn dan \( w/13753 \), wat voor 32-bitsgetallen overeenkomt met ongeveer 156146 maanden, dus 12624 jaar. Een ander alternatief, voor \( w = 2^{31} = 2147483648 \), is
\begin{align} q & = \floorratio{c_1}{1095} \\ r & = c_1 \bmod 1095 \\ μ & = 32336q + \frac{15q + 765433r + 5604}{25920} \end{align}
waarvoor \( |c_1| \) elke waarde mag hebben tot \( w \), wat overeenkomt met ongeveer 173 miljoen jaar.
De volgende tabel toont wat uitkomsten.
| \({x_1}\) | \({c_1}\) | \({q}\) | \({r}\) | \({μ}\) | \({υ_0}\) |
|---|---|---|---|---|---|
| 4681 | 57896 | 52 | 956 | \({1709703 \frac{12812}{25920}}\) | 1709703 |
| 4682 | 57909 | 52 | 969 | \({1710087 \frac{10161}{25920}}\) | 1710087 |
| 4683 | 57921 | 52 | 981 | \({1710441 \frac{19677}{25920}}\) | 1710441 |
| 5516 | 68224 | 62 | 334 | \({2014695 \frac{12196}{25920}}\) | 2014695 |
| 5517 | 68236 | 62 | 346 | \({2015049 \frac{21712}{25920}}\) | 2015049 |
| 5518 | 68249 | 62 | 359 | \({2015433 \frac{19061}{25920}}\) | 2015433 |
Het lopende dagnummer \( υ_0 \) kan worden veranderd door vier vertragingen.
De eerste vertraging treedt op als de middelbare conjunctie valt op of na het middaguur en vóór het einde van de kalenderdag (dus voor 6 uur 's avonds). In dat geval wordt nieuwjaar 1 dag vertraagd, wordt het huidige jaar 1 dag korter en het voorgaande jaar 1 dag langer.
De tijd van de dag volgt uit \( μ \bmod 1 \), die gelijk is aan 0 bij het begin van de kalenderdag (om 6 uur 's avonds), en gelijk is aan 3/4 op het midden van de dag. Dus als \( μ \bmod 1 ≥ 3/4 \), dan valt nieuwjaar één dag later. Als \( μ \bmod 1 ≥ 3/4 \) dan is \( (μ \bmod 1) + 1/4 ≥ 1 \) dus \( \left\lfloor μ + \frac{1}{4} \right\rfloor = ⌊μ⌋ + 1 \), dus het lopende dagnummer \( υ_1 \) van de eerste dag van de maand, inclusief de eerste vertraging, is
\begin{equation} υ_1 = \left\lfloor μ + \frac{1}{4} \right\rfloor = \left\lfloor μ + \frac{6480}{25920} \right\rfloor = 29c_1 + \floorratio{12084 + 13753c_1}{25920} \label{eq:υ_1} \end{equation}
Voor A.M. 4682 vinden we
\[ υ_1 = \left\lfloor 1709703 + \frac{12812 + 6480}{25920} \right\rfloor = 1709703 + \floorratio{19292}{25920} = 1709703 = υ_0 \]
dus voor dat jaar heeft de eerste vertraging geen invloed.
Als je werkt in een rekenomgeving waarin hele getallen niet groter mogen worden dan een bepaald getal \( w \), dan gelden hier dezelfde beperkingen als in het vorige voorbeeld. Je kunt dan ook dezelfde alternatieven gebruiken als in het vorige voorbeeld, als je daarin 5604 vervangt door 12084.
De tweede vertraging treedt op als de middelbare conjunctie (na behandeling van de eerste vertraging) valt op een zondag, woensdag of vrijdag. In dat geval wordt nieuwjaar 1 dag vertraagd, wordt het huidige jaar 1 dag korter en het voorgaande jaar 1 dag langer.
\( υ_0 = υ_1 = 0 \) komt overeen met CJDN 347998 en dat was een maandag, want \( 347998 \bmod 7 = 0 \) en 0 komt overeen met maandag. De tweede vertraging treedt op als
\begin{equation} δ = υ_1 \bmod 7 \end{equation}
gelijk is aan 2, 4 of 6.
We zoeken naar een formule \( v_2(δ) \) die 0 oplevert als \( δ \) gelijk is aan 0, 1, 3 of 5, en die 1 oplevert als \( δ \) gelijk is aan 2, 4 of 6. Omdat we alleen waarden 0 en 1 als uitkomst willen ligt iets \( \bmod 2 \) voor de hand. Dat we alleen hele getallen willen hebben duidt op iets van de vorm \( ⌊...δ...⌋ \bmod 2 \). De simpelste formule die zou kunnen werken is dan \( v_2(δ) = ⌊qδ⌋ \bmod 2 \) voor een geschikte factor \( q \). Enig zoekwerk levert op dat we de gewenste uitkomsten krijgen als \( 5/6 \lt q \lt 1 \). Enkele breuken met kleine noemers die geschikt zijn voor \( q \) zijn 6/7, 7/8, 8/9, 9/10, 10/11, 11/12. De breuk met noemer 7 heeft de kleinste noemer en heeft als voordeel dat die ook de goede waarde oplevert als je \( v_2(υ_1) \) uitrekent in plaats van \( v_2(δ) = v_2(υ_1 \bmod 7) \): dat scheelt weer een modulus-berekening. Daarmee is het lopende dagnummer \( υ_2 \) van de eerste dag van de maand, inclusief de eerste twee vertragingen, gelijk aan
\begin{equation} υ_2 = υ_1 + \left( \floorratio{6υ_1}{7} \bmod 2 \right) \label{eq:υ_2} \end{equation}
Als je werkt in een rekenomgeving waarin hele getallen niet groter mogen worden dan een betaald getal \( w \), dan mag \( υ_1 \) niet groter worden dan \( w/6 \). Voor 32-bitsgetallen komt dat overeen met ongeveer 979914 jaar. Als dat te weinig is, dan kun je alsnog \( v_2(υ_1 \bmod 7) \) gebruiken:
\begin{equation} υ_2 = υ_1 + \left( \floorratio{6×(υ_1 \bmod 7)}{7} \bmod 2 \right) \end{equation}
De derde vertraging is nodig als een jaar (na behandeling van de eerste twee vertragingen) een lengte zou krijgen van 356 dagen, wat onacceptabel lang wordt gevonden. Door een vertraging van 2 dagen toe te passen wordt die lengte dan 354 dagen, wat wel acceptabel is. Het voorgaande jaar (dat 353 of 383 dagen lang is) wordt daarmee 2 dagen langer (dus 355 of 385 dagen).
De lengte \( L_2(x_1) \) van jaar \( x_1 \) (met inachtneming van de eerste twee vertragingen) is gelijk aan
\begin{equation} L_2(x_1) = υ_2(x_1 + 1) − υ_2(x_1) \end{equation}
dus nieuwjaar van jaar \( x_1 \) wordt 2 dagen vertraagd als \( L_2(x_1) = 356 \). Dit krijgen we voor elkaar met formule
\begin{equation} v_3 = 2\left( \floorratio{L_2 + 19}{15} \bmod 2 \right) \end{equation}
| \({L_2}\) | 353 | 354 | 355 | 356 | 382 | 383 | 384 | 385 |
| \({v_3}\) | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 |
De vierde vertraging is nodig als het vorige jaar (na behandeling van de eerste twee vertragingen) een lengte zou krijgen van 382 dagen, wat onacceptabel kort wordt gevonden. Door het begin van het huidige jaar 1 dag uit te stellen wordt het vorige jaar 383 dagen lang, wat wel acceptabel is. Het huidige jaar (dat 355 dagen lang was) wordt daarmee 1 dag korter (dus 354 dagen).
Dus nieuwjaar van jaar \( x_1 \) wordt 1 dag vertraagd als \( L_2(x_1 − 1) = 382 \). Dit krijgen we voor elkaar met formule
\begin{equation} v_4 = \floorratio{L_2(x_1 − 1) + 7}{15} \bmod 2 \end{equation}
| \({L_2}\) | 353 | 354 | 355 | 356 | 382 | 383 | 384 | 385 |
| \({v_4}\) | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
Er zijn geen jaren waarvoor \( L_2(x_1) = 356 \) en tegelijkertijd \( L_2(x_1 − 1) = 382 \), dus de derde en vierde vertraging worden nooit tegelijkertijd toegepast.
Het lopende dagnummer \( c_2 \) van nieuwjaar, met inachtneming van alle vier de vertragingen, is
\begin{equation} c_2 = υ_2 + v_3 + v_4 \end{equation}
Sommige maandlengtes hangen af van de lengte van het jaar. Met alle vertragingen erbij kunnen jaren alleen de volgende lengtes \( L_4 \) hebben: 353, 354, 355, 383, 384 of 385 dagen.
Voor \( x_1 = 4681 \) vonden we eerder dat \( υ_0 = 1709703 \). Uit formule \eqref{eq:υ_1} volgt dat \( υ_1 = 1709703 = υ_0 \), dus de eerste vertraging heeft geen effect op dat jaar. Uit formule \eqref{eq:υ_2} volgt dat
\begin{align*} υ_2 & = υ_1 + \left( \floorratio{6υ_1}{7} \bmod 2 \right) \\ & = 1709703 + \left( \floorratio{6×1709703}{7} \bmod 2 \right) \\ & = 1709703 + \left(\floorratio{10258218}{7} \bmod 2 \right) \\ & = 1709703 + (1465459 \bmod 2) = 1709703 + 1 = 1709704 \end{align*}
dus de tweede vertraging heeft wel effect. De lengte van jaar \( x_1 = 4681 \) na de eerste twee vertragingen is \( L_2(4681) = υ_2(4682) − υ_2(4681) = 1710087 − 1709704 = 383 \) dagen. Het jaar met \( x_1 = 4682 \) heeft een lengte (na de eerste twee vertragingen) van 356 dagen, dus de derde vertraging is van toepassing, en nieuwjaar van dat jaar wordt 2 dagen later. De uitkomsten voor dat en een paar andere jaren staan in de volgende tabel. De kolom met titel "v" noemt de nummers van de vertragingen die actief waren.
| \({x_1}\) | \({υ_0}\) | \({υ_1}\) | \({υ_2}\) | \({L_2}\) | \({c_2}\) | \({L_4}\) | v |
|---|---|---|---|---|---|---|---|
| 4681 | 1709703 | 1709703 | 1709704 | 383 | 1709704 | 385 | 2 |
| 4682 | 1710087 | 1710087 | 1710087 | 356 | 1710089 | 354 | 3 |
| 4683 | 1710441 | 1710442 | 1710443 | 353 | 1710443 | 353 | 1, 2 |
| 5516 | 2014695 | 2014695 | 2014696 | 355 | 2014696 | 355 | 2 |
| 5517 | 2015049 | 2015050 | 2015051 | 382 | 2015051 | 383 | 1, 2 |
| 5518 | 2015433 | 2015433 | 2015433 | 355 | 2015434 | 354 | 4 |
De eerste vertraging hangt af van de tijd op de dag, en de tweede vertraging van de dag in de week, dus die twee vertragingen samen hangen af van de tijd sinds het begin van de week. De embolistische jaren hangen af van het jaar in de huidige cyclus van 19 jaar = 235 maanden. De kalender als geheel herhaalt zich weer als een geheel aantal weken samenvalt met een geheel aantal cycli. De cyclus is 235×765433/25920 = 35975351/5184 dagen lang, dus elke periode van 5184 cycli omvat een geheel aantal dagen, namelijk 35975351. Dit aantal dagen is geen veelvoud van 7, dus de kalender herhaalt zich pas weer na 7×35975351 = 251827457 dagen = 35975351 weken = 689472 jaren = 8527680 maanden.
De verdeling van de lengtes van de kalenderjaren in die periode van 689472 jaar staan in de volgende tabel, met daarbij genoemd hoeveel van die jaren die lengte hebben als je verschillende mogelijke vertragingen meetelt.
| 353 | 354 | 355 | 356 | 382 | 383 | 384 | 385 | |
|---|---|---|---|---|---|---|---|---|
| \({υ_0}\) | 275583 | 159873 | 25984 | 228032 | ||||
| \({υ_1}\) | 275583 | 159873 | 25984 | 228032 | ||||
| \({υ_2}\) | 78738 | 140946 | 192933 | 22839 | 3712 | 116288 | 36288 | 97728 |
| \({υ_4}\) | 69222 | 167497 | 198737 | 106677 | 36288 | 111051 |
De volgende tabel toont van hoeveel jaren uit de grote periode van 689472 het nieuwjaar wordt beïnvloed door de vertragingen genoemd in de kolom met titel "v".
| v | # | % |
|---|---|---|
− | 268937 | 39,0 |
| 1 | 98496 | 14,3 |
| 2 | 221616 | 32,1 |
| 3 | 22839 | 3,3 |
| 4 | 3712 | 0,5 |
| 1 + 2 | 73872 | 10,7 |
| rest | 0 | 0 |
De volgende tabel toont hoe vaak een jaar met een bepaalde lengte volgt op een jaar met dezelfde of een andere bepaalde lengte. Het huidige jaar staat horizontaal en het volgende jaar staat vertikaal. Bijvoorbeeld, dat een jaar van 354 dagen gevolgd wordt door een jaar van 383 dagen komt 40000 keer voor in de grote periode van 689472 jaar.
| 353 | 354 | 355 | 383 | 384 | 385 | |
| 353 | 0 | 16404 | 16404 | 0 | 0 | 36414 |
| 354 | 13776 | 0 | 54468 | 53354 | 0 | 45899 |
| 355 | 9516 | 54491 | 16381 | 53323 | 36288 | 28738 |
| 383 | 0 | 40000 | 66677 | 0 | 0 | 0 |
| 384 | 29965 | 0 | 13323 | 0 | 0 | 0 |
| 385 | 22965 | 56602 | 31484 | 0 | 0 | 0 |
We weten nu het lopende dagnummer \( c_2 \) van nieuwjaar (1 tisjrie) van het rekenjaar \( x_1 \).
De lengte \( L \) van kalenderjaar \( x_1 \) is dan
\begin{equation} L = c_2(x_1 + 1) − c_2(x_1) \end{equation}
De maandlengtes zijn als volgt, in jaren met verschillende lengtes:
| \({m}\) | 353 | 354 | 355 | 383 | 384 | 385 | |
|---|---|---|---|---|---|---|---|
| 1 | niesan | 30 | 30 | 30 | 30 | 30 | 30 |
| 2 | ijar | 29 | 29 | 29 | 29 | 29 | 29 |
| 3 | siewan | 30 | 30 | 30 | 30 | 30 | 30 |
| 4 | tammoez | 29 | 29 | 29 | 29 | 29 | 29 |
| 5 | aaw | 30 | 30 | 30 | 30 | 30 | 30 |
| 6 | elloel | 29 | 29 | 29 | 29 | 29 | 29 |
| 7 | tisjrie | 30 | 30 | 30 | 30 | 30 | 30 |
| 8 | chesjwan | 29 | 29 | 30 | 29 | 29 | 30 |
| 9 | kisleew | 29 | 30 | 30 | 29 | 30 | 30 |
| 10 | teweet | 29 | 29 | 29 | 29 | 29 | 29 |
| 11 | sjewat | 30 | 30 | 30 | 30 | 30 | 30 |
| 12 | adar Ⅰ | 0 | 0 | 0 | 30 | 30 | 30 |
| 13 | adar Ⅱ | 29 | 29 | 29 | 29 | 29 | 29 |
In een jaar met 13 maanden wordt de embolistische (extra) maand adar Ⅰ ingevoegd tussen sjewat en de originele adar, die dan tijdelijk adar Ⅱ heet.
De lengtes van de maanden passen niet in een simpele kalender (van type 1 of 2 uit hoofdstuk 12.11), want het aantal opeenvolgende maanden met dezelfde lengte verschilt meer dan één. In de eerste zeven maanden is het aantal opeenvolgende maanden met dezelfde lengte steeds gelijk aan 1, maar daarna is dat aantal soms gelijk aan 3. Bijvoorbeeld, maanden 8 t/m 10 in een jaar van 353 of 383 dagen zijn allemaal 29 dagen lang, en maanden 7 t/m 9 in een jaar van 355 of 385 dagen zijn allemaal 30 dagen lang.
De lengtes die de maanden in een jaar van 384 dagen hebben passen bij de formule
\begin{equation} y_3 = \floorratio{384x_3 + 7}{13} + z_3 \end{equation}
waarbij \( x_3 \) het rekenmaandnummer in het jaar is, \( y_3 \) het lopende dagnummer in het jaar is, en \( z_3 \) het lopende dagnummer in de maand is, en ze allen bij 0 beginnen voor de eerste maand en dag.
Deze formule kan ook gebruikt worden voor de maandlengtes in een jaar van 354 dagen, als de lengte van het jaar de 12e maand verkort tot 29 dagen.
Een correctie op deze formule is nodig voor jaren die een lengte \( L \) ongelijk aan 354 of 384 dagen hebben. In een jaar met 353 of 383 dagen moet maand 9 een dag korter worden. In een jaar met 355 of 385 dagen moet maand 8 een dag langer worden. De correcties \( c_8 \) voor maand 8 en \( c_9 \) voor maand 9 als functie van de jaarlengte \( L \) zijn
| \({L}\) | 353 | 354 | 355 | 383 | 384 | 385 |
| \({c_8}\) | 0 | 0 | 1 | 0 | 0 | 1 |
| \({c_9}\) | −1 | 0 | 0 | −1 | 0 | 0 |
We vinden voor de maand−8-correctie de formule
\begin{equation} c_8 = \floorratio{L + 353}{2} \bmod 15 = \floorratio{L + 7}{2} \bmod 15 \end{equation}
en voor de maand−9-correctie
\begin{equation} c_9 = −\left( \floorratio{385 − L}{2} \bmod 15 \right) \end{equation}
We berekenen het lopende dagnummer van een datum in maanden 1 t/m 6 (\( x_3 \) = 0 t/m 5) vanaf het daaropvolgende nieuwjaar (de eerste dag van maand 7), en de lengte van die maanden is in elk jaar constant, dus op zulke data zijn de maand-8-correctie en maand-9-correctie niet van toepassing. We berekenen het lopende dagnummer van een datum in maanden 7 t/m 13 (\( x_3 \) = 6 t/m 12) vanaf het voorafgaande nieuwjaar. De maand-8-correctie is van toepassing op data in maanden 9 t/m 13, en de maand-9-correctie op data in maanden 10 t/m 13. In de volgende tabel geeft \( f_8 \) aan (met waarde 1) op welke maanden de maand-8-correctie van toepassing is, en \( f_9 \) voor de maand-9-correctie.
| \({x_3}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| \({f_8}\) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
| \({f_9}\) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
Dat krijgen we met formules
\begin{align} f_8 & = \floorratio{x_3 + 4}{12} \\ f_9 & = \floorratio{x_3 + 3}{12} \end{align}
Daarmee wordt de formule om van maandnummer-in-het-rekenjaar \( x_3 \) te gaan naar dagnummer-in-het-rekenjaar \( c_3 \) van de eerste dag van die maand
\begin{equation} c_3 = \floorratio{384x_3 + 7}{13} + c_8\floorratio{x_3 + 4}{12} + c_9\floorratio{x_3 + 3}{12} \end{equation}
en daar tellen we het dagnummer-in-de-maand \( z_3 \) bij op om het dagnummer-in-het-rekenjaar \( y_3 \) van die dag te vinden
\begin{equation} y_3 = c_3 + z_3 \end{equation}
Het lopende dagnummer \( c_4 \) (sinds 1 tisjrie van A.M. 1) van de eerste dag van de gewenste maand is
\begin{equation} c_4 = c_2 + c_3 \label{eq:c_4} \end{equation}
De eerste zes maanden (van niesan tot en met elloel) hebben samen altijd 177 dagen, ongeacht de lengte van het kalenderjaar, dus het lopende dagnummer \( c_2 \) van 1 tisjrie van het rekenjaar is 177 groter dan het lopende dagnummer van 1 niesan van datzelfde rekenjaar. Daarmee wordt het lopende dagnummer \( y_4 \) van gewenste datum (sinds 1 niesan van A.M. 1)
\begin{equation} y_4 = c_4 + z_3 − 177 \end{equation}
De epoche van de kalender is 1 tisjrie van het jaar A.M. 1 en komt overeen met CJDN 347998 = \( J_0 \). Daarmee wordt het CJDN \( J \) van de gewenste datum
\begin{equation} J = J_0 + y_4 = J_0 + c_2 + c_3 + z_3 − 177 = 347821 + c_2 + c_3 + z_3 \end{equation}
Nu gaan we de andere kant op.
\begin{equation} y_4 = J − J_0 + 177 = J − 347821 \end{equation}
Als voorbeeld rekenen we de volgende CJDN om naar kalenderdatum in de Joodse kalender: 2000087, 2001327, 2057986, 119311997. Voor \( J = 2057986 \) vinden we \( y_4 = 2057986 − 347821 = 1710165 \). Al met al vinden we
| \({J}\) | \({y_4}\) |
|---|---|
| 2000087 | 1652266 |
| 2001327 | 1653506 |
| 2057986 | 1710165 |
| 119311997 | 118964176 |
Met behulp van de inverse van formule \eqref{eq:υ_1} kunnen we het (voorlopige) lopende rekenmaandnummer \( y_1' \) voor lopende dagnummer \( y_4 \) uitrekenen alsof de tweede, derde en vierde vertragingen niet bestaan:
\begin{equation} y_1' = \floorratio{25920y_4 + 25920 − 12084 − 1}{765433} = \floorratio{25920y_4 + 13835}{765433} \label{eq:y_1p} \end{equation}
Voor \( y_4 = 1710165 \) vinden we \( y_1' = \floorratio{25920×1710165 + 13835}{765433} = \floorratio{44327490635}{765433} = 57911 \).
Als je werkt in een rekenomgeving waarin hele getallen niet groter mogen worden dan een bepaald getal \( w \), dan mag (om geen overloop te krijgen) in formule \eqref{eq:y_1p} \( |y_4| \) niet groter zijn dan \( w/25920 \), wat veel kleiner is dan \( w \). Voor 32-bitsgetallen komt dit overeen met maar ongeveer 226 jaar − veel te weinig om praktisch te zijn. Met behulp van hoofdstuk 12.2 vinden we betere alternatieven. Een alternatief, als \( w = 2^{31} = 2147483648 \), is
\begin{align} q & = \floorratio{y_4}{1447} \\ r & = y_4 \bmod 1447 \\ y_1' & = 49q + \floorratio{23q + 25920r + 13835}{765433} \end{align}
waarvoor \( |y_4| \) elke waarde mag hebben tot \( w \), wat overeenkomt met ongeveer 5,9 miljoen jaar.
Voor \( y_4 = 1710165 \) vinden we
\begin{align*} q & = \floorratio{1710165}{1447} = 1181 \\ r & = 1710165 \bmod 1447 = 1258 \\ y_1' & = 49×1181 + \floorratio{23×1181 + 25920×1258 + 13835}{765433} \\ & = 57869 + \floorratio{32648358}{765433} = 57869 + 42 = 57911 \end{align*}
net als hierboven.
Voor alle voorbeeld-CJDN vinden we
| \({J}\) | \({q}\) | \({r}\) | \({y_1'}\) |
|---|---|---|---|
| 2000087 | 1141 | 1239 | 55951 |
| 2001327 | 1142 | 1032 | 55992 |
| 2057986 | 1181 | 1258 | 57911 |
| 119311997 | 82214 | 518 | 4028506 |
Als we het lopende dagnummer \( c_4(y_1') \) van de eerste dag van die lopende rekenmaand uitrekenen met alle toepasselijke vertragingen erbij, en dan het voorlopige dagnummer-in-de-maand \( y_4 − c_4(y_1') \) uitrekenen, dan vinden we antwoorden die variëren tussen −2 en 29. De dagen waarvoor dit dagnummer negatief is horen in de voorgaande maand thuis (dus \( y_1 = y_1' − 1 \)). Er zijn 5963491 zulke dagen in elke grote kalendercyclus van 251827457 dagen, dus voor ongeveer een op de 42 dagen is \( y_1' \) eentje te groot.
De dagen waarvoor dit dagnummer niet kleiner is dan 0 en niet groter dan 28 horen zeker in de huidige maand (dus \( y_1 = y_1' \)), want alle maanden hebben tenminste 29 dagen. De dagen waarvoor dit dagnummer gelijk is aan 29 (dus de 30e dag van de maand, want de eerste dag heeft rekendagnummer 0) kunnen in de huidige maand horen, maar zouden ook nog in de eerstvolgende maand kunnen horen, omdat sommige maanden maar 29 dagen hebben.
Als we het dagnummer-in-de-maand uitrekenen ten opzichte van de eerstvolgende maand (dus \( y_4 − c_4(y_1' + 1) \)) dan vinden we antwoorden die variëren tussen −32 en 0. De dagen waarvoor dit dagnummer gelijk is aan 0 horen in deze eerstvolgende maand thuis (dus \( y_1 = y_1' + 1 \)); Er zijn dus inderdaad dagen waarvoor het voorlopige rekenmaandnummer te klein is. Er zijn 163258 zulke dagen in elke grote kalendercyclus van 251827457 dagen, dus voor ongeveer een op de 1543 dagen (ongeveer een dag per 52 maanden) is \( y_1' \) eentje te klein. Voor 97,6% van de dagen is \( y_1' \) al de juiste maand.
Helaas is er geen eenduidig verband tussen het dagnummer ten opzichte van maand \( y_1' \) en het dagnummer ten opzichte van maand \( y_1' + 1 \), dus moeten we beide dagnummers uitrekenen om te bepalen in welke maand de gewenste dag valt.
De minimale berekening is als volgt: Bereken \( y_4 − c_4(y_1') \). Als die waarde negatief is, dan is \( y_1 = y_1' − 1 \). Als die waarde niet negatief en ook niet groter dan 28 is, dan is \( y_1 = y_1' \). Als die waarde meer dan 28 is, bereken dan ook \( y_4 − c_4(y_1' + 1) \). Als die tweede waarde negatief is, dan is \( y_1 = y_1' \). Als die tweede waarde niet negatief is, dan is \( y_1 = y_1' + 1 \).
Het aantal berekeningen dat je doet is dan niet voor alle datums hetzelfde. Als het voordeliger is als wel voor alle datums hetzelfde aantal berekeningen gedaan worden, bereken dan zoals hieronder staat.
\begin{align} γ_1 & = y_1' + 1 \\ κ_1 & = 19γ_1 + 17 \\ ξ_1 & = \floorratio{κ_1}{235} \\ μ_1 & = \floorratio{κ_1 \bmod 235}{19} \end{align}
Voor ons eerste voorbeeld-CJDN was \( y_1' = 57911 \). Dan is
\begin{align*} γ_1 & = y_1' + 1 = 57912 \\ κ_1 & = 19×57912 + 17 = 1100345 \\ ξ_1 & = \floorratio{1100345}{235} = 4682 \\ μ_1 & = \floorratio{1100345 \bmod 235}{19} = \floorratio{75}{19} = 3 \end{align*}
Voor alle voorbeeld-CJDNs vinden we
| \({J}\) | \({y_1'}\) | \({γ_1}\) | \({κ_1}\) | \({ξ_1}\) | \({μ_1}\) |
|---|---|---|---|---|---|
| 2000087 | 55951 | 55952 | 1063105 | 4523 | 10 |
| 2001327 | 55992 | 55993 | 1063884 | 4527 | 2 |
| 2057986 | 57911 | 57912 | 1100345 | 4682 | 3 |
| 119311997 | 4028506 | 4028507 | 76541650 | 325709 | 1 |
\begin{equation} ζ_1 = y_4 − c_4'(ξ_1,μ_1) \end{equation}
Corrigeer dan voor het geval \( ζ_1 \) negatief blijkt te zijn:
\begin{equation} γ_2 = γ_1 + \floorratio{ζ_1}{33} \end{equation}
Als \( ζ_1 \) niet negatief is dan is de correctie gelijk aan 0.
Voor rekenjaar 4682 vonden we eerder dat die een lengte heeft van \( L = 354 \) dagen, en dat zijn nieuwjaar als lopende dagnummer heeft \( c_2' = 1710089 \). Voor rekenmaand \( μ_1 = 3 \) zijn de maand−8- en maand-9-correcties \( c_8 \), \( c_9 \) gelijk aan 0 en vinden we
\begin{align*} c_3' & = \floorratio{384μ_1 + 7}{13} + c_8×\floorratio{μ_1 + 4}{12} + c_9×\floorratio{μ_1 + 3}{12} \\ & = \floorratio{384×3 + 7}{13} = \floorratio{1159}{13} = 89 \\ c_4' & = c_2' + c_3' = 1710089 + 89 = 1710178 \\ ζ_1 & = y_4 − c_4' = 1710165 − 1710178 = −13 \end{align*}
dus de dag valt niet in rekenmaand 3 van rekenjaar 4682. Dan
\[ γ_2 = γ_1 + \floorratio{ζ_1}{33} = 57912 + \floorratio{−13}{33} = 57912 + (−1) = 57911 \]
Voor alle voorbeeld-CJDNs vinden we
| \({J}\) | \({y_4}\) | \({γ_1}\) | \({ξ_1}\) | \({μ_1}\) | \({c_4'}\) | \({ζ_1}\) | \({⌊ζ_1/33⌋}\) | \({γ_2}\) |
|---|---|---|---|---|---|---|---|---|
| 2000087 | 1652266 | 55952 | 4523 | 10 | 1652296 | −30 | −1 | 55951 |
| 2001327 | 1653506 | 55993 | 4527 | 2 | 1653506 | 0 | 0 | 55993 |
| 2057986 | 1710165 | 57912 | 4682 | 3 | 1710178 | −13 | −1 | 57911 |
| 119311997 | 118964176 | 4028507 | 325709 | 1 | 118964207 | −31 | −1 | 4028506 |
dus voor \( J = 2001327 \) was \( y_1' \) eentje te klein.
\begin{equation} x_1 = ξ_3 \end{equation}
en het uiteindelijke rekenmaandnummer is
\begin{equation} x_3 = μ_3 \end{equation}
en het uiteindelijke rekendagnummer is
\begin{equation} z_4 = ζ_3 \end{equation}
Lopende maandnummer \( γ_2 = 57911 \) komt overeen met
\begin{align*} ξ_2 & = \floorratio{19×57911 + 17}{235} = \floorratio{1100326}{235} = 4682 \\ μ_2 & = γ_2 − \floorratio{235ξ_2 + 1}{19} \\ & = 57911 − \floorratio{235×4682 + 1}{19} \\ & = 57911 − \floorratio{1100271}{19} = 57911 − 57909 = 2 \end{align*}
Voor rekenjaar 4682 vonden we eerder dat die een lengte heeft van \( L = 354 \) dagen, en dat zijn nieuwjaar als lopende dagnummer heeft \( c_2' = 1710089 \). Voor rekenmaand \( μ_2 = 2 \) zijn de maand-8- en maand-9-correcties \( c_8 \), \( c_9 \) gelijk aan 0 en vinden we
\begin{align*} c_3' & = \floorratio{384μ_2 + 7}{13} + c_8\floorratio{μ_2 + 4}{12} + c_9\floorratio{μ_2 + 3}{12} \\ & = \floorratio{384×2 + 7}{13} \\ & = \floorratio{775}{13} = 59 \\ c_4' & = c_2' + c_3' = 1710089 + 59 = 1710148 \\ ζ_2 & = y_4 − c_4' = 1710165 − 1710148 = 17 \end{align*}
Dit is niet negatief en niet groter dan 28, dus hebben we nu de goede maand gevonden.
Voor alle voorbeeld-CJDNs vinden we
| \({J}\) | \({y_4}\) | \({γ_1}\) | \({γ_2}\) | \({ξ_2}\) | \({μ_2}\) | \({c_4'}\) | \({ζ_2}\) | \({γ_3}\) | \({x_1=ξ_3}\) | \({x_3=μ_3}\) | \({c_4'}\) | \({z_4=ζ_3}\) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2000087 | 1652266 | 55952 | 55951 | 4523 | 9 | 1652267 | −1 | 55950 | 4523 | 8 | 1652237 | 29 |
| 2001327 | 1653506 | 55993 | 55993 | 4527 | 2 | 1653506 | 0 | 55993 | 4527 | 2 | 1653506 | 0 |
| 2057986 | 1710165 | 57912 | 57911 | 4682 | 2 | 1710148 | 17 | 57911 | 4682 | 2 | 1710148 | 17 |
| 119311997 | 118964176 | 4028507 | 4028506 | 325709 | 0 | 118964177 | −1 | 4028505 | 325708 | 12 | 118964148 | 28 |
dus voor \( J = 2057986 \) was \( y_1' \) al goed, en voor \( J = 2000087 \) was \( y_1' \) eentje te groot.
\begin{align} c & = \floorratio{12 − x_3}{7} \\ j & = x_1 + 1 − c \\ m & = x_3 + 1 \\ d & = z_4 + 1 \end{align}
Voor rekenjaar 4682, rekenmaand 2, rekendag 17 vinden we
\begin{align*} c & = \floorratio{12 − 2}{7} = \floorratio{10}{7} = 1 \\ j & = x_1 + 1 − c = 4682 + 1 − 1 = 4682 \\ m & = 2 + 1 = 3 \\ d & = 17 + 1 = 18 \end{align*}
dus de datum is dag 18 van kalendermaand 3 (Sivan) van jaar A.M. 4682.
Voor alle voorbeeld-CJDNs vinden we
| \({J}\) | \({x_1}\) | \({x_3}\) | \({z_4}\) | \({c}\) | \({j}\) | \({m}\) | \({d}\) |
|---|---|---|---|---|---|---|---|
| 2000087 | 4523 | 8 | 29 | 0 | 4524 | 9 | 30 |
| 2001327 | 4527 | 2 | 0 | 1 | 4527 | 3 | 1 |
| 2057986 | 4682 | 2 | 17 | 1 | 4682 | 3 | 18 |
| 119311997 | 325708 | 12 | 28 | 0 | 325709 | 13 | 29 |
Als de verdeling van dagen over maanden onafhankelijk is van de verdeling van maanden over jaren, dan zal een bepaalde maand van het jaar niet in elk jaar dezelfde lengte hebben. Bijvoorbeeld, de eerste maand van jaar 1 van de Babylonische kalender heeft 29 dagen, maar de eerste maand van jaar 2 heeft 30 dagen. Het zou voor het hoofdrekenen met de kalender wel handig zijn als de meeste maanden elk jaar dezelfde lengte hadden. Kunnen we een zongebonden maankalender maken die dat heeft?
Het is met de gegevens van de cyclus van Meton niet mogelijk om een gegeven maand even lang te laten zijn in elk jaar waarin hij zit. Als we een vast aantal van de eerste 12 kalendermaanden in elk jaar lang maken (met 30 dagen), dan is het aantal daarmee overeenkomende lange maanden in de cyclus van 19 jaar gelijk aan een veelvoud van 19. Als de 13e maand kort is dan zou het totale aantal lange maanden gelijk zijn aan een veelvoud van 19, en als de 13e maand lang is dan zou het totale aantal lange maanden gelijk zijn aan 7 (het aantal jaren met 13 maanden in de cyclus van 19 jaar) plus een veelvoud van 19, maar de cyclus van Meton vereist 125 = 6×19 + 11 lange maanden en dat past bij geen van de twee mogelijkheden. We zullen dus ook de lengte van sommige van de eerste 12 maanden van elk jaar moeten laten variëren als we de meeste kalendermaanden in elk jaar dezelfde lengte willen laten hebben. We willen alleen maanden van 29 of 30 dagen gebruiken.
Als we de voorgaande kalenderrekentechnieken willen gebruiken dan is het het handigste als we voor het rekenen tussen maanden en dagen maar één rechte lijn nodig hebben, maar dan is het nodig dat zowel lange jaren als korte jaren dezelfde rechte lijn gebruiken en dus dezelfde maandlengtes hebben, afgezien van verkorting helemaal aan het eind door de jaarlengte.
We zagen hierboven dat 6 lange maanden in de eerste 12 maanden van het jaar niet genoeg is, dus moeten er 7 lange maanden in de eerste 12 maanden van de gebruikte rechte lijn stoppen. Met 7 lange maanden in de eerste 12 maanden van elk jaar hebben we 7×12 = 133 lange maanden in 19 jaar, en dat is teveel want de cyclus van Meton heeft maar 125 lange maanden in 19 jaar. De 13e maand moet dus een korte maand zijn, en bovendien moeten we van de korte jaren (met 12 maanden) in de cyclus nog 8 lange maanden (van 30 dagen) veranderen in korte maanden (van 29 dagen). Dat kunnen we doen door korte jaren één dag korter te maken, maar dan moet maand 12 een lange maand zijn (anders zou maand 12 na verkorting maar 28 dagen hebben).
We krijgen dat voor elkaar met de volgende drie jaartypen in de cyclus van 19 jaar:
7 jaren van 13 maanden met 384 dagen (7 lange maanden, 6 korte maanden).
4 jaren van 12 maanden met 355 dagen (7 lange maanden, 5 korte maanden).
8 jaren van 12 maanden met 354 dagen (6 lange maanden, 6 korte maanden).
Dan zijn er in totaal 7×13 + 4×12 + 8×12 = 235 maanden, wat klopt. Er zijn dan 7×7 + 4×7 + 8×6 = 125 lange maanden, wat klopt.
De rechte lijn moet opleveren dat maand 12 lang is (met 30 dagen) en maand 13 kort (met 29 dagen) en dat 7 van de eerste 12 maanden lange maanden zijn.
De volgende formule past daarbij (met \( x_1 \) het aantal maanden sinds de eerste maand, en \( c_1 \) het aantal dagen van de eerste dag van het jaar naar de eerste dag van maand \( x_1 \)):
\begin{equation} c_1 = 29x_1 + \floorratio{7x_1 + 7}{13} = \floorratio{384x_1 + 7}{13} \label{eq:metonmaand} \end{equation}
Bijvoorbeeld, als \( x_1 = 4 \), dan geeft formule \eqref{eq:metonmaand}
\[ c_1 = \floorratio{384×4 + 7}{13} = \floorratio{1543}{13} = 118 \]
dus de eerste dag van de vijfde maand (\( x_1 = 4 \)) is de 118e dag sinds de eerste dag van het jaar.
Voor de eerste dag van de eerste 14 maanden geeft formule \eqref{eq:metonmaand} de volgende resultaten (met \( L \) de lengte van de maand):
| \({m}\) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| \({x_1}\) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| \({c_1}\) | 0 | 30 | 59 | 89 | 118 | 148 | 177 | 207 | 236 | 266 | 295 | 325 | 355 | 384 |
| \({L}\) | 30 | 29 | 30 | 29 | 30 | 29 | 30 | 29 | 30 | 29 | 30 | 30 | 29 |
Nu hebben we nog een tweede kalenderniveau nodig dat het juiste aantal dagen in elk jaar stopt. Daarvoor kunnen we de volgende formule gebruiken, waarin \( x_2 \) het aantal jaren sinds het eerste jaar is en \( c_2 \) het doorlopende dagnummer van de eerste dag van het jaar is:
\begin{equation} c_2 = 354x_2 + 30\floorratio{7x_2 + 1}{19} + \floorratio{4x_2 + 12}{19} \label{eq:metonjaar} \end{equation}
Bijvoorbeeld, als \( x_2 = 8 \), dan komt uit formule \eqref{eq:metonjaar} dat
\[ c_2 = 354×8 + 30\floorratio{7×8 + 1}{19} + \floorratio{4×8 + 12}{19} = 2832 + 30×3 + 2 = 2837 \]
dus de eerste dag van jaar \( x_2 = 9 \) heeft doorlopend dagnummer 2837.
Dit is kalendertype 4, met \( q = 354 \), \( g = 19 \), \( \{d_1,h_1,s_1\} = \{30,7,1\} \), \( \{d_2,h_2,s_2\} = \{1,4,12\} \).
Het complete algoritme is, van jaar \( j \), maand \( m \), dag \( d \) naar lopende dagnummer \( y_2 \):
\begin{align} x_2 & = j − 1 \\ x_1 & = m − 1 \\ z_1 & = d − 1 \\ c_1 & = \floorratio{384x_1 + 7}{13} \\ y_1 & = c_1 + z_1 \\ z_2 & = y_1 \\ c_2 & = 354x_2 + 30\floorratio{7x_2 + 1}{19} + \floorratio{4x_2 + 12}{19} \\ y_2 & = c_2 + z_2 \end{align}
Bijvoorbeeld, welk lopende dagnummer hoort bij dag 27 van maand 9 van jaar 3 in deze kalender? Dan is
\begin{align*} j & = 3 \\ m & = 9 \\ d & = 27 \\ x_2 & = 3 − 1 = 2 \\ x_1 & = 9 − 1 = 8 \\ z_1 & = 27 − 1 = 26 \\ c_1 & = \floorratio{384×8 + 7}{13} = \floorratio{3079}{13} = 236 \\ y_1 & = 236 + 26 = 262 \\ z_2 & = 262 \\ c_2 & = 354×2 + 30×\floorratio{7×2 + 1}{19} + \floorratio{4×2 + 12}{19} \\ & = 708 + 30×\floorratio{15}{19} + \floorratio{20}{19} = 708 + 0 + 1 = 709 \\ y_2 & = 709 + 262 = 971 \end{align*}
Dit kan worden ingedikt tot
\begin{equation} y_2 = 354j + 29m + 30\floorratio{7j − 6}{19} + \floorratio{4j + 8}{19} + \floorratio{7m}{13} + d − 384 \end{equation}
Voor dezelfde datum als daarnet:
\begin{align*} y_2 & = 354×3 + 29×9 + 30\floorratio{7×3 − 6}{19} + \floorratio{4×3 + 8}{19} + \floorratio{7×9}{13} + 27 − 384 \\ & = 1323 + 30\floorratio{15}{19} + \floorratio{20}{19} + \floorratio{63}{13} − 357 \\ & = 1323 + 0 + 1 + 4 − 357 = 971 \end{align*}
In omgekeerde richting zijn de formules
\begin{align} x_2 & = \floorratio{19y_2 + 546}{6940} \\ c_2 & = 354x_2 + 30\floorratio{7x_2 + 1}{19} + \floorratio{4x_2 + 12}{19} \\ z_2 & = y_2 − c_2 \\ ζ & = \floorratio{z_2}{385} \\ x_2 & ↤ x_2 + ζ \\ c_2 & ↤ 354x_2 + 30\floorratio{7x_2 + 1}{19} + \floorratio{4x_2 + 12}{19} \\ z_2 & ↤ y_2 − c_2 \\ y_1 & = z_2 \\ k_1 & = 13y_1 + 5 \\ x_1 & = \floorratio{k_1}{384} \\ z_1 & = \floorratio{k_1 \bmod 384}{13} \\ j & = x_2 + 1 \\ m & = x_1 + 1 \\ d & = z_1 + 1 \end{align}
Bijvoorbeeld, welke dag in deze kalender komt overeen met lopende dagnummer 971? Dan is \( y_2 = 971 \) en dan
\begin{align*} x_2 & = \floorratio{19×971 + 546}{6940} = \floorratio{18995}{6940} = 2 \\ c_2 & = 354×2 + 30×\floorratio{7×2 + 1}{19} + \floorratio{4×2 + 12}{19} \\ & = 708 + 30×\floorratio{15}{19} + \floorratio{20}{19} = 708 + 0 + 1 = 709 \\ z_2 & = 971 − 709 = 262 \\ ζ & = \floorratio{262}{385} = 0 \end{align*}
\( ζ = 0 \) dus blijven \( x_2 \), \( c_2 \), \( z_2 \) hetzelfde. Dan
\begin{align*} y_1 & = 262 \\ k_1 & = 13×262 + 5 = 3411 \\ x_1 & = \floorratio{3411}{384} = 8 \\ z_1 & = \floorratio{3411 \bmod 384}{13} = \floorratio{339}{13} = 26 \\ j & = 2 + 1 = 3 \\ m & = 8 + 1 = 9 \\ d & = 26 + 1 = 27 \end{align*}
dus de datum is dag 27 van maand 9 van jaar 3.
Dit kan een beetje worden ingedikt tot
\begin{align} x' & = \floorratio{19y_2 + 546}{6940} \\ x_2 & = x' + \floorratio{y_2 − 354x' − 30\floorratio{7x' + 1}{19} − \floorratio{4x' + 12}{19}}{385} \\ k_1 & = 13×\left( y_2 − 354x_2 − 30\floorratio{7x_2 + 1}{19} − \floorratio{4x_2 + 12}{19} \right) + 5 \\ j & = x_2 + 1 \\ m & = \floorratio{k_1}{384} + 1 \\ d & = \floorratio{k_1 \bmod 384}{13} + 1 \end{align}
Bijvoorbeeld, welke dag in deze kalender komt overeen met lopende dagnummer 971? Dan is \( y_2 = 971 \) en dan
\begin{align*} x' & = \floorratio{19×971 + 546}{6940} = \floorratio{18995}{6940} = 2 \\ x_2 & = 2 + \floorratio{971 − 354×2 − 30 \floorratio{7×2 + 1}{19} − \floorratio{4×2 + 12}{19}}{385} \\ & = 2 + \floorratio{263 − 30 \floorratio{15}{19} − \floorratio{20}{19}}{385} \\ & = 2 + \floorratio{263 − 0 − 1}{385} = 2 \\ k_1 & = 13×\left( 971 − 354×2 − 30\floorratio{7×2 + 1}{19} − \floorratio{4×2 + 12}{19} \right) + 5 \\ & = 13×\left( 263 − 30\floorratio{15}{19} − \floorratio{20}{19} \right) + 5 \\ & = 13×(263 − 0 − 1) + 5 = 3411 \\ j & = 2 + 1 = 3 \\ m & = \floorratio{3411}{384} + 1 = 9 \\ d & = \floorratio{3411 \bmod 384}{13} + 1 = \floorratio{339}{13} + 1 = 27 \end{align*}
dus de datum is dag 27 van maand 9 van jaar 3.
De religieuze Islamitische kalender hangt af van waarnemingen en is daarom niet te vangen in formules. De administratieve kalender heeft vaste regels en is wel te beschrijven door formules. In de administratieve kalender hebben de oneven maanden 30 dagen en de even maanden 29, behalve dat de laatste maand soms 29 en soms 30 dagen heeft. Daarmee heeft een jaar 354 of 355 dagen. Van elke 30 jaren zijn er 11 lang (met 355 dagen) en de rest kort (met 354 dagen). Een complete cyclus heeft daarmee 11×355 + 19×354 = 10631 dagen.
Rob van Gent (op http://www.staff.science.uu.nl/~gent0113/islam/islam_tabcal.htm) noemt vier verschillende manieren die gebruikt worden om de 11 schrikkeljaren over elke cyclus van 30 jaren te verdelen. Tabel 2 meldt die manieren en hun schrikkeljaarverdeling en geeft de bijbehorende \( r \) (zoals in formule \eqref{eq:r}).
Tabel 2: Schrikkeljaren in Islamitische Kalender
| Type | Schrikkeljaren | \({r}\) | Oorsprong/Gebruik |
|---|---|---|---|
| I | 2 5 7 10 13 15 18 21 24 26 29 | 15 | Kūshyār ibn Labbān, Ulugh Beg, "Kuweitalgoritme" |
| II | 2 5 7 10 13 16 18 21 24 26 29 | 14 | al-Fazārī, al-Khwārizmī, al-Battānī, Toledo- en Alfonsijnse Tafels |
| III | 2 5 8 10 13 16 19 21 24 27 29 | 11 | Fātimiden-, Misri- of Bohrakalender |
| IV | 2 5 8 11 13 16 19 21 24 27 30 | 9 | Habash al-Hāsib, al-Bīrūnī, Elias van Nisibis |
Het aantal lange jaren tussen het begin van jaar 0 en het begin van jaar \( j \) is
\begin{equation} N = \floorratio{11j + r}{30} \end{equation}
Er zijn van elk type nog twee varianten: de astronomische telling "a" volgens welke de eerste dag van de kalender (1 Muharram van jaar 1) begon bij zonsondergang van woensdag 14 juli 622 (ongeveer CJD 1948438,75), en de burgerlijke telling "c" volgens welke de kalender begon bij zonsondergang van donderdag 15 juli 622 (ongeveer CJD 1948439,75). De meestgebruikte telling is IIc.
Voor het onderste kalenderniveau zoeken we een rechte lijn die afwisselend 30 en 29 dagen geeft behalve dat de 12e maand 30 dagen heeft, en voor korte jaren (met 354 dagen) snijden we de laatste dag er vanaf. In een kalender gebaseerd op een rechte lijn voor 355/12 wordt de afwisseling van 29 en 30 dagen al verstoord na 5 of 7 maanden, maar wij hebben een afwisseling van 29 en 30 dagen nodig die onafgebroken is voor tenminste 11 maanden. Daarvoor blijkt \( p \) hooguit 29 + 6/11 te moeten zijn, en 355/12 = 29 + 7/12 is groter dan dat. We gebruiken \( p = 29 \frac{6}{11} = 325/11 \).
In de Islamitische kalender lopen kalenderdagen van zonsondergang tot zonsondergang. De CJDN-kalenderdagen lopen van middernacht tot middernacht. Voor de berekeningen maken we de koppeling midden op de dag. De CJDN die volgens onderstaande formules bij een bepaalde Islamitische kalenderdatum hoort hoort daarbij tussen middernacht en zonsondergang. Tussen zonsondergang en middernacht is volgens de Islamitische tijdrekening de volgende dag al begonnen, maar volgens de CJDN nog niet.
Bijvoorbeeld, CJDN 2455774 komt overeen met Gregoriaanse datum 31 juli 2011 (31−07−2011) en loopt van middernacht tot middernacht lokale tijd. Onderstaande formules (voor type IIc) zeggen dat CJDN 2455774 overeenkomt met Islamitische datum 29 Sha`ban 1432 (29−08−1432) ― dat betekent dat van middernacht tot zonsondergang die twee data met elkaar kloppen. Van zonsondergang tot middernacht is het in de Gregoriaanse kalender nog steeds 31 juli en in CJDN nog steeds 2455774 maar in de Islamitische kalender al de volgende dag (dus 1 Ramaḍān).
| Type | \({r}\) | \({J_0}\) |
| Ia | 15 | 1948439 |
| Ic | 15 | 1948440 |
| IIa | 14 | 1948439 |
| IIc | 14 | 1948440 |
| IIIa | 11 | 1948439 |
| IIIc | 11 | 1948440 |
| IVa | 9 | 1948439 |
| IVc | 9 | 1948440 |
\begin{align} x_2 & = j − 1 \\ x_1 & = m − 1 \\ z_1 & = d − 1 \\ c_1 & = \floorratio{325x_1 + 5}{11} \\ y_1 & = c_1 + z_1 \\ z_2 & = y_1 \\ c_2 & = \floorratio{10631x_2 + r}{30} \\ y_2 & = c_2 + z_2 \\ J & = y_2 + J_0 \end{align}
Bijvoorbeeld, welke CJDN komt overeen met de Islamitisch datum 29 Sha`ban 1432 volgens kalendertype IIc? Dan is
\begin{align*} j & = 1432 \\ m & = 8 \\ d & = 29 \\ r & = 14 \\ J_0 & = 1948440 \\ x_2 & = 1432 − 1 = 1431 \\ x_1 & = 8 − 1 = 7 \\ z_1 & = 29 − 1 = 28 \\ c_1 & = \floorratio{325×7 + 5}{11} = \floorratio{2280}{11} = 207 \\ y_1 & = 207 + 28 = 235 \\ z_2 & = 235 \\ c_2 & = \floorratio{10631×1431 + 14}{30} = \floorratio{15212975}{30} = 507099 \\ y_2 & = 507099 + 235 = 507334 \\ J & = 507334 + 1948440 = 2455774 \end{align*}
Dit kan worden ingedikt tot
\begin{equation} J = \floorratio{10631j − 10631 + r}{30} + \floorratio{325m − 320}{11} + d − 1 + J_0 \end{equation}
ofwel
| Ia | \({J = \floorratio{10631j − 10616}{30} + \floorratio{325m − 320}{11} + d + 1948438}\) |
| Ic | \({J = \floorratio{10631j − 10616}{30} + \floorratio{325m − 320}{11} + d + 1948439}\) |
| IIa | \({J = \floorratio{10631j − 10617}{30} + \floorratio{325m − 320}{11} + d + 1948438}\) |
| IIc | \({J = \floorratio{10631j − 10617}{30} + \floorratio{325m − 320}{11} + d + 1948439}\) |
| IIIa | \({J = \floorratio{10631j − 10620}{30} + \floorratio{325m − 320}{11} + d + 1948438}\) |
| IIIc | \({J = \floorratio{10631j − 10620}{30} + \floorratio{325m − 320}{11} + d + 1948439}\) |
| IVa | \({J = \floorratio{10631j − 10622}{30} + \floorratio{325m − 320}{11} + d + 1948438}\) |
| IVc | \({J = \floorratio{10631j − 10622}{30} + \floorratio{325m − 320}{11} + d + 1948439}\) |
Voor dezelfde Islamitische datum als hiervoor vinden we dan
\begin{align*} J & = \floorratio{10631×1432 − 10617}{30} + \floorratio{325×8 − 320}{11} + 29 + 1948439 \\ & = \floorratio{15212975}{30} + \floorratio{2280}{11} + 29 + 1948439 \\ & = 507099 + 207 + 29 + 1948439 = 2455774 \end{align*}
hetzelfde antwoord als hiervoor.
In omgekeerde richting vinden we:
\begin{align} y_2 & = J − J_0 \\ \{x_2, r_2\} & = \Div(30y_2 + 29 − r, 10631) \\ z_2 & = \floorratio{r_2}{30} \\ y_1 & = z_2 \\ \{x_1, r_1\} & = \Div(11y_1 + 5, 325) \\ z_1 & = \floorratio{r_1}{11} \\ j & = x_2 + 1 \\ m & = x_1 + 1 \\ d & = z_1 + 1 \end{align}
Bijvoorbeeld, welke Islamitische datum (in kalendertype IIc) komt overeen me CJDN 2455774? Dan is \( J = 2455774 \), \( r = 14 \), \( J_0 = 1948440 \), en dan
\begin{align*} y_2 & = 2455774 − 1948440 = 507334 \\ \{x_2, r_2\} & = \Div(30×507334 + 15, 10631) = \Div(15220035, 10631) = \{1431, 7074\} \\ z_2 & = \floorratio{7074}{30} = 235 \\ y_1 & = 235 \\ \{x_1, r_1\} & = \Div(11×235 + 5, 325) = \Div(2590, 325) = \{7, 315\} \\ z_1 & = \floorratio{315}{11} = 28 \\ j & = 1432 \\ m & = 8 \\ d & = 29 \end{align*}
ofwel 29 Sha`ban 1432.
Dit kan worden ingedikt tot
\begin{align} \{x_2, r_2\} & = \Div(30(J − J_0) + 29 − r, 10631) \\ \{x_1, r_1\} & = \Div\left( 11\floorratio{r_2}{30} + 5, 325 \right) \\ j & = x_2 + 1 \\ m & = x_1 + 1 \\ d & = \floorratio{r_1}{11} + 1 \end{align}
Bijvoorbeeld, welke Islamitische datum (in kalendertype IIc) komt overeen me CJDN 2455774? Dan is \( J = 2455774 \), \( r = 14 \), \( J_0 = 1948440 \), en dan
\begin{align*} \{x_2, r_2\} & = \Div(30×(2455774 − 1948440) + 29 − 14, 10631) \\ & = \Div(15220035, 10631) = \{1431, 7074\} \\ \{x_1, r_1\} & = \Div\left( 11×\floorratio{7074}{30} + 5, 325 \right) \\ & = \Div(11×235 + 5, 325) = \Div(2590, 325) = \{7, 315\} \\ j & = 1431 + 1 = 1432 \\ m & = 7 + 1 = 8 \\ d & = \floorratio{315}{11} + 1 = 29 \end{align*}
ofwel 29 Sha`ban 1432, hetzelfde als in het vorige voorbeeld.
De Maya uit Anahuac (Midden-Amerika) gebruikten drie verschillende kalenders, waarvan er twee (de Tzolkin en de Haab) periodiek waren met vrij korte perioden, en de derde (de Lange Telling) misschien ook wel als periodiek bedoeld was maar die zulke lange perioden heeft dat hij in de praktijk als doorlopend (in plaats van periodiek) kan worden beschouwd.
Verschillende gebieden in Midden-Amerika hadden iets verschillende versies van deze kalenders, met andere namen voor dagen en maanden, andere manieren om jaren aan te geven, en soms telde men dagen vanaf dag 0 in plaats van vanaf dag 1. Hieronder geven we de kalenders van de stad Tikal.
De Haab heeft een dagnummer en een maand, maar geen jaarnummer. Er zijn 18 maanden van 20 dagen, plus een 19e maand van 5 dagen, en dat is samen 365 dagen, en dat noemen we het Haab-jaar. Er zijn geen schrikkeldagen. De maanden hebben een naam, en de dagen hebben een nummer dat begint bij 0.
Wij schrijven een datum in de Haab als \( \{h_d,h_m\} \) waarin \( h_d \) het dagnummer is (van 0 tot 19) en \( h_m \) het maandnummer (van 1 tot 19).
Om een CJDN \( J \) om te rekenen naar een Haab-datum \( \{h_d,h_m\} \) moeten we eerst \( H \) uitrekenen, het aantal dagen sinds het begin van het huidige Haab-jaar (met \( H = 0 \) voor de eerste dag van het Haab-jaar).
\begin{align} H & = (J + 65) \bmod 365 \\ h_m & = \floorratio{H}{20} + 1 \\ h_d & = H \bmod 20 \end{align}
Een voorbeeld: Welke Haab-datum komt overeen met 15 december 1965 = CJDN 2439110? Dan is \( J = 2439110 \) en
\begin{align*} H & = (J + 65) \bmod 365 = 2439175 \bmod 365 = 245 \\ h_m & = \floorratio{245}{20} + 1 = 13 \\ h_d & = 245 \bmod 20 = 5 \end{align*}
dus die dag is 245 dagen sinds het begin van het huidige Haab-jaar en komt overeen met de 5e dag van de 13e maand, dus \( \{5,13\} \).
Om een Haab-datum \( \{h_d,h_m\} \) om te rekenen naar een CJDN rekenen we eerst \( H \) uit
\begin{equation} H = h_d + 20×(h_m − 1) \end{equation}
We weten dan dat
\begin{equation} J ≡ H − 65 \pmod{365} \end{equation}
Omdat er geen jaarnummer in de Haab zit komt deze Haab-datum elke 365 dagen weer terug. We kunnen formule \eqref{eq:laatste} gebruiken om de laatste \( J \) op of voor een bepaalde \( J_0 \) te vinden die overeenkomt met deze Haab-datum:
\begin{equation} J = J_0 − ((J_0 − H + 65) \bmod 365) \end{equation}
Welke CJDN komt overeen met Haab-datum \( \{5,13\} \)? Dan is \( h_d = 5 \), \( h_m = 13 \), dus \( H = 5 + 20×(13 − 1) = 245 \) en dan \( J ≡ 245 − 65 ≡ 180 \pmod{365} \). Dat klopt met de originele \( J \) waarmee we in het vorige voorbeeld begonnen (2439110), want \( 2439110 = 6682×365 + 180 ≡ 180 \pmod{365} \).
Wat is de laatste CJDN in het jaar 1965 die overeenkomt met Haab-datum \( \{5,13\} \)? Dan zoeken we de laatste \( J ≡ 180 \pmod{365} \) op of voor CJDN \( J_0 = 2439126 \) (die overeenkomt met 31 december 1965), met behulp van formule \eqref{eq:laatste}. We vinden
\begin{align*} J & = J_0 − ((J_0 − 180) \bmod 365) \\ & = 2439126 − (2438946 \bmod 365) \\ & = 2439126 − 16 = 2439110 \end{align*}
De Tzolkin heeft een periode van 20 dagen (de venteina) met een naam voor elke dag, en een periode van 13 dagen (de trecena) met een nummer voor elke dag (te beginnen bij 1).
Wij schrijven een datum in de Tzolkin als \( \{t_t,t_v\} \), waarin \( t_t \) het dagnummer in de trecena is (van 1 tot 13) en \( t_v \) het dagnummer in de venteina (van 1 tot 20).
De trecena en venteina lopen allebei tegelijk op, dus na dag \( \{2,7\} \) komt dag \( \{3,8\} \) en dan \( \{4,9\} \), enzovoort. Omdat 13 en 20 relatief priem zijn komen alle mogelijke combinaties van venteina en trecena voor in deze kalender, dus na 13×20 = 260 dagen herhalen de datums zich weer.
We rekenen CJDN \( J \) als volgt om naar een Tzolkin-datum \( \{t_t,t_v\} \):
\begin{align} t_t & = ((J + 5) \bmod{13}) + 1 \label{eq:trecena2} \\ t_v & = ((J + 16) \bmod{20}) + 1 \label{eq:venteina2} \end{align}
Wat is de Tzolkin-datum die overeenkomt met CJDN 2439110? Dan is
\begin{align*} t_t & = ((2439110 + 5) \bmod 13) + 1 = 3 + 1 = 4 \\ t_v & = ((2439110 + 16) \bmod 20) + 1 = 6 + 1 = 7 \end{align*}
dus die datum is \( \{4,7\} \).
Om een Tzolkin-datum \( \{t_t,t_v\} \) om te rekenen naar een CJDN moeten we de twee gelijktijdige congruenties van vergelijkingen \eqref{eq:trecena2} en \eqref{eq:venteina2} oplossen, ofwel
\begin{align} J & ≡ t_t − 6 \pmod{13} \\ J & ≡ t_v − 17 \pmod{20} \end{align}
We combineren die congruenties op de manier van hoofdstuk 12.10.3. We hebben \( x_1 = t_t \), \( x_2 = t_v \), \( p_1 = 13 \), \( p_2 = 20 \), \( a_1 = 6 \), \( a_2 = 17 \). Dan
\begin{align} C_1 & = x_1 − a_1 = t_t − 6 \\ P_1 & = p_1 = 13 \end{align}
De grootste gemene deler van 13 en 20 is 1:
\begin{align} g_2 & = 1 \\ Q_1 & = \frac{P_1}{g_2} = \frac{13}{1} = 13 \\ q_2 & = \frac{p_2}{g_2} = \frac{20}{1} = 20 \end{align}
We zoeken nu \( r_2 \) die voldoet aan \( r_2Q_1 ≡ 1 \pmod{q_2} \) ofwel \( 13r_2 ≡ 1 \pmod{20} \) en vinden \( r_2 = 17 \), want \( 13×17 = 221 ≡ 1 \pmod{20} \). Dan
\begin{align} & \begin{split} C_2 & = C_1 (1 − r_2Q_1) + (x_2 − a_2) r_2Q_1 \\ & = (t_t − 6)×(1 − 17×13) + (t_v − 17)×17×13 \\ & = 221 t_v − 220 t_t − 2437 \end{split} \\ P_2 & = p_2Q_1 = 20×13 = 260 \end{align}
dus de oplossing is
\begin{equation} J ≡ 221 t_v − 220 t_t − 2437 = −39 t_v + 40 t_t − 97 \pmod{260} \end{equation}
Welke dagen komen overeen met Tzolkin-datum \( \{4,7\} \)? Dat zijn dagen met \( J ≡ −39×7 + 40×4 − 97 ≡ 50 \pmod{260} \). Dat klopt met \( J = 2439110 \) want \( 2439110 = 9381×260 + 50 ≡ 50 \pmod{260} \).
Omdat er geen jaarnummer in de Tzolkin zit komt deze Tzolkin-datum elke 260 dagen weer terug. We kunnen formule \eqref{eq:laatste} gebruiken om de laatste \( J \) op of voor een bepaalde \( J_0 \) te vinden die overeenkomt met deze Tzolkin-datum:
\begin{equation} J = J_0 − ((J_0 − 40 t_t + 39 t_v + 97) \bmod 260) \end{equation}
De laatste Tzolkin-datum \( \{4,7\} \) die gebeurt op of voor 31 december 1965 (= CJDN 2439126) is \( J = 2439126 − ((2439126 − 50) \bmod 260) = 2439126 − 16 = 2439110 \).
Voor het aantal dagen \( T \) sinds de laatste \( \{1,1\} \) geldt
\begin{equation} \begin{split} T & ≡ 40 (t_t − 1) − 39 (t_v − 1) \\ & ≡ 40 t_t − 39 t_v − 1 \\ & ≡ 40 t_t + 221 t_v − 1 \pmod{260} \end{split} \end{equation}
dus
\begin{equation} T ≡ (40 t_t + 221 t_v − 1) \bmod 260 \end{equation}
Voor CJDN 2439110 (met \( \{t_t,t_v\} = \{4,7\} \)) vinden we \( T = (40×4 + 221×7 − 1) \bmod 260 = 1706 \bmod 260 = 146 \), dus de laatste dag daarvoor die \( \{1,1\} \) had was CJDN \( J = 2439110 − 146 = 2438964 \), en dat klopt, want \( t_t = ((J + 5) \bmod 13) + 1 = (2438969 \bmod 13) + 1 = 1 \) en \( t_v = ((J + 16) \bmod 20) + 1 = (2438980 \bmod 20) + 1 = 1 \).
Soms wordt een datum aangegeven met Tzolkin en Haab. Van CJDN naar Tzolkin en Haab staat hierboven beschreven. Van een datum met Tzolkin en Haab naar CJDN is weer iets lastiger. We moeten dan tegelijkertijd oplossen:
\begin{align} J & ≡ H − 65 \pmod{365} \\ J & ≡ T − 96 \pmod{260} \end{align}
De eerste formule vonden we voor de Haab alleen, en de tweede formule voor de Tzolkin alleen. Deze formules hebben weer de vorm van hoofdstuk 12.10.3, met \( x_1 = H \), \( x_2 = T \), \( p_1 = 365 \), \( p_2 = 260 \), \( a_1 = 65 \), \( a_2 = 96 \). Dan
\begin{align} C_1 & = x_1 − a_1 = H − 65 \\ P_1 & = p_1 = 365 \end{align}
De grootste gemene deler van 365 en 260 is 5, dus
\begin{align} g_2 & = 5 \\ Q_1 & = \frac{P_1}{g_1} = \frac{365}{5} = 73 \\ q_2 & = \frac{p_2}{g_1} = \frac{260}{5} = 52 \end{align}
We zoeken nu \( r_2 \) die voldoet aan \( r_2Q_1 ≡ 1 \pmod{q_2} \) ofwel \( 73r_2 ≡ 1 \pmod{52} \) en vinden \( r_2 = 5 \), want \( 73×5 = 365 = 7×52 + 1 ≡ 1 \pmod{52} \). Dan
\begin{align} & \begin{split} C_2 & = C_1 (1 − r_2Q_1) + (x_2 − a_2) r_2Q_1 \\ & = (H − 65)×(1 − 5×73) + (T − 96)×5×73 \\ & = 365 T − 364 H − 11380 \end{split} \\ P_2 & = p_2Q_1 = 365×52 = 18980 \end{align}
dus de oplossing is
\begin{equation} J ≡ 365 T − 364 H − 11380 ≡ 365 T − 364 H + 7600 \pmod{18980} \end{equation}
De Tzolkin en Haab hebben samen een periode van 18980 dagen, ofwel ongeveer 52 jaar.
Welke CJDN komen overeen met \( \{t_t,t_v,h_d,h_m\} = \{4,7,5,13\} \)? Dan is \( H = 245 \) en \( T = 146 \), dus \( J ≡ 365×146 − 364×245 + 7600 ≡ −28290 ≡ 9670 \pmod{18980} \), en dat klopt met de originele \( J = 2439110 \) waar we mee begonnen, want \( 2439110 = 128×18980 + 9670 ≡ 9670 \pmod{18980} \).
Omdat \( g_2 \) niet gelijk is aan 1 komen niet alle mogelijke combinaties van \( H \) en \( T \) voor in de kalender. Je krijgt uit voorgaande formule wel voor alle combinaties van \( H \) en \( T \) een antwoord, maar dat antwoord is alleen bruikbaar voor combinaties van \( H \) en \( T \) die ook echt in de kalender voorkomen. Dat zijn combinaties waarvoor \( H − T ≡ 65 − 96 ≡ 4 \pmod{5} \).
In het voorbeeld dat we al steeds gebruiken is \( H = 245 \) en \( T = 146 \), dus \( H − T = 99 ≡ 4 \pmod{5} \), dus deze combinatie komt inderdaad voor in deze kalender.
De Lange Telling telt dagen en heeft een serie steeds langere perioden. De kleinste is 20 dagen, de volgende is 18 keer zo lang (dus 360 dagen), en daarna is elke volgende periode steeds 20 keer zo lang als de vorige. Het getal voor elke periode begint bij 0. Vaak zijn datums in de Lange Telling gegeven met vijf getallen, maar nog langere perioden zijn bekend, tot het negende getal toe. De langst bekende periode komt overeen met ongeveer 63 miljoen jaar. Hieronder gaan we er van uit dat de Lange Telling vijf getallen bevat, en kan het vijfde getal willekeurig groot worden.
De begindatum (0.0.0.0.0) van de Lange Telling komt waarschijnlijk overeen met CJDN \( J_0 = 584283 \) (6 september −3113 in de Juliaanse kalender).
Het omrekenen van CJDN \( J \) naar Lange Telling \( L ≡ l_5.l_4.l_3.l_2.l_1 \) gaat dan als volgt:
\begin{align} y & = J − J_0 \\ \{l_5, r_5\} & = \Div(y, 144000) \\ \{l_4, r_4\} & = \Div(r_5, 7200) \\ \{l_3, r_3\} & = \Div(r_4, 360) \\ \{l_2, l_1\} & = \Div(r_3, 20) \end{align}
en het omrekenen van Lange Telling naar CJDN gaat als volgt:
\begin{equation} \begin{split} J & = l_1 + 20×(l_2 + 18×(l_3 + 20×(l_4 + 20×l_5))) + J_0 \\ & = l_1 + 20×l_2 + 360×l_3 + 7200×l_4 + 144000×l_5 \end{split} \end{equation}
Welke Lange Telling \( L \) komt overeen met CJDN \( J = 2439110 \)? Dan is
\begin{align*} y & = J − J_0 = 2439110 − 584283 = 1854827 \\ \{l_5, r_5\} & = \Div(1854827, 144000) = \{12, 126827\} \\ \{l_4, r_4\} & = \Div(126827, 7200) = \{17, 4427\} \\ \{l_3, r_3\} & = \Div(4427, 360) = \{12, 107\} \\ \{l_2, l_1\} & = \Div(107, 20) = \{5, 7\} \end{align*}
Het antwoord is \( L = 12.17.12.5.7 \).
En nu de andere kant op: \( J = 7 + 20×(5 + 18×(12 + 20×(17 + 20×12))) + 584283 = 2439110 \).
We zitten niet vast aan het gebruik van rechte lijnen. De methode die we hierboven afleidden voor het gebruik van een rechte lijn kan uitgebreid worden naar ingewikkeldere functies. Als we functies \( v(x) \) en \( w(y) \) hebben zodat
\begin{align*} v'(x) & ≥ 1 \\ v(w(x)) & = w(v(x)) = x \end{align*}
(dus \( v \) en \( w \) zijn elkaars inverse functies) dan worden de kalenderformules
\begin{align} y & = ⌊v(x)⌋ + z \\ x & = ⌈w(y + 1)⌉ − 1 = −⌊−w(y + 1)⌋ − 1 \end{align}
We krijgen het geval van de rechte lijn als we stellen \( v(x) = px = fx/g \); daar hoort bij \( w(y) = y/p = gy/f \).
De afleiding gaat op dezelfde manier als we hierboven deden voor de rechte lijn.
Met een kromme lijn kunnen we een kalender maken waarbij de gemiddelde lengte van de maand of van het jaar op de lange duur niet gelijk blijft maar verandert. Op die manier kunnen we de kalender beter in de pas houden met de Zon en de Maan dan met een kalender die een vaste gemiddelde lengte heeft.
Een praktisch probleem hierbij is dat het lang niet voor elke functie \( v(x) \) mogelijk is om een (redelijk simpele) bijbehorende inverse functie \( w(y) \) te vinden. Je kunt dus niet zomaar elke \( v(x) \) gebruiken.
Als je een functie \( v(x) \) gebruikt die (voor hele getallen \( x \)) niet altijd een heel getal of een breuk oplevert, of als je de berekeningen niet doet met alleen hele getallen (of met tellers en noemers apart), dan moet je je zorgen maken over afrondfouten. Als je rekenmachine door een afrondfout \( v(x) = 6,9999 \) geeft in plaats van \( v(x) = 7,0000 \), dan krijg je \( ⌊v(x)⌋ = 6 \) in plaats van \( ⌊v(x)⌋ = 7 \), en dus een verkeerd dagnummer. Om afrondfouten te voorkomen zou je een functie \( v(x) \) moeten kiezen die rekenen met breuken toelaat en die een inverse functie \( w(y) \) heeft die ook rekenen met breuken toelaat, zodat alle berekeningen met alleen hele getallen (tellers en noemers apart) gedaan kunnen worden.
Bovenstaande algoritmes zijn in principe geschikt voor alle dagen, maar computerprogramma's werken meestal met getallen met een beperkte grootte, dus in de praktijk zullen de algoritmen niet meer werken voor data die te ver liggen van de begindag van de kalender of te ver van CJDN 0. Als het computerprogramma werkt met hele getallen van \( n \) bits breed, dan is het grootste getal waar het mee kan werken gelijk aan \( w = 2^{n−1} \). Als een of meer van de tussenresultaten van bovenstaande algoritmen groter zouden worden dan \( w \) (in positieve of negatieve richting), dan passen ze niet meer en geeft het programma foute resultaten.
Bij het omrekenen van een kalenderdatum naar een doorlopend dagnummer is het doorlopende dagnummer over het algemeen het grootste (tussen)resultaat, dus algoritmes die een kalenderdatum omrekenen naar een doorlopend dagnummer zullen in computerprogramma's goed werken als het doorlopende dagnummer in absolute zin kleiner blijft dan \( w \). Ook het aantal dagen sinds of voor CJDN 0 moet kleiner blijven dan \( w \). De waarden van \( w \) voor veelgebruikte getalbreedtes staat in tabel 3.
| \({n}\) | \({w}\) | \({w/365.25}\) |
|---|---|---|
| 2 | 32 768 | 89 |
| 4 | 2 147 483 648 | 5.8 × 106 |
| 8 | 9 223 372 036 854 775 808 | 2.5 × 1016 |
Bijvoorbeeld, als het computerprogramma getallen van 32 bits breed gebruikt, dan kan het vertalen van kalenderdatum naar doorlopend dagnummer voor datums tot ruim 5 miljoen jaar vanaf het begin van de kalender (zowel naar de toekomst als naar het verleden).
Bij het omrekenen van het doorlopende dagnummer naar een kalenderdatum wordt het doorlopende dagnummer \( y \) (sinds het begin van de kalender) gestopt in een formule zoals formule \eqref{eq:ynaarxr}, dus vermenigvuldigd met een factor \( g \) (een heel getal groter dan 1), dan een vast (meestal klein) heel getal erbij opgeteld, en daarna gedeeld door een deler \( f \) (een heel getal groter dan \( g \)). We kunnen die berekening schematisch als volgt weergeven:
\begin{equation} x = \floorratio{gy + t}{f} \end{equation}
Als we de berekeningen in de genoemde volgorde doen, dan krijgen we een tussenresultaat \( gy + t \) dat veel groter is dan \( y \) zelf. Tussenresultaten groter dan \( w \) geven problemen, dus zou om problemen te voorkomen ongeveer \( |gy| \lt w \) moeten zijn, dus \( |y| \lt w/g \), wat veel kleiner is dan \( w \) zelf.
Bijvoorbeeld, het "CJDN → Gregoriaans (3)"-algoritme heeft \( g = 4800 \), dus zou dan \( |y| \lt w/4800 \) moeten blijven. Voor getallen van 32 bits breed zou dat algoritme bruikbaar zijn zolang ongeveer \( |y| \lt 447392 \), ofwel voor 447.392 dagen of 1224 jaar vanaf het begin van de kalender. Dat is veel te weinig om de hele periode sinds het einde van de prehistorie te omvatten.
Hoofdstuk 12.2 beschrijft hoe we de berekening kunnen herschikken om dit probleem te omzeilen.
Als voorbeeld kijken we naar vergelijking \eqref{eq:g3}, die we hier herhalen:
\begin{equation} x_2 = \floorratio{4800y_2 + 15793}{146097} \end{equation}
Dan is \( g = 4800 \), \( t = 15793 \), \( f = 146097 \). Stel dat verder \( y_2 = 730.000 \) (we doen een berekening voor een datum die 730.000 dagen, ongeveer 2000 jaar, na het begin van de kalender ligt) en \( n = 4 \) dus \( w = 2^{31} = 2.147.483.648 \).
Dan is \( 4800y_2 + 15793 = 3.504.015.793 \), wat groter is dan \( w \), en \( 3504015793/146097 = 23984 + 25345/146097 \), dus \( x_2 = 23984 \). Als we \( x_2 \) op deze manier berekenen dan krijgen we een tussenresultaat dat te groot is om in een getal van 32 bits breed te passen.
Nu doen we het op de alternatieve manier. Dan is
\[ x_2 = 4800\floorratio{y_2}{146097} + \floorratio{4800(y_2 \bmod 146097) + 15793}{146097} \]
We vinden
\begin{align*} \floorratio{y_2}{146097} & = \floorratio{730000}{146097} = 4 \\ y_2 \bmod 146097 & = y_2 − 146097\floorratio{y_2}{146097} = 145612 \\ x_2 & = 4800×4 + \floorratio{4800×145612 + 15793}{146097} \\ & = 19200 + \floorratio{698953393}{146097} = 19200 + 4784 = 23984 \end{align*}
Dit geeft dezelfde uitkomst als hierboven, maar nu is het grootste tussenresultaat 698.953.393, wat kleiner is dan \( w \).
Met deze alternatieve manier zal het grootst mogelijke tussenresultaat voor deze kalender gelijk zijn aan \( η = fg − f + t = f×(g − 1) + t = 4799×146097 + 15793 = 701.135.296 \), en dat past in een getal van 32 bits breed.
Met deze omweg kunnen we, door meer berekeningen te doen, doorlopende dagnummers omrekenen naar kalenderdatums voor ongeveer hetzelfde bereik aan datums als de omrekening van kalenderdatum naar doorlopend dagnummer, mits \( fg − f + t \lt w \).
Tabel 4 toont voor alle behandelde algoritmen de toepasselijke waarde van \( g \), en (ongeveer) de bijbehorende grootste toegestane waarde van \( y \) (in dagen en jaren) voor \( n \) gelijk aan 16, 32 en 64 ― dat is de breedte in bits van de meestgebruikte soorten hele getallen in computerprogramma's. Dit geeft de beperkingen aan als de alternatieve manier die hierboven uitgelegd werd niet wordt gebruikt. De laatste kolommen tonen \( t \), \( f \), het grootst mogelijke tussenresultaat \( η \) (afgezien van \( y \)) als de alternatieve manier wel wordt gebruikt, en de minimumbreedte \( n_{min} \) in bits die nodig is voor hele getallen in het computerprogramma om met de alternatieve manier niet in de problemen te komen.
| Kalender | \({g}\) | \({y}\) | \({y/365,25}\) | \({t}\) | \({f}\) | \({η}\) | \({n_{min}}\) | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 16 | 32 | 64 | 16 | 32 | 64 | ||||||
| CJDN → Juliaans (1) | 4 | 8192 | 536 × 106 | 2305 × 1015 | 22 | 1469872 | 6313 × 1012 | 3 | 1461 | 4386 | 2 |
| CJDN → Juliaans (2) | 48 | 682 | 44 × 106 | 192 × 1015 | 1 | 122489 | 526 × 1012 | 109 | 1461 | 68776 | 3 |
| CJDN → Gregoriaans (1) | 4 | 8192 | 536 × 106 | 2305 × 1015 | 22 | 1469872 | 6313 × 1012 | 3 | 146097 | 438294 | 2 |
| CJDN → Gregoriaans (2) | 400 | 81 | 5 × 106 | 23 × 1015 | 0 | 14698 | 63 × 1012 | 799 | 146097 | 58293502 | 4 |
| CJDN → Gregoriaans (3) | 4800 | 6 | 447392 | 1,9 × 1015 | 0 | 1224 | 5 × 1012 | 15793 | 146097 | 701135296 | 4 |
| CJDN → Babylonisch (1) | 235 | 139 | 9 × 106 | 39 × 1015 | 0 | 25019 | 10 × 1012 | 234 | 6940 | 1624194 | 3 |
| CJDN → Babylonisch (2) | 19 | 1724 | 113 × 106 | 485 × 1015 | 4 | 309446 | 1329 × 1012 | 546 | 6940 | 125466 | 3 |
| CJDN → Islamitisch | 30 | 1092 | 71 × 106 | 307 × 1015 | 3 | 195983 | 841 × 1012 | 15 | 10631 | 308314 | 3 |
Het "CJDN → Gregoriaans (3)"-algoritme is voor hele getallen van 32 bits breed maar geldig voor data tot 1224 jaar vanaf de begindag van de kalender. Als je dat algoritme met die getalbreedte gebruikt voor data rond vandaag dan zul je foute antwoorden krijgen. Op welke manier die antwoorden fout zijn hangt er van af wat de computer doet met tussenresultaten die te groot zijn, en dat kan per computer verschillend zijn. Om in de praktijk dit algoritme te gebruiken moet je computerprogramma óf hele getallen van 64 bits breed gebruiken (dan is het algoritme geldig voor ongeveer 5.000.000.000.000 jaar), óf hele getallen van 32 bits breed gebruiken en ook de alternatieve manier die hierboven werd uitgelegd (dan is het algoritme geldig voor bijna 6.000.000 jaar).
Hieronder staat een algemeen algoritme (in pseudocode) voor het omrekenen van een kalenderdatum naar een doorlopend dagnummer. De betekenis van de verschillende functieargumenten is:
datum[i,j] is een tweedimensionale tabel, waarin
i de verschillende kalendereenheden kiest (dag, maand,
enzovoorts; er zijn er n + 1) en j de
verschillende data (er zijn er t).
q[i] is de q (basisperiode) van
kalenderniveau i.
g[i] is de g (noemer) van kalenderniveau
i.
b[i] geeft het kalendertype (1 tot en met 4) aan van
kalenderniveau i.
d[i][k] geeft de d (afwijking ten
opzichte van de basisperiode) aan van periode k (er
zijn er m) van kalenderniveau i.
h[i][k] is de h (teller) van periode
k van kalenderniveau i.
s[i][k] is de s (patroonverschuiving)
van periode k van kalenderniveau i.
y[j] is de rij van doorlopende dagnummers.
De functie DIV(x,y) komt overeen met
⌊x/y⌋. De functie MOD(x,y) komt overeen
met x mod y = x − y*⌊x/y⌋.
Hier is het algoritme:
functieKAL2DAG(datum,q,g,b,d,h,s) voorjvan 0 tot en mett − 1: zety[j]gelijk aandatum[0,j]voorivan 0 tot en metn − 1: alsMOD(b[i],2) = 1dan: zetz[j]gelijk aany[j]zetx[j]gelijk aandatum[i+1,j]anders: zetz[j]gelijk aandatum[i+1,j]zetx[j]gelijk aany[j]zetc[j]gelijk aanq[i]*x[j]voorkvan 0 tot en metm − 1: zetc[j]gelijk aanc[j] + MOD(h[i][k]*x[k,j] + s[i][k],g[i])*d[i][k]zety[j]gelijk aanc[j] + z[j]geef terugyeind functie
Hier is een algemeen algoritme (in pseudocode) voor het omrekenen van een doorlopend dagnummer naar een kalenderdatum voor alle vier kalendertypes, op vergelijkbare wijze als hierboven.
functieDAG2KAL(dag,q,g,b,d,h,s) voorivan 0 tot en metn − 1: zetdp[i]gelijk aan0zets2[i]gelijk aan0zetf[i]gelijk aanq[i]*g[i]voorkvan 0 tot en metm − 1: zetf[i]gelijk aanf[i] + d[i][k]*h[i][k]alsd[i][k] gt 0dan: zetdp[i]gelijk aandp[i] + d[i][k]zets2[i]gelijk aand[i][k]*s[i][k]zets2[i]gelijk aang[i]*dp[i] − s2[i] − 1zetzz[i]gelijk aanq[i] + dp[i]voorjvan 0 tot en mett − 1: zety[j]gelijk aandag[j]voorivann − 1tot en met 0: zetx[j]gelijk aanDIV(g[i]*y[j] + s2[i],f[i])zetc[j]gelijk aanq[i]*x[j]voorkvan 0 tot en metm − 1: zetc[j]gelijk aanc[j] + DIV(h[i][k]*x[j] + s[i][k],g[i])*d[i,k]zetz[j]gelijk aany[j] − c[j]alsb[i] gt 2dan: zolangz[j] lt 0: zetx[j]gelijk aanx[j] + DIV(z[j],zz[i])zetc[j]gelijk aanq[i]*x[j]voorkvan 0 tot en metm − 1: zetc[j]gelijk aanc[j] + DIV(h[i][k]*x[j] + s[i][k],g[i])*d[i,k]zetz[j]gelijk aany[j] − c[j]alsMOD(b[i],2) = 1dan: zety[j] = z[j]zetdatum[i + 1,j] = x[j]anders: zetdatum[i + 1,j] = z[j]zety[j] = x[j]zetdatum[0,j] = y[j]geef terug datum eind functie
Onderstaande tabel toont welke kalendereenheden in welke volgorde voor
die kalenders als datum aan KAL2DAG
gegeven moeten worden, of uit DAG2KAL komen.
d, m, j, e betekenen respectievelijk dag, maand, jaar
en eeuw. Een * betekent dat de
rekenmaand/rekenjaar/rekeneeuw gebruikt worden, waarbij het rekenjaar
begint met de maand maart.
| Kalender | Volgorde | |||
|---|---|---|---|---|
| Juliaans (1) | d | m* | j* | |
| Juliaans (2) | j | m | d | |
| Gregoriaans (1) | d | m* | j* | e* |
| Gregoriaans (2) | d | m* | j* | |
| Gregoriaans (3) | j | m | d | |
| Babylonisch (1) | j | m | d | |
| Babylonisch (2) | d | m | j | |
| Islamitisch | d | m | j | |
De parameters die je voor verschillende besproken kalenders nodig hebt om ze met bovenstaande algoritmen te kunnen berekenen staan hieronder.
| Juliaans | Gregoriaans | Babylonisch | Islamitisch | |||||
|---|---|---|---|---|---|---|---|---|
| (1) | (2) | (1) | (2) | (3) | (1) | (2) | ||
J₀ | 1721117,5 | 1721057,5 | 1721119,5 | 1721119,5 | 1721059,5 | 1607557,6 | 1607557,5 | 1948440 |
q₁, g₁, b₁ | 30, 5, 1 | 12, 1, 4 | 30, 5, 1 | 30, 5, 3 | 12, 1, 4 | 12, 19, 2 | 29, 13, 1 | 29, 11, 1 |
d, h, s | 1, 3, 2 | 1, 0, 0 | 1, 3, 2 | 1, 3, 2 | 1, 0, 0 | 1, 7, 13 | 1, 7, 3 | 1, 6, 5 |
q₂, g₂, b₂ | 365, 4, 1 | 30, 48, 4 | 365, 100, 1 | 365, 400, 3 | 30, 4800, 4 | 29, 235, 2 | 354, 19, 3 | 354, 30, 1 |
d, h, s | 1, 1, 0 | 1, 28, 20 | 1, 25, 0 | 1, 100, 0 | 1, 2800, 2000 | 1, 125, 0 | 30, 7, 1 | 1, 11, 14 |
| −2, 4, 40 | −1, 4, 0 | −2, 400, 4000 | 1, 4, 12 | |||||
| 1, 1, 46 | 1, 1, 0 | 1, 100, 4600 | ||||||
| −1, 4, 4792 | ||||||||
| 1, 1, 4798 | ||||||||
q₃, g₃, b₃ | 36524, 4, 1 | |||||||
d, h, s | 1, 1, 0 | |||||||
Als je bovenstaande functies wilt gebruiken voor de Juliaanse (1) kalender, dan moet je de volgende functieargumenten gebruiken:
q = [30, 365]g = [5, 4]b = [1, 1]d = [1, 1]h = [3, 1]s = [2, 0]q de volgende elementen hebben: [ [ 1461, 4, 0
], [ 153, 5, 4 ] ]. De x[0,j] is dan het
rekenjaartal, x[1,j] is het maandnummer in het
rekenjaar (maart heeft nummer 0!), en x[2,j] is het
dagnummer in de maand (de eerste dag heeft nummer 0!).
Als je de functie wilt gebruiken voor de Gregoriaanse kalender dan
moet q de volgende elementen hebben: [ [ 146097,
4, 0 ], [ 36525, 100, 0 ], [ 153, 5, 4 ] ]. Dan is
x[0,j] het rekeneeuwnummer, x[1,j] het
jaarnummer in de rekeneeuw, x[2,j] het maandnummer in
het rekenjaar (maart heeft nummer 0!), en x[3,j] is het
dagnummer in de maand (de eerste dag heeft nummer 0!).
Pseudocode om Juliaanse kalenderdata x (jaar, maand,
dag; met februari = maand 2) om te rekenen naar het CJDN is dan:
functie JUL2CJDN(x) zetqgelijk aan[ [ 1461, 4, 0 ], [ 153, 5, 4 ] ]%code> voorivan 0 tot en metn−1: zetx[1,i]gelijk aanx[1,i] − 3zetx[2,i]gelijk aanx[2,i] − 1alsx[1,i]kleiner is dan 0: zetx[1,i]gelijk aanx[1,i] + 12zetx[0,i]gelijk aanx[0,i] − 1zetdgelijk aanKAL2DAG(x,q)voorjvan 0 tot en mett−1: zety[j]gelijk aany[j] + 1721118geef terugyeind functie
Pseudocode om Gregoriaanse kalenderdata c (jaar, maand,
dag; met februari = maand 2) om te rekenen naar het CJDN is dan:
functie GREG2CJDN(x) zetqgelijk aan[ [ 146097, 4, 0 ], [ 36525, 100, 0 ], [ 153, 5, 4 ] ]%code> voorivan 0 tot en metn−1: zetx[1,i]gelijk aanx[1,i] − 3alsx[1,i]kleiner is dan 0: zetx[1,i]gelijk aanx[1,i] + 12zetx[0,i]gelijk aanx[0,i] − 1zetb[0,i]gelijk aanDIV[x[0,i],100]zetb[1,i]gelijk aanx[0,i] − 100*b[0,i]zetb[2,i]gelijk aanx[1,i]zetb[3,i]gelijk aanx[2,i] − 1zetdgelijk aanKAL2DAG(b,q)voorjvan 0 tot en mett−1: zety[j]gelijk aany[j] + 1721120geef terugyeind functie
Pseudocode om CJDN y om te rekenen naar Juliaanse
kalenderdata is dan:
functie CJDN2JUL(y) zetqgelijk aan[ [ 1461, 4, 0 ], [ 153, 5, 4 ] ]%code> voorjvan 0 tot en mett−1: zety[j]gelijk aany[j] − 1721118zetcgelijk aanDAG2KAL(y,q)voorivan 0 tot en metn−1: zetx[1,i]gelijk aanx[1,i] + 3zetx[2,i]gelijk aanx[2,i] + 1alsx[1,i]groter is dan 12: zetx[1,i]gelijk aanx[1,i] − 12zetx[0,i]gelijk aanx[0,i] + 1geef terugxeind functie
Pseudocode om CJDN y om te rekenen naar Gregoriaanse
kalenderdata is dan:
functie CJDN2GREG(y) zetqgelijk aan[ [ 146097, 4, 0 ], [ 36525, 100, 0 ], [ 153, 5, 4 ] ]%code> voorjvan 0 tot en mett−1: zety[j]gelijk aany[j] − 1721120zetbgelijk aanDAG2KAL(y,q)voorivan 0 tot en metn−1: zetx[0,i]gelijk aan100*b[0,i] + b[1,i]zetx[1,i]gelijk aanb[2,i] + 3zetx[2,i]gelijk aanb[3,i] + 1alsx[1,i]groter is dan 12: zetx[1,i]gelijk aanx[1,i] − 12zetx[0,i]gelijk aanx[0,i] + 1geef terugxeind functie
Als je wilt weten hoeveel dagen er zijn tussen twee datums, dan kun je dat precies uitrekenen door het CJDN van beide datums van elkaar af te trekken. Als je genoegen neemt met een mogelijke fout van een paar dagen, dan kun je het ook schatten uit het verschil gemeten in kalenderjaren, kalendermaanden, en kalenderdagen.
Zulke informatie (het aantal kalenderjaren, maanden en dagen) is in de meeste kalenders niet voldoende om het preciese aantal dagen uit te reken, want niet elk jaar bevat even veel dagen als elk ander jaar en niet elke maand bevat even veel dagen als elke andere maand (in alle kalenders).
Stel dat de tweede datum \( j \) kalenderjaren en \( m \) kalendermaanden en \( d \) kalenderdagen later is dan de eerste (beide in dezelfde kalender, de Gregoriaanse kalender of Joodse kalender of administratieve Islamitische kalender of Egyptische kalender), waarbij je gewoon het jaartal, maandnummer en dagnummer van de tweede datum aftrekt van die van de eerste datum (die later moet zijn). De variabele \( j \) mag positief of nul zijn, maar niet negatief. De variabelen \( m \) en \( d \) mogen positief of nul of negatief zijn, maar \( m \) mag niet overeenkomen met meer dan een kalenderjaar, en \( d \) mag niet overeenkomen met meer dan een kalendermaand. Voor de joodse kalender stellen we dat tisjrie maand nummer 1 is en dat adar Ⅱ samen met adar Ⅰ als maand nummer 6 gerekend wordt (zodat maand 6 tot 59 dagen lang kan zijn). Voor de Egyptische kalender rekenen we de laatste 5 dagen van het jaar als een 13e maand. Dan kun je het aantal dagen \( n \) tussen de twee datums schatten met de formule
\begin{equation} n = ⌊a j + b m + c d⌋ \end{equation}
met \( a \), \( b \) en \( c \) uit de volgende tabel:
| \({a}\) | \({b}\) | \({c}\) | \({|Δ|_\text{max}}\) | \({σ}\) | \({p_0}\) | |
|---|---|---|---|---|---|---|
| Gregoriaans | 365,24 | 30,4 | 1 | 4 | 1,1 | 35 % |
| Joods | 365,25 | 31,0 | 0,9 | 37 | 12,9 | 3 % |
| Islamitisch | 354,367 | 29,5 | 1 | 2 | 0,6 | 62 % |
| Egyptisch | 365 | 30 | 1 | 0 | 0 | 100 % |
De \( |Δ|_\text{max} \) uit de tabel toont de grootste fout (gemeten in dagen) die je met die formule voor die kalender maakt (gebaseerd op 10.000 willekeurige testdatums) voor datums die niet meer dan 400 jaar uiteen zijn. De \( σ \) toont de standaardafwijking (zeg maar de gemiddelde fout, ook gemeten in dagen). De \( p_0 \) toont de kans dat het geschatte aantal dagen \( n \) tussen de twee datums precies goed is.
Het is wel duidelijk dat de Egyptische kalender het meest regelmatig is, want die geeft de kleinste fouten (namelijk nul). Daarna volgt de administratieve Islamitische kalender, dan de Gregoriaanse kalender (met meer variatie in de maandlengten dan de Islamitische kalender), en als laatste de Joodse kalender (met variatie in het aantal maanden per jaar).
Een voorbeeld: Hoeveel dagen zitten er tussen 2003−05−25 en 2017−01−17 in de drie kalenders? Die datums schelen 14 jaar, −4 maanden en −8 dagen. In de Gregoriaanse kalender geeft dat \( n = ⌊365.24×14 + 30.4×−4 − 8⌋ = ⌊4983.76⌋ = 4983 \) dagen. Het echte aantal dagen tussen die twee datums in de Gregoriaanse kalender is 4986.
In de Joodse kalender geeft dit \( n = ⌊365.25×14 + 31.0×−4 + 0.9×−8⌋ = ⌊4982.3⌋ = 4983 \) dagen, hetgeen heel toevallig gelijk is aan het echte aantal dagen tussen die twee datums in de Joodse kalender.
In de administratieve Islamitische kalender geeft dit \( n = ⌊354.367×14 + 29.5×−4 − 8⌋ = ⌊4835.138⌋ = 4835 \) dagen, hetgeen gelijk is aan het echte aantal dagen tussen die twee datums in de administratieve Islamitische kalender.
In de Egyptische kalender geeft dit \( n = ⌊365×14 + 30×−4 − 8⌋ = ⌊4982⌋ = 4982 \) dagen, hetgeen gelijk is aan het echte aantal dagen tussen die twee datums in de Egyptische kalender.
http://aa.quae.nl/nl/reken/juliaansedag.html;
Laatst vernieuwd: 2016−07−25