AstronomieAntwoorden: Het Juliaanse Dagnummer

AstronomieAntwoorden
Het Juliaanse Dagnummer


[AA] [Woordenboek] [Antwoordenboek] [UniversumFamilieBoom] [Wetenschap] [Sterrenhemel] [Planeetstanden] [Reken] [Colofon]

1. Verschillende soorten dagnummers ... 2. Notatie ... 2.1. Afronding ... 2.2. Modulair rekenen ... 3. De Gregoriaanse kalender ... 3.1. Van Gregoriaanse datum naar CJDN ... 3.2. Van CJDN naar Gregoriaanse datum ... 4. De Milanković-kalender ... 4.1. Van Milanković-datum naar CJDN ... 4.2. Van CJDN naar Milanković-datum ... 5. De Juliaanse kalender ... 5.1. Van Juliaanse datum naar CJDN ... 5.2. Van CJDN naar Juliaanse datum ... 6. De Islamitische kalender ... 6.1. Van Islamitische datum naar CJDN ... 6.2. Van CJDN naar Islamitische datum ... 7. De Babylonische kalender ... 7.1. Van Babylonische datum naar CJDN ... 7.2. Van CJDN naar Babylonische datum ... 8. De Joodse kalender ... 8.1. Van Joodse datum naar CJDN ... 8.2. Van CJDN naar Joodse datum ... 9. De Egyptische Kalender ... 9.1. Van Egyptische datum naar CJDN ... 9.2. Van CJDN naar Egyptische datum ... 10. De Mayakalender ... 10.1. Van Mayakalender naar CJDN ... 10.1.1. Van de Haab naar CJDN ... 10.1.2. Van de Tzolkin naar CJDN ... 10.1.3. Van Tzolkin en Haab naar CJDN ... 10.1.4. Van de Lange Telling naar CJDN ... 10.2. Van CJDN naar Mayakalender ... 10.2.1. Van CJDN nar de Haab ... 10.2.2. Van CJDN naar de Tzolkin ... 10.2.3. Van CJDN naar de Lange Telling ... 10.3. Een maankalender met veel vaste maandlengtes ... 10.3.1. Van maankalender naar lopende dagnummer ... 10.3.2. Van lopende dagnummer naar maankalender ... 11. De Chinese Kalender ... 11.1. Het jaar van de aap ... 11.2. HYSN ... 12. Afleiding van de algemene algoritmen ... 12.1. Notatie ... 12.2. Grote Tussenresultaten ... 12.3. Simpele kalender ... 12.4. Met alleen hele getallen ... 12.5. Erg ongelijke maanden ... 12.6. Veel soorten ongelijke maanden ... 12.7. Heel erg ongelijke maanden ... 12.8. Maandlengtes zonder intern patroon ... 12.9. Combinaties van rechte lijnen ... 12.9.1. Vlakke combinatie ... 12.9.2. Getrapte combinatie ... 12.10. Gelijktijdige cycli ... 12.10.1. Van doorlopend dagnummer naar datum ... 12.10.2. Van datum naar doorlopend dagnummer ... 12.10.3. Meer dan twee cycli ... 12.10.4. Naar één oplossing ... 12.11. Samenvatting ... 13. Afleiding voor specifieke kalenders ... 13.1. De Juliaanse kalender ... 13.1.1. Van Juliaanse datum naar CJDN (1) ... 13.1.2. Van CJDN naar Juliaanse datum (1) ... 13.1.3. Van Juliaanse datum naar CJDN (2) ... 13.1.4. Van CJDN naar Juliaanse datum (2) ... 13.2. De Gregoriaanse kalender ... 13.2.1. Van Gregoriaanse datum naar CJDN (1) ... 13.2.2. Van CJDN naar Gregoriaanse datum (1) ... 13.2.3. Van Gregoriaanse datum naar CJDN (2) ... 13.2.4. Van CJDN naar Gregoriaanse Datum (2) ... 13.2.5. Van Gregoriaanse datum naar CJDN (3) ... 13.2.6. Van CJDN naar Gregoriaanse datum (3) ... 13.3. De Milanković-kalender ... 13.3.1. Van Milanković-datum naar CJDN ... 13.3.2. Van CJDN naar Milanković-datum ... 13.4. De Egyptische kalender ... 13.4.1. Van Egyptische datum naar CJDN ... 13.4.2. Van CJDN naar Egyptische datum ... 13.5. De Babylonische kalender ... 13.5.1. Van Babylonische datum naar CJDN ... 13.5.2. Van CJDN naar Babylonische Datum ... 13.6. De Joodse kalender ... 13.6.1. Van Joodse Datum naar CJDN ... 13.6.1.1. Rekenjaar, Rekenmaand, Rekendag ... 13.6.1.2. Kalenderniveaus ... 13.6.1.3. Eerste Kalenderniveau ... 13.6.1.4. Tweede Kalenderniveau ... 13.6.1.5. Het Derde Kalenderniveau ... 13.6.1.6. Het Vierde Kalenderniveau ... 13.6.2. Van CJDN naar Joodse datum ... 13.7. Een maankalender met veel vaste maandlengtes ... 13.8. De Islamitische kalender ... 13.8.1. Van Islamitische datum naar CJDN ... 13.8.2. Van CJDN naar Islamitische datum ... 13.9. De Mayakalender ... 13.9.1. Tussen CJDN en Mayakalender ... 13.9.2. De Haab ... 13.9.3. De Tzolkin ... 13.9.4. Tzolkin en Haab ... 13.9.5. De Lange Telling ... 13.10. Algoritme met een kromme lijn ... 14. Geldigheid van de algoritmen in computerprogramma's ... 15. Algemene algoritmen voor omrekening tussen kalenderdatum en doorlopend dagnummer ... 15.1. Van kalenderdatum naar doorlopend dagnummer ... 15.2. Van doorlopend dagnummer naar kalenderdatum ... 15.3. Parameters voor verschillende kalenders ... 15.4. Juliaanse kalender ... 16. Snelle schatting van het aantal dagen tussen twee datums

\( \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.

1. Verschillende soorten dagnummers

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.

2. Notatie

2.1. Afronding

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

2.2. Modulair rekenen

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} \).

Een bekend voorbeeld van modulair rekenen is rekenen voor een klok. Een typische klok kan uren aanwijzen van 1 tot 12. Als je twee foto's ziet van een klok en op de eerste foto wijst de klok 3 uur aan en op de tweede foto 7 uur, dan kan de tweede foto 4 uur later zijn dan de eerste, maar ook 4 + 12 = 16 uur later, of 4 + 10×12 uren = 5 dagen plus 4 uur later, of 4 uur plus elk gewenst veelvoud van 12 uur later (of vroeger). Als \( t_1 \) de tijd van de eerste foto was en \( t_2 \) de tijd van de tweede foto (gemeten in uren vanaf een bepaald moment), dan weet je alleen dat \( t_2 ≡ t_1 + 4 \pmod{12} \). En als de klok nu \( t \) uur aanwijst dan zal hij \( y \) uur later \( (t_1 + y) \bmod 12 \) uur aanwijzen.

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.

3. De Gregoriaanse kalender

Zie hoofdstuk 13.2.1 voor de afleiding van dit algoritme.

3.1. Van Gregoriaanse datum naar CJDN

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.

Bijvoorbeeld: wat is het CJDN voor 7 september 2010 in de Gregoriaanse kalender? Dan is \( j = 2010 \), \( m = 9 \), \( d = 7 \) en dan:

\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

3.2. Van CJDN naar Gregoriaanse datum

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

4. De Milanković-kalender

Zie hoofdstuk 13.3 voor de afleiding van dit algoritme.

4.1. Van Milanković-datum naar CJDN

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}

4.2. Van CJDN naar Milanković-datum

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}

5. De Juliaanse kalender

Zie hoofdstuk 13.1 voor de afleiding van dit algoritme.

5.1. Van Juliaanse datum naar CJDN

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.

Bijvoorbeeld: wat is het CJDN voor 7 september 2010 in de Juliaanse kalender? Dan is \( j = 2010 \), \( m = 9 \), \( d = 7 \) en dan:

\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

5.2. Van CJDN naar Juliaanse datum

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}

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*}

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

6. De Islamitische kalender

Zie hoofdstuk 13.8 voor de afleiding van dit algoritme.

6.1. Van Islamitische datum naar CJDN

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}

Bijvoorbeeld, welke CJDN \( J \) hoort bij de Islamitische datum 29-08-1432? Dan is \( j = 1432 \), \( m = 8 \), \( d = 29 \), dus

\[ \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.

6.2. Van CJDN naar Islamitische datum

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}

Bijvoorbeeld, welke Islamitische datum komt overeen met CJDN 2455774? Dan is \( J = 2455774 \), en dan

\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.

7. De Babylonische kalender

Zie hoofdstuk 13.5 voor de afleiding van dit algoritme.

7.1. Van Babylonische datum naar CJDN

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}

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*} 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*}

7.2. Van CJDN naar Babylonische datum

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}

Bijvoorbeeld, welke datum in de Babylonische kalender komt overeen met CJDN \( 1608558 \)? Dan is \( J = 1608558 \), dus

\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*}

ofwel dag 27 van maand 9 van jaar 3.

8. De Joodse kalender

Zie hoofdstuk 13.6 voor de afleiding van dit algoritme.

8.1. Van Joodse datum naar CJDN

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.

8.2. Van CJDN naar Joodse datum

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.

9. De Egyptische Kalender

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.

9.1. Van Egyptische datum naar CJDN

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.

9.2. Van CJDN naar Egyptische datum

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*}

dus het is dag 7 van maand 5 van jaar 218.

10. De Mayakalender

10.1. Van Mayakalender naar CJDN

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.

10.1.1. Van de Haab naar CJDN

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*}

10.1.2. Van de Tzolkin naar CJDN

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 \).

10.1.3. Van Tzolkin en Haab naar CJDN

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.

10.1.4. Van de Lange Telling naar CJDN

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 \]

10.2. Van CJDN naar Mayakalender

10.2.1. Van CJDN nar de Haab

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\} \).

10.2.2. Van CJDN naar de Tzolkin

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\} \).

10.2.3. Van CJDN naar de Lange Telling

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 \).

10.3. Een maankalender met veel vaste maandlengtes

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

10.3.1. Van maankalender naar lopende dagnummer

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*}

10.3.2. Van lopende dagnummer naar maankalender

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*}

dus de datum is dag 27 van maand 9 van jaar 3.

11. De Chinese Kalender

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.

11.1. Het jaar van de aap

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.

11.2. HYSN

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*}

12. Afleiding van de algemene algoritmen

We kunnen veel kalenderformules afleiden door rechte lijnen te vinden die met afronding de juiste resultaten geven.

12.1. Notatie

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}

12.2. Grote Tussenresultaten

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 \).

12.3. Simpele kalender

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 een lange maand 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

12.4. Met alleen hele getallen

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

12.5. Erg ongelijke maanden

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}

12.6. Veel soorten ongelijke maanden

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

12.7. Heel erg ongelijke maanden

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}

12.8. Maandlengtes zonder intern patroon

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.

12.9. Combinaties van rechte lijnen

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*}

12.9.1. Vlakke combinatie

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 \).

12.9.2. Getrapte combinatie

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 \).

12.10. Gelijktijdige cycli

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\} \).

12.10.1. Van doorlopend dagnummer naar datum

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\} \).

12.10.2. Van datum naar doorlopend dagnummer

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:

  1. Bereken de grootste gemene deler \( g \) van \( p_1 \) en \( p_2 \):

    \begin{equation} g = \gcd(p_1, p_2) \end{equation}

  2. Vind het kleinste veelvoud \( s \) van \( p_1/g \) waarvoor geldt

    \[ s ≡ 1 \pmod{p_2/g} \]

  3. Dan is

    \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.

12.10.3. Meer dan twee cycli

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 \),

  1. Zet \( C_1 = x_1 − a_1 \) en \( P_1 = p_1 \).
  2. Voor \( i \) van 2 tot en met \( n \):
  3. Bereken \( g_i = \gcd(P_{i−1}, p_i) \), de grootste gemene deler van \( P_{i−1} \) en \( p_i \).
  4. Vind de kleinste \( s_i \) die een veelvoud is van \( P_{i−1}/g_i \) en die voldoet aan \( s_i ≡ 1 \pmod{p_i/g_i} \).
  5. Zet \( C_i = C_{i−1} (1 − s_i) + (x_i − a_i) s_i \) en \( P_i = P_{i−1}p_i/g_i \).
  6. De oplossing is \begin{equation} J ≡ C_n \pmod{P_n} \label{eq:cycle} \end{equation}

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} \).

12.10.4. Naar één oplossing

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

12.11. Samenvatting

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.

  1. De simpelste kalender heeft twee verschillende maandlengtes, waarbij de grotere één groter is dan de kleinere, en heeft geen verschuiving van het patroon van maandlengtes. Maand 0 is altijd een korte maand, en maand \( g − 1 \) (de laatste maand voor alles zich weer herhaalt) is altijd een lange maand.
  2. Kalendertype 2 is gelijk aan kalendertype 1, behalve dat ook verschuiving van het patroon van maandlengtes toegestaan is.
  3. Kalendertype 3 is gelijk aan kalendertype 2, maar nu kan het lengteverschil tussen de maandlengtes meer dan één zijn.
  4. Kalendertype 4 is gelijk aan kalendertype 3, maar laat meer dan twee verschillende maandlengtes toe.

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 \).

13. Afleiding voor specifieke kalenders

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.

13.1. De Juliaanse kalender

13.1.1. Van Juliaanse datum naar CJDN (1)

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:

  1. 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}

  2. 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}

  3. 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.

13.1.2. Van CJDN naar Juliaanse datum (1)

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.

13.1.3. Van Juliaanse datum naar CJDN (2)

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

  1. 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.

  2. 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}

  3. 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*}

13.1.4. Van CJDN naar Juliaanse datum (2)

Hiervoor doorlopen we dezelfde procedure als hierboven, maar in de omgekeerde richting.

  1. 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}

  2. 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}

  3. 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.

13.2. De Gregoriaanse kalender

13.2.1. Van Gregoriaanse datum naar CJDN (1)

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:

  1. 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}

  2. 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}

  3. 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*}

13.2.2. Van CJDN naar Gregoriaanse datum (1)

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.

13.2.3. Van Gregoriaanse datum naar CJDN (2)

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}

13.2.4. Van CJDN naar Gregoriaanse Datum (2)

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.

13.2.5. Van Gregoriaanse datum naar CJDN (3)

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}

13.2.6. Van CJDN naar Gregoriaanse datum (3)

Hiervoor doorlopen we dezelfde procedure als hierboven, maar in de omgekeerde richting.

  1. 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}

  2. 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}

  3. 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.

13.3. De Milanković-kalender

13.3.1. Van Milanković-datum naar CJDN

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*}

13.3.2. Van CJDN naar Milanković-datum

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.

13.4. De Egyptische kalender

13.4.1. Van Egyptische datum naar CJDN

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.

13.4.2. Van CJDN naar Egyptische datum

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*}

dus het is dag 7 van maand 5 van jaar 218.

13.5. De Babylonische kalender

13.5.1. Van Babylonische datum naar CJDN

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*}

13.5.2. Van CJDN naar Babylonische Datum

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*}

ofwel dag 27 van maand 9 van jaar 3.

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.

13.6. De Joodse kalender

13.6.1. Van Joodse Datum naar CJDN

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.

13.6.1.1. Rekenjaar, Rekenmaand, Rekendag

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

13.6.1.2. Kalenderniveaus

De omrekening van een datum uit de Joodse kalender naar CJDN vergt een combinatie van vier kalenderniveaus:

  1. Eerst berekenen we het lopende rekenmaandnummer \( c_1 \) van de eerste maand (rekenmaandnummer \( z_1 = 0 \)) van rekenjaar \( x_1 \).
  2. Dan berekenen we het lopende dagnummer \( c_2 \) van nieuwjaar (rekendagnummer 0, rekenmaandnummer 6) van rekenjaar \( x_1 \) uit het lopende rekenmaandnummer \( c_1 \). Daarmee kunnen we de lengte van het jaar bepalen, en daaruit de lengte van alle maanden.
  3. Daarna berekenen we het dagnummer-in-het-jaar \( y_3 \) uit het maandnummer \( x_3 \) in het rekenjaar.
  4. Dan berekenen we uit het lopende dagnummer \( c_2 \) van nieuwjaar en uit het dagnummer-in-het-jaar \( y_3 \) van de gewenste maand en uit het rekendagnummer-in-de-rekenmaand \( z_4 \) het lopende dagnummer \( y_4 \) van de gewenste datum.
  5. En uiteindelijk tellen we daar de CJDN bij op van de dag met \( y_4 = 0 \), en vinden we de CJDN van de gewenste datum.

13.6.1.3. Eerste Kalenderniveau

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 \).

13.6.1.4. Tweede Kalenderniveau

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.

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}

13.6.1.5. Het Derde Kalenderniveau

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}

13.6.1.6. Het Vierde Kalenderniveau

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}

13.6.2. Van CJDN naar Joodse datum

Nu gaan we de andere kant op.

  1. Reken om van CJDN \( J \) naar lopende dagnummer \( y_4 \) sinds 1 tisjrie A.M. 1:

    \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

  2. Om te bepalen in welke maand de dag met een bepaald lopende dagnummer hoort moeten we de invloed van alle vertragingen meenemen, maar de invloed van de derde en vierde vertragingen zijn alleen uit te rekenen voor een bepaalde maand in een bepaald jaar, maar wat die zijn proberen we nou juist te bepalen. We moeten dus eerst een maand en een jaar schatten zonder dat we de derde en vierde vertraging al kennen, en dan uitrekenen wat die vertragingen zijn, en dan kijken of onze schatting goed was of niet.

    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.

  3. Bereken het voorlopige rekenjaarnummer \( ξ_1 \) en rekenmaandnummer-in-het-rekenjaar \( μ_1 \) voor lopende maand \( γ_1 \):

    \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

  4. Bereken het lopende dagnummer \( c_4'(ξ_1,μ_1) \) van het begin van rekenmaand \( μ_1 \) van rekenjaar \( ξ_1 \) op de manier zoals beschreven in het vorige hoofdstuk, en dan het dagnummer-in-de-maand \( ζ_1 \) ten opzichte van \( c_4'(ξ_1,μ_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.

  5. Bereken op dezelfde manier rekenjaarnummer \( ξ_2 \), rekenmaandnummer \( μ_2 \), lopende dagnummer \( c_4'(ξ_2,μ_2) \) van de eerste dag van die maand, dagnummer-in-de-maand \( ζ_2 \), lopende maandnummer \( γ_3 \), rekenjaarnummer \( ξ_3 \), rekenmaandnummer \( μ_3 \), lopende dagnummer \( c_4'(ξ_3,μ_3) \) van de eerste dag van die maand, en dagnummer-in-de-maand \( ζ_3 \). Het uiteindelijke rekenjaarnummer is dan

    \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.

  6. Reken om van rekenjaar \( x_1 \), rekenmaand \( x_3 \) en rekendag \( z_4 \) naar kalenderjaar \( j \), kalendermaand \( m \) en kalenderdag \( d \):

    \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

13.7. Een maankalender met veel vaste maandlengtes

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:

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.

13.8. De Islamitische kalender

13.8.1. Van Islamitische datum naar CJDN

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 //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.

13.8.2. Van CJDN naar Islamitische datum

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.

13.9. De Mayakalender

13.9.1. Tussen CJDN en Mayakalender

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.

13.9.2. De Haab

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*}

13.9.3. De Tzolkin

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 \).

13.9.4. Tzolkin en Haab

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.

13.9.5. De Lange Telling

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 \).

13.10. Algoritme met een kromme lijn

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.

14. Geldigheid van de algoritmen in computerprogramma's

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 "CJDNGregoriaans (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
CJDNGregoriaans (1) 4 8192 536 × 106 2305 × 1015 22 1469872 6313 × 1012 3 146097 438294 2
CJDNGregoriaans (2) 400 81 5 × 106 23 × 1015 0 14698 63 × 1012 799 146097 58293502 4
CJDNGregoriaans (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 "CJDNGregoriaans (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).

15. Algemene algoritmen voor omrekening tussen kalenderdatum en doorlopend dagnummer

15.1. Van kalenderdatum naar doorlopend dagnummer

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 = xy*⌊x/y.

Hier is het algoritme:

functie KAL2DAG(datum, q, g, b, d, h, s)
 voor j van 0 tot en met t − 1:
  zet y[j] gelijk aan datum[0,j]
  voor i van 0 tot en met n − 1:
   als MOD(b[i],2) = 1 dan:
    zet z[j] gelijk aan y[j]
    zet x[j] gelijk aan datum[i+1,j]
   anders:
    zet z[j] gelijk aan datum[i+1,j]
    zet x[j] gelijk aan y[j]
  zet c[j] gelijk aan q[i]*x[j]
  voor k van 0 tot en met m − 1:
   zet c[j] gelijk aan c[j] + MOD(h[i][k]*x[k,j] + s[i][k],g[i])*d[i][k]
  zet y[j] gelijk aan c[j] + z[j]
 geef terug y
eind functie

15.2. Van doorlopend dagnummer naar kalenderdatum

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.

functie DAG2KAL(dag, q, g, b, d, h, s)
 voor i van 0 tot en met n − 1:
  zet dp[i] gelijk aan 0
  zet s2[i] gelijk aan 0
  zet f[i] gelijk aan q[i]*g[i]
  voor k van 0 tot en met m − 1:
   zet f[i] gelijk aan f[i] + d[i][k]*h[i][k]
   als d[i][k] gt 0 dan:
    zet dp[i] gelijk aan dp[i] + d[i][k]
   zet s2[i] gelijk aan d[i][k]*s[i][k]
  zet s2[i] gelijk aan g[i]*dp[i] − s2[i] − 1
  zet zz[i] gelijk aan q[i] + dp[i]
 voor j van 0 tot en met t − 1:
  zet y[j] gelijk aan dag[j]
  voor i van n − 1 tot en met 0:
   zet x[j] gelijk aan DIV(g[i]*y[j] + s2[i],f[i])
   zet c[j] gelijk aan q[i]*x[j]
   voor k van 0 tot en met m − 1:
    zet c[j] gelijk aan c[j] + DIV(h[i][k]*x[j] + s[i][k],g[i])*d[i,k]
   zet z[j] gelijk aan y[j] − c[j]
  als b[i] gt 2 dan:
   zolang z[j] lt 0:
    zet x[j] gelijk aan x[j] + DIV(z[j],zz[i])
    zet c[j] gelijk aan q[i]*x[j]
    voor k van 0 tot en met m − 1:
     zet c[j] gelijk aan c[j] + DIV(h[i][k]*x[j] + s[i][k],g[i])*d[i,k]
    zet z[j] gelijk aan y[j] − c[j]
  als MOD(b[i],2) = 1 dan:
   zet y[j] = z[j]
   zet datum[i + 1,j] = x[j]
  anders:
   zet datum[i + 1,j] = z[j]
   zet y[j] = x[j]
 zet datum[0,j] = y[j]
 geef terug datum
eind functie

15.3. Parameters voor verschillende kalenders

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) dm*j*
Juliaans (2) jmd
Gregoriaans (1) dm*j*e*
Gregoriaans (2) dm*j*
Gregoriaans (3) jmd
Babylonisch (1) jmd
Babylonisch (2) dmj
Islamitisch dmj

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)
J1721117.5 1721057.5 1721119.5 1721119.5 1721059.5 1607557.6 1607557.5 1948440
q₁, g₁, b30, 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, s1, 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₂, b365, 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, s1, 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

15.4. Juliaanse kalender

Als je bovenstaande functies wilt gebruiken voor de Juliaanse (1) kalender, dan moet je de volgende functieargumenten gebruiken:

  1. q = [30, 365]
  2. g = [5, 4]
  3. b = [1, 1]
  4. d = [1, 1]
  5. h = [3, 1]
  6. 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)
  zet q gelijk aan [ [ 1461, 4, 0 ], [ 153, 5, 4 ] ]
  voor i van 0 tot en met n−1:
    zet x[1,i] gelijk aan x[1,i] − 3
    zet x[2,i] gelijk aan x[2,i] − 1
    als x[1,i] kleiner is dan 0:
      zet x[1,i] gelijk aan x[1,i] + 12
      zet x[0,i] gelijk aan x[0,i] − 1
  zet d gelijk aan KAL2DAG(x,q)
  voor j van 0 tot en met t−1:
    zet y[j] gelijk aan y[j] + 1721118
  geef terug y
eind functie

Pseudocode om Gregoriaanse kalenderdata c (jaar, maand, dag; met februari = maand 2) om te rekenen naar het CJDN is dan:

functie GREG2CJDN(x)
  zet q gelijk aan [ [ 146097, 4, 0 ], [ 36525, 100, 0 ], [ 153, 5, 4 ] ]
  voor i van 0 tot en met n−1:
    zet x[1,i] gelijk aan x[1,i] − 3
    als x[1,i] kleiner is dan 0:
      zet x[1,i] gelijk aan x[1,i] + 12
      zet x[0,i] gelijk aan x[0,i] − 1
    zet b[0,i] gelijk aan DIV[x[0,i],100]
    zet b[1,i] gelijk aan x[0,i] − 100*b[0,i]
    zet b[2,i] gelijk aan x[1,i]
    zet b[3,i] gelijk aan x[2,i] − 1
  zet d gelijk aan KAL2DAG(b,q)
  voor j van 0 tot en met t−1:
    zet y[j] gelijk aan y[j] + 1721120
  geef terug y
eind functie

Pseudocode om CJDN y om te rekenen naar Juliaanse kalenderdata is dan:

functie CJDN2JUL(y)
  zet q gelijk aan [ [ 1461, 4, 0 ], [ 153, 5, 4 ] ]
  voor j van 0 tot en met t−1:
    zet y[j] gelijk aan y[j] − 1721118
  zet c gelijk aan DAG2KAL(y,q)
  voor i van 0 tot en met n−1:
    zet x[1,i] gelijk aan x[1,i] + 3
    zet x[2,i] gelijk aan x[2,i] + 1
    als x[1,i] groter is dan 12:
      zet x[1,i] gelijk aan x[1,i] − 12
      zet x[0,i] gelijk aan x[0,i] + 1
  geef terug x
eind functie

Pseudocode om CJDN y om te rekenen naar Gregoriaanse kalenderdata is dan:

functie CJDN2GREG(y)
  zet q gelijk aan [ [ 146097, 4, 0 ], [ 36525, 100, 0 ], [ 153, 5, 4 ] ]
  voor j van 0 tot en met t−1:
    zet y[j] gelijk aan y[j] − 1721120
  zet b gelijk aan DAG2KAL(y,q)
  voor i van 0 tot en met n−1:
    zet x[0,i] gelijk aan 100*b[0,i] + b[1,i]
    zet x[1,i] gelijk aan b[2,i] + 3
    zet x[2,i] gelijk aan b[3,i] + 1
    als x[1,i] groter is dan 12:
      zet x[1,i] gelijk aan x[1,i] − 12
      zet x[0,i] gelijk aan x[0,i] + 1
  geef terug x
eind functie

16. Snelle schatting van het aantal dagen tussen twee datums

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.



[AA]

talen: [en] [nl]

//aa.quae.nl/nl/reken/juliaansedag.html;
Laatst vernieuwd: 2017-09-19