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.3.1. Van maand en dagnummer in de maand naar lopende dagnummer ... 12.3.2. Maandlengte ... 12.3.3. Maandpatroon verschuiven ... 12.3.4. Van lopende dagnummer naar maand en dagnummer in de maand ... 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.10.4.1. De laatste op of voor ... 12.10.4.2. De eerste op of na ... 12.10.4.3. de laatste voor ... 12.10.4.4. De eerste na ... 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.2. Van CJDN naar Joodse datum ... 13.7. Een maankalender met veel vaste maandlengtes ... 13.7.1. Van maankalender naar CJDN ... 13.7.2. Van CJDN naar maankalender ... 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

\(\def\|{&}\DeclareMathOperator{\D}{\bigtriangleup\!} \DeclareMathOperator{\d}{\text{d}\!}\)

\( \DeclareMathOperator{\trunc}{trunc} \DeclareMathOperator{\Div}{div} \DeclareMathOperator{\gcd}{gcd} \DeclareMathOperator{\lcm}{lcm} \DeclareMathOperator{\bdom}{dom} \def\dfloor#1{\left\lfloor #1 \right\rfloor} \def\dceil#1{\left\lceil #1 \right\rceil} \def\dparen#1{\left( #1 \right)} \def\dmod#1#2{\left\lfloor #1 \right\rceil_{#2}} \def\ddom#1#2{\left\lceil #1 \right\rfloor_{#2}} \def\dabs#1{\left| #1 \right|} \def\dfloorratio#1#2{\dfloor{\dfrac{#1}{#2}}} \def\dceilratio#1#2{\dceil{\dfrac{#1}{#2}}} \def\mod1ratio#1#2{\left\lfloor \dfrac{#1}{#2} \right\rceil_1} \def\dom1ratio#1#2{\left\lceil \dfrac{#1}{#2} \right\rfloor_1} \def\eqvide#1{\qquad\text{(vide \eqref{#1})}} \def\eqavide#1{\|\text{(vide \eqref{#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 \| = \dfloorratio{y}{x} \\ r \| = y \bmod x = y − x\dfloorratio{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} = \dfloorratio{y}{x} + \left( \frac{y}{x} \bmod 1 \right) = \dfloorratio{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 \| = \dfloorratio{m − 3}{12} \\ x_4 \| = j + c_0 \\ \{x_3, x_2\} \| = \Div(x_4, 100) \\ x_1 \| = m − 12c_0 − 3 \\ J \| = \dfloorratio{146097x_3}{4} + \dfloorratio{36525x_2}{100} + \dfloorratio{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 \| = \dfloorratio{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 \| = \dfloorratio{146097×20}{4} + \dfloorratio{36525×10}{100} + \dfloorratio{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\dfloorratio{r_3}{4} + 99, 36525 \right) \\ \{x_1, r_1\} \| = \Div\left( 5\dfloorratio{r_2}{100} + 2, 153 \right) \\ d \| = \dfloorratio{r_1}{5} + 1 \\ c_0 \| = \dfloorratio{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 \| = \dfloorratio{2926831}{146097} = 20 \\ k_2 \| = 100\dfloorratio{2926831 \bmod 146097}{4} + 99 = 100\dfloorratio{4891}{4} + 99 = 100×1222 + 99 = 122299 \\ x_2 \| = \dfloorratio{122299}{36525} = 3 \\ k_1 \| = 5\dfloorratio{122299 \bmod 36525}{100} + 2 = 5×\dfloorratio{12724}{100} + 2 = 5×127 + 2 = 637 \\ x_1 \| = \dfloorratio{k_1}{153} = \dfloorratio{637}{153} = 4 \\ c_0 \| = \dfloorratio{4 + 2}{12} = 0 \\ j \| = 100×20 + 3 + 0 = 2003 \\ m \| = 4 − 12×0 + 3 = 7 \\ d \| = \dfloorratio{637 \bmod 153}{5} + 1 = \dfloorratio{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 \| = \dfloorratio{m − 3}{12} \\ x_4 \| = j + c_0 \\ x_3 \| = \dfloorratio{x_4}{100} \\ x_2 \| = x_4 \bmod 100 \\ x_1 \| = m − 12c_0 − 3 \\ J \| = \dfloorratio{328718x_3 + 6}{9} + \dfloorratio{36525x_2}{100} + \dfloorratio{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 \| = \dfloorratio{k_3}{328718} \\ k_2 \| = 100\dfloorratio{k_3 \bmod 328718}{9} + 99 \\ x_2 \| = \dfloorratio{k_2}{36525} \\ x_1 \| = \dfloorratio{5\dfloorratio{k_2 \bmod 36525}{100} + 2}{153} \\ c_0 \| = \dfloorratio{x_1 + 2}{12} \\ j \| = 100x_3 + x_2 + c_0 \\ m \| = x_1 − 12c_0 + 3 \\ d \| = \dfloorratio{k_1 \bmod 153}{5} + 1 \end{align}

5. De Juliaanse kalender

Zie hoofdstuk 13.1.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 \| = \dfloorratio{m − 3}{12} \\ J_1 \| = \dfloorratio{1461×(j + c_0)}{4} \\ J_2 \| = \dfloorratio{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 \| = \dfloorratio{9 − 3}{12} = 0 \\ J_1 \| = \dfloorratio{1461×(2010 + 0)}{4} = 734152 \\ J_2 \| = \dfloorratio{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\dfloorratio{k_2 \bmod 1461}{4} + 2 \\ x_1 \| = \dfloorratio{k_1}{153} \\ c_0 \| = \dfloorratio{x_1 + 2}{12} \\ j \| = \dfloorratio{k_2}{1461} + c_0 \\ m \| = x_1 − 12c_0 + 3 \\ d \| = \dfloorratio{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\dfloorratio{2923103 \bmod 1461}{4} + 2 = 5\dfloorratio{1103}{4} + 2 = 5×275 + 2 = 1377 \\ x_1 \| = \dfloorratio{1377}{153} = 9 \\ c_0 \| = \dfloorratio{9 + 2}{12} = \dfloorratio{11}{12} = 0 \\ j \| = \dfloorratio{2923103}{1461} + 0 = 2000 + 0 = 2000 \\ m \| = 9 − 12×0 + 3 = 12 \\ d \| = \dfloorratio{1377 \bmod 153}{5} + 1 = \dfloorratio{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 = \dfloorratio{10631j − 10617}{30} + \dfloorratio{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 \| = \dfloorratio{10631×1432 − 10617}{30} + \dfloorratio{325×8 − 320}{11} + 29 + 1948440 \\ \| = \dfloorratio{15212975}{30} + \dfloorratio{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 \| = \dfloorratio{10631×1 − 10617}{30} + \dfloorratio{325×1 − 320}{11} + 1 + 1948439 \\ \| = \dfloorratio{14}{30} + \dfloorratio{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\dfloorratio{k_2 \bmod 10631}{30} + 5 \\ j \| = \dfloorratio{k_2}{10631} + 1 \\ m \| = \dfloorratio{k_1}{325} + 1 \\ d \| = \dfloorratio{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×\dfloorratio{15220035 \bmod 10631}{30} + 5 = 11×\dfloorratio{7074}{30} + 5 = 11×235 + 5 = 2590 \\ j \| = \dfloorratio{15220035}{10631} + 1 = 1431 + 1 = 1432 \\ m \| = \dfloorratio{2590}{325} + 1 = 7 + 1 = 8 \\ d \| = \dfloorratio{2590 \bmod 325}{11} + 1 = \dfloorratio{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 \| = \dfloorratio{235j − 241}{19} + m \\ J \| = \dfloorratio{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 \| = \dfloorratio{235×2 + 13}{19} = \dfloorratio{483}{19} = 25 \\ x_2 \| = y_1 = 25 + 8 = 33 \\ c_2 \| = \dfloorratio{6940×33}{235} = \dfloorratio{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\dfloorratio{k_2}{6940} + 5 \\ j \| = \dfloorratio{k_1}{235} + 1 \\ m \| = \dfloorratio{k_1 \bmod 235}{19} + 1 \\ d \| = \dfloorratio{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×\dfloorratio{235234}{6940} + 5 = 19×33 + 5 = 632 \\ j \| = \dfloorratio{632}{235} + 1 = 3 \\ m \| = \dfloorratio{632 \bmod 235}{19} + 1 = \dfloorratio{162}{19} + 1 = 9 \\ d \| = \dfloorratio{235234 \bmod 6940}{235} + 1 = \dfloorratio{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 \| = \dfloorratio{13 − m}{7} \\ x_1 \| = j − 1 + c_0 \\ x_3 \| = m − 1 \\ z_4 \| = d − 1 \\ c_1(x_1) \| = \dfloorratio{235x_1 + 1}{19} \\ q(x_1) \| = \dfloorratio{c_1(x_1)}{1095} \\ r(x_1) \| = c_1(x_1) \bmod 1095 \\ υ_1(x_1) \| = 32336q(x_1) + \dfloorratio{15q(x_1) + 765433r(x_1) + 12084}{25920} \\ υ_2(x_1) \| = υ_1(x_1) + \left(\dfloorratio{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(\dfloorratio{L_2(x_1) + 19}{15} \bmod 2\right) \\ v_4 \| = \dfloorratio{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 \| = \dfloorratio{L + 7}{2} \bmod 15 \\ c_9 \| = −\left( \dfloorratio{385 − L}{2} \bmod 15 \right) \\ c_3 \| = \dfloorratio{384x_3 + 7}{13} + c_8\dfloorratio{x_3 + 4}{12} + c_9\dfloorratio{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 \| = \dfloorratio{13 − m}{7} \\ \| = \dfloorratio{13 − 3}{7} \\ \| = \dfloorratio{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) = \dfloorratio{235×(x_1 − 1) + 1}{19} \\ \| = \dfloorratio{235×4681 + 1}{19} \\ \| = \dfloorratio{1100036}{19} = 57896 \\ c_1(4682) \| = c_1(x_1) = \dfloorratio{235×x_1 + 1}{19} \\ \| = \dfloorratio{235×4682 + 1}{19} \\ \| = \dfloorratio{1100270 + 1}{19} \\ \| = \dfloorratio{1100271}{19} = 57909 \\ c_1(4683) \| = c_1(x_1 + 1) = \dfloorratio{235×(x_1 + 1) + 1}{19} \\ \| = \dfloorratio{235×4683 + 1}{19} \\ \| = \dfloorratio{1100506}{19} = 57921 \\ c_1(4684) \| = c_1(x_1 + 2) = \dfloorratio{235×(x_1 + 2) + 1}{19} \\ \| = \dfloorratio{235×4684 + 1}{19} \\ \| = \dfloorratio{1100741}{19} = 57933 \\ q(4681) \| = q(x_1 − 1) = \dfloorratio{c_1(x_1 − 1)}{1095} \\ \| = \dfloorratio{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) \\ \| + \dfloorratio{15×q(x_1 − 1) + 765433×r(x_1 − 1) + 12084}{25920} \\ \| = 32336×52 + \dfloorratio{15×52 + 765433×956 + 12084}{25920} \\ \| = 1681472 + \dfloorratio{731766812}{25920} \\ \| = 1681472 + 28231 = 1709703 \\ υ_2(4681) \| = υ_2(x_1 − 1) = υ_1(x_1 − 1) + \left( \dfloorratio{6×(υ_1(x_1 − 1) \bmod 7)}{7} \bmod 2\right) \\ \| = 1709703 + \left( \dfloorratio{6×(1709703 \bmod 7)}{7} \bmod 2 \right) \\ \| = 1709703 + \left( \dfloorratio{6×2}{7} \bmod 2 \right) \\ \| = 1709703 + \left( \dfloorratio{12}{7} \bmod 2 \right) \\ \| = 1709703 + (1 \bmod 2) = 1709703 + 1 = 1709704 \\ q(4682) \| = q(x_1) = \dfloorratio{c_1(x_1)}{1095} \\ \| = \dfloorratio{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) \\ \| + \dfloorratio{15×q(x_1) + 765433×r(x_1) + 12084}{25920} \\ \| = 32336×52 + \dfloorratio{15×52 + 765433×969 + 12084}{25920} \\ \| = 1681472 + \dfloorratio{741717441}{25920} \\ \| = 1681472 + 28615 = 1710087 \\ υ_2(4682) \| = υ_2(x_1) = υ_1(x_1) + \left( \dfloorratio{6×(υ_1(x_1) \bmod 7)}{7} \bmod 2 \right) \\ \| = 1710087 + \left( \dfloorratio{6×(1710087 \bmod 7)}{7} \bmod 2 \right) \\ \| = 1710087 + \left( \dfloorratio{1}{7} \bmod 2 \right) = 1710087 + (0 \bmod 2) \\ \| = 1710087 + 0 = 1710087 \\ q(4683) \| = q(x_1 + 1) = \dfloorratio{c_1(x_1 + 1)}{1095} \\ \| = \dfloorratio{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) \\ \| + \dfloorratio{15×q(x_1 + 1) + 765433×r(x_1 + 1) + 12084}{25920} \\ \| = 332336×52 + \dfloorratio{15×52 + 765433×981 + 12084}{25920} \\ \| = 17281472 + \dfloorratio{750902637}{25920} \\ \| = 17281472 + 28970 = 17310442 \\ υ_2(4683) \| = υ_2(x_1 + 1) = υ_1(x_1 + 1) \\ \| + \left( \dfloorratio{6×(υ_1(x_1 + 1) \bmod 7}){7} \bmod 2 \right) \\ \| = 1710442 + \left( \dfloorratio{6×(1710442 \bmod 7)}{7} \bmod 2 \right) \\ \| = 1710442 + \left( \dfloorratio{6×6}{7} \bmod 2 \right) \\ \| = 1710442 + \left( \dfloorratio{36}{7} \bmod 2 \right) \\ \| = 1710442 + (5 \bmod 2) = 1710442 + 1 = 1710443 \\ q(4684) \| = q(x_1 + 2) = \dfloorratio{c_1(x_1 + 2)}{1095} \\ \| = \dfloorratio{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) \\ \| + \dfloorratio{15×q(x_1 + 2) + 765433×r(x_1 + 2) + 12084}{25920} \\ \| = 32336×52 + \dfloorratio{15×52 + 765433×993 + 12084}{25920} \\ \| = 1681472 + \dfloorratio{760087833}{25920} \\ \| = 1681472 + 29324 = 1710796 \\ υ_2(4684) \| = υ_2(x_1 + 2) = υ_1(x_1 + 2) + \left( \dfloorratio{6×(υ_1(x_1 + 2) \bmod 7)}{7} \bmod 2 \right) \\ \| = 1710796 + \left( \dfloorratio{6×(1710796 \bmod 7)}{7} \bmod 2 \right) \\ \| = 1710796 + \left( \dfloorratio{6×3}{7} \bmod 2 \right) \\ \| = 1710796 + \left( \dfloorratio{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( \dfloorratio{L_2(x_1) + 19}{15} \bmod 2 \right) \\ \| = 2×\left( \dfloorratio{356 + 19}{15} \bmod 2 \right) \\ \| = 2×\left( \dfloorratio{375}{15} \bmod 2 \right) \\ \| = 2×(25 \bmod 2) = 2 \\ v_4(4682) \| = v_4(x_1) = \dfloorratio{L_2(x_1 − 1) + 7}{15} \bmod 2 \\ \| = \dfloorratio{383 + 7}{15} \bmod 2 \\ \| = \dfloorratio{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( \dfloorratio{L_2(x_1 + 1) + 19}{15} \bmod 2 \right) \\ \| = 2×\left( \dfloorratio{353 + 19}{15} \bmod 2 \right) \\ \| = 2×\left( \dfloorratio{372}{15} \bmod 2 \right) \\ \| = 2×(24 \bmod 2) = 0 \\ v_4(4683) \| = v_4(x_1 + 1) = \dfloorratio{L_2(x_1) + 7}{15} \bmod 2 \\ \| = \dfloorratio{356 + 7}{15} \bmod 2 \\ \| = \dfloorratio{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 \| = \dfloorratio{L + 7}{2} \bmod 15 \\ \| = \dfloorratio{354 + 7}{2} \bmod 15 \\ \| = \dfloorratio{361}{2} \bmod 15 = 180 \bmod 15 = 0 \\ c_9 \| = −\left( \dfloorratio{385 − L}{2} \bmod 15 \right) \\ \| = −\left( \dfloorratio{385 − 354}{2} \bmod 15 \right) \\ \| = −\left( \dfloorratio{31}{2} \bmod 15 \right) \\ \| = −(15 \bmod 15) = 0 \\ c_3 \| = \dfloorratio{384×x_3 + 7}{13} + c_8×\dfloorratio{x_3 + 4}{12} + c_9×\dfloorratio{x_3 + 3}{12} \\ \| = \dfloorratio{384×2 + 7}{13} + 0×\dfloorratio{2 + 4}{12} + 0×\dfloorratio{2 + 3}{12} \\ \| = \dfloorratio{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 \| = \dfloorratio{y_4}{1447} \\ r \| = y_4 \bmod 1447 \\ y_1' \| = 49q + \dfloorratio{23q + 25920r + 13835}{765433} \\ γ_1 \| = y_1' + 1 \\ ξ_1 \| = \dfloorratio{19γ_1 + 17}{235} \\ μ_1 \| = γ_1 − \dfloorratio{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 + \dfloorratio{ζ_1}{33} \\ ξ_2 \| = \dfloorratio{19γ_2 + 17}{235} \\ μ_2 \| = γ_2 − \dfloorratio{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 + \dfloorratio{ζ_1}{33} \\ x_1 \| = ξ_3 = \dfloorratio{19γ_3 + 17}{235} \\ x_3 \| = μ_3 = γ_3 − \dfloorratio{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 \| = \dfloorratio{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 \| = \dfloorratio{y_4}{1447} = \dfloorratio{1710165}{1447} = 1181 \\ r \| = y_4 \bmod 1447 = 1710165 \bmod 1447 = 1258 \\ y_1' \| = 49q + \dfloorratio{23q + 25920r + 13835}{765433} \\ \| = 49×1181 + \dfloorratio{23×1181 + 25920×1258 + 13835}{765433} \\ \| = 57869 + \dfloorratio{32648358}{765433} = 57869 + 42 = 57911 \\ γ_1 \| = y_1' + 1 = 57911 + 1 = 57912 \\ ξ_1 \| = \dfloorratio{19γ_1 + 17}{235} \\ \| = \dfloorratio{19×57912 + 17}{235} \\ \| = \dfloorratio{1100345}{235} = 4682 \\ μ_1 \| = γ_1 − \dfloorratio{235ξ_1 + 1}{19} \\ \| = 57912 − \dfloorratio{235×4682 + 1}{19} \\ \| = 57912 − \dfloorratio{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 + \dfloorratio{ζ_1}{33} = 57912 + \dfloorratio{−13}{33} = 57912 + −1 = 57911 \\ ξ_2 \| = \dfloorratio{19γ_2 + 17}{235} = \dfloorratio{19×57911 + 17}{235} = \dfloorratio{1100326}{235} = 4682 \\ μ_2 \| = γ_2 − \dfloorratio{235ξ_2 + 1}{19} = 57911 − \dfloorratio{235×4682 + 1}{19} \\ \| = 57911 − \dfloorratio{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 + \dfloorratio{ζ_2}{33} = 57911 + \dfloorratio{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 = \dfloorratio{19γ_3 + 17}{235} = \dfloorratio{19×57911 + 17}{235} = \dfloorratio{1100326}{235} = 4682 \\ x_3 \| = μ_3 = γ_3 − \dfloorratio{235ξ_3 + 1}{19} = 57911 − \dfloorratio{235×4682 + 1}{19} \\ \| = 57911 − \dfloorratio{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 \| = \dfloorratio{12 − x_3}{7} = \dfloorratio{12 − 2}{7} = \dfloorratio{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 \| = \dfloorratio{y_2}{365} \\ y_1 \| = y_2 \bmod 365 \\ j \| = x_2 + 1 \\ m \| = \dfloorratio{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 \| = \dfloorratio{y_2}{365} = \dfloorratio{79331}{365} = 217 \\ y_1 \| = y_2 − 365x_2 = 79331 − 365×217 = 79331 − 79205 = 126 \\ j \| = x_2 + 1 = 217 + 1 = 218 \\ m \| = \dfloorratio{y_1}{30} + 1 = \dfloorratio{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 \| = \dfloorratio{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 \| = \dfloorratio{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 \| = \dfloorratio{x_5}{144000} \\ x_4 \| = x_5 \bmod 144000 \\ l_4 \| = \dfloorratio{x_4}{7200} \\ x_3 \| = x_4 \bmod 7200 \\ l_3 \| = \dfloorratio{x_3}{360} \\ x_2 \| = x_3 \bmod 360 \\ l_2 \| = \dfloorratio{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 \| = \dfloorratio{1854827}{144000} = 12 \\ x_4 \| = 1854827 \bmod 144000 = 126827 \\ l_4 \| = \dfloorratio{126827}{7200} = 17 \\ x_3 \| = 126827 \bmod 7200 = 4427 \\ l_3 \| = \dfloorratio{4427}{360} = 12 \\ x_2 \| = 4427 \bmod 360 = 107 \\ l_2 \| = \dfloorratio{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\dfloorratio{7j − 6}{19} + \dfloorratio{4j + 8}{19} + \dfloorratio{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\dfloorratio{7×3 − 6}{19} + \dfloorratio{4×3 + 8}{19} + \dfloorratio{7×9}{13} + 27 − 384 \\ \| = 1323 + 30\dfloorratio{15}{19} + \dfloorratio{20}{19} + \dfloorratio{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' \| = \dfloorratio{19y_2 + 546}{6940} \\ x_2 \| = x' + \dfloorratio{y_2 − 354x' − 30\dfloorratio{7x' + 1}{19} − \dfloorratio{4x' + 12}{19}}{385} \\ k_1 \| = 13×\left( y_2 − 354x_2 − 30\dfloorratio{7x_2 + 1}{19} − \dfloorratio{4x_2 + 12}{19} \right) + 5 \\ j \| = x_2 + 1 \\ m \| = \dfloorratio{k_1}{384} + 1 \\ d \| = \dfloorratio{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' \| = \dfloorratio{19×971 + 546}{6940} = \dfloorratio{18995}{6940} = 2 \\ x_2 \| = 2 + \dfloorratio{971 − 354×2 − 30 \dfloorratio{7×2 + 1}{19} − \dfloorratio{4×2 + 12}{19}}{385} \\ \| = 2 + \dfloorratio{263 − 30 \dfloorratio{15}{19} − \dfloorratio{20}{19}}{385} \\ \| = 2 + \dfloorratio{263 − 0 − 1}{385} = 2 \\ k_1 \| = 13×\left( 971 − 354×2 − 30\dfloorratio{7×2 + 1}{19} − \dfloorratio{4×2 + 12}{19} \right) + 9 \\ \| = 13×\left( 263 − 30\dfloorratio{15}{19} − \dfloorratio{20}{19} \right) + 9 \\ \| = 13×(263 − 0 − 1) + 5 = 3411 \\ j \| = 2 + 1 = 3 \\ m \| = \dfloorratio{3411}{384} + 1 = 9 \\ d \| = \dfloorratio{3411 \bmod 384}{13} + 1 = \dfloorratio{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 tak éé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.

Een paar handige relaties (voor \( p \gt 0 \)):

  1. \begin{equation} \dceil{\dceil{x}} = \dfloor{\dceil{x}} = \dceil{x}\end{equation}
  2. \begin{equation} \dfloor{\dfloor{x}} = \dceil{\dfloor{x}} = \dfloor{x} \end{equation}
  3. \begin{equation} \dmod{\dmod{x}{p}}{p} = \ddom{\dmod{x}{p}}{p} = \dmod{x}{p} \label{eq:modmod} \end{equation}
  4. \begin{equation} \ddom{\ddom{x}{p}}{p} = \dmod{\ddom{x}{p}}{p} = \ddom{x}{p} \label{eq:domdom} \end{equation}
  5. \begin{equation} \dmod{x ± y}{p} = \dmod{\dmod{x}{p} ± \dmod{y}{p}}{p} \label{eq:dmod2} \end{equation}
  6. \begin{equation} \ddom{x ± y}{p} = \ddom{\ddom{x}{p} ± \ddom{y}{p}}{p} \label{eq:ddom2} \end{equation}
  7. \begin{equation} \dceil{x} − \dfloor{x} = C(x⊥1) \label{eq:ceilfloor} \end{equation}
  8. \begin{equation} \dmod{x}{p} + \ddom{x}{p} = pC(x⊥p) \end{equation}
  9. \begin{equation} \dfloor{−x} = −\dceil{x} = −\dfloor{x} − C(x⊥1) \label{eq:minusfloor} \end{equation}
  10. \begin{equation} \dceil{−x} = −\dfloor{x} = −\dceil{x} + C(x⊥1) \label{eq:minusceil} \end{equation}
  11. \begin{equation} \dmod{−x}{p} = \ddom{x}{p} = −\dmod{x}{p} + pC(x⊥p) \label{eq:minusmod} \end{equation}
  12. \begin{equation} \ddom{−x}{p} = \dmod{x}{p} = −\ddom{x}{p} + pC(x⊥p) \label{eq:minusdom} \end{equation}
  13. \begin{equation} \dfloor{x + y} = \dfloor{x} + \dfloor{y} + C\dparen{\dmod{x}{1} + \dmod{y}{1} ≥ 1} \label{eq:splitfloor} \end{equation}
  14. \begin{equation} \dfloor{x − y} = \dfloor{x} − \dfloor{y} − C\dparen{\dmod{x}{1} − \dmod{y}{1} \lt 0} \label{eq:floorm} \end{equation}
  15. \begin{equation} \dmod{x + y}{p} = \dmod{x}{p} + \dmod{y}{p} − pC\dparen{\dmod{x}{p} + \dmod{y}{p} ≥ p} \label{eq:modp} \end{equation}
  16. \begin{equation} \dmod{x − y}{p} = \dmod{x}{p} − \dmod{y}{p} + pC\dparen{\dmod{x}{p} − \dmod{y}{p} \lt 0} \end{equation}
  17. \begin{equation} \dceil{x + y} = \dceil{x} + \dceil{y} − C\dparen{\dmod{x}{1} + \dmod{y}{1} ≥ 1} \end{equation}
  18. \begin{equation} \dceil{x − y} = \dceil{x} − \dceil{y} + C\dparen{\dmod{x}{1} − \dmod{y}{1} \lt 0} \end{equation}
  19. \begin{equation} \ddom{x + y}{p} = \ddom{x}{p} + \ddom{y}{p} − pC\dparen{\ddom{x}{p} + \ddom{y}{p} ≥ p} \label{eq:domp} \end{equation}
  20. \begin{equation} \ddom{x − y}{p} = \ddom{x}{p} − \ddom{y}{p} + pC\dparen{\ddom{x}{p} − \ddom{y}{p} \lt 0} \label{eq:domm} \end{equation}
  21. \begin{equation} n\dmod{x}{1} − \dmod{nx}{1} = \dfloor{n\dmod{x}{1}} \qquad{(n ∥ 1)} \label{eq:dmoddiff1} \end{equation}

  22. \begin{equation} x − y − 1 \lt \dfloor{x} − \dfloor{y} \lt x − y + 1 \label{eq:floordiffrange} \end{equation}
  23. \begin{equation} \dceil{x − y} − 1 \le \dfloor{x} − \dfloor{y} \le \dfloor{x − y} + 1 \label{eq:floordiffrange2} \end{equation}
  24. \begin{equation} x − y − 1 \lt \dceil{x} − \dceil{y} \lt x − y + 1 \label{eq:ceildiffrange} \end{equation}
  25. \begin{equation} \dceil{x − y} − 1 \le \dceil{x} − \dceil{y} \le \dfloor{x − y} + 1 \label{eq:ceildiffrange2} \end{equation}
  26. \begin{equation} \dceilratio{x}{y} = \dfloorratio{x − 1}{y} + 1 \qquad (x, y ∥ 1) \label{eq:ceil2floor} \end{equation}
  27. \begin{equation} \ddom{x}{y} = y − 1 − \dmod{x − 1}{y} \qquad (x, y ∥ 1) \label{eq:ddom2dmod} \end{equation}
  28. \begin{equation} \dfloor{\dmod{x}{y}} = \dmod{\dfloor{x}}{y} \qquad (y ∥ 1) \label{eq:modfloor} \end{equation}

En hun bewijzen:

  1. \( \dceil{\dceil{x}} = \dfloor{\dceil{x}} = \dceil{x}\) omdat \( \dceil{x} \) een heel getal is.
  2. \( \dfloor{\dfloor{x}} = \dceil{\dfloor{x}} = \dfloor{x} \) omdat \( \dfloor{x} \) een heel getal is.
  3. \( \dmod{\dmod{x}{p}}{p} = \ddom{\dmod{x}{p}}{p} = \dmod{x}{p} \) omdat \( 0 \le \dmod{x}{p} \lt p \).
  4. \( \ddom{\ddom{x}{p}}{p} = \dmod{\ddom{x}{p}}{p} = \ddom{x}{p} \) omdat \( 0 \le \ddom{x}{p} \lt p \).
  5. \( \dmod{x ± y}{p} = \dmod{\dmod{x}{p} ± \dmod{y}{p}}{p} \) want

    \begin{align} \dmod{x ± y}{p} \| = p\dmod{\dfrac{x ± y}{p}}{1} \notag \eqavide{eq:mod1top} \\ \| = p\dmod{\dfrac{p\dfloorratio{x}{p} + \dmod{x}{p} ± \dparen{p\dfloorratio{y}{p} + \dmod{y}{p}}}{p}}{1} \eqavide{eq:mod} \notag \\ \| = p\dmod{\dfloorratio{x}{p} ± \dfloorratio{y}{p} + \dfrac{\dmod{x}{p} ± \dmod{y}{p}}{p}}{1} \notag \\ \| = p\dmod{\dfrac{\dmod{x}{p} ± \dmod{y}{p}}{p}}{1} \eqavide{eq:modn} \notag \\ \| = \dmod{\dmod{x}{p} ± \dmod{y}{p}}{p} \eqavide{eq:mod1top} \end{align}

  6. \( \ddom{x ± y}{p} = \ddom{\ddom{x}{p} ± \ddom{y}{p}}{p} \) want

    \begin{align} \ddom{x ± y}{p} \| = p\ddom{\dfrac{x ± y}{p}}{1} \notag \eqavide{eq:dom1top} \\ \| = p\ddom{\dfrac{p\dceilratio{x}{p} − \ddom{x}{p} ± \dparen{p\dceilratio{y}{p} − \ddom{y}{p}}}{p}}{1} \eqavide{eq:dom} \notag \\ \| = p\ddom{\dceilratio{x}{p} ± \dceilratio{y}{p} − \dparen{\dfrac{\ddom{x}{p} ± \ddom{y}{p}}{p}}}{1} \notag \\ \| = p\ddom{−\dfrac{\ddom{x}{p} ± \ddom{y}{p}}{p}}{1} \eqavide{eq:domn} \label{eq:xpyp} \end{align}

    en dus ook

    \begin{align} \ddom{\ddom{x}{p} ± \ddom{y}{p}}{p} \| = p\ddom{−\dfrac{\ddom{\ddom{x}{p}}{p} ± \ddom{\ddom{y}{p}}{p}}{p}}{1} \eqavide{eq:xpyp} \notag \\ \| = p\ddom{−\dfrac{\ddom{x}{p} ± \ddom{y}{p}}{p}}{1} \eqavide{eq:domdom} \notag \\ \| = \ddom{x ± y}{p} \eqavide{eq:xpyp} \end{align}

  7. \( \dceil{x} − \dfloor{x} = C(x⊥1) \) want als \( x \) een heel getal is (dus \( x∥1 \)) dan zijn \( \dceil{x} \) en \( \dfloor{x} \) gelijk aan \( x \), en anders is het eerstvolgende hogere hele getal (\( \dceil{x} \)) eentje hoger dan het eerstvolgende lagere hele getal (\( \dfloor{x} \)).

  8. \( \dmod{x}{p} + \ddom{x}{p} = pC(x⊥p) \) want

    \begin{align} \dmod{x}{p} + \ddom{x}{p} \| = x − p\dfloorratio{x}{p} + p\dceilratio{x}{p} − x \| \text{(vide \eqref{eq:mod}, \eqref{eq:dom})} \notag \\ \| = p \dparen{\dceilratio{x}{p} − \dfloorratio{x}{p}} \notag \\ \| = p C\dparen{\dfrac{x}{p} ⊥ 1} \notag \eqavide{eq:ceilfloor} \\ \| = p C\dparen{x ⊥ p} \end{align}

  9. Voor \( \dfloor{−x} = −\dceil{x} = −\dfloor{x} − C(x⊥1) \) volgt de tweede \( = \) uit vergelijking \eqref{eq:ceilfloor}.

    De eerste \( = \) bewijzen we als volgt.

    \begin{align} \dfloor{−x} \| = \dfloor{−\dfloor{x} − \dmod{x}{1}} \eqavide{eq:mod} \notag \\ \| = −\dfloor{x} + \dfloor{−\dmod{x}{1}} \\ \dceil{x} \| = \dceil{\dfloor{x} + \ddom{x}{1}} \eqavide{eq:dom} \notag \\ \| = \dfloor{x} + \dceil{\ddom{x}{1}} \\ \dfloor{−x} + \dceil{x} \| = \dfloor{−\dmod{x}{1}} + \dceil{\ddom{x}{1}} \end{align}

    Als \( x \) een heel getal is dan is \( \dmod{x}{1} = \ddom{x}{1} = 0 \) dus \( \dfloor{−x} + \dceil{x} = 0 \).

    En als \( x \) geen heel getal is dan is

    \begin{equation} 0 \lt \dmod{x}{1} \lt 1 ⇒ \dceil{\dmod{x}{1}} = 1 \end{equation}

    en ook

    \begin{equation} −1 \lt −\dmod{x}{1} \lt 0 ⇒ \dfloor{−\dmod{x}{1}} = −1 \end{equation}

    dus ook dan is \( \dfloor{−x} + \dceil{x} = \dceil{\dmod{x}{1}} + \dfloor{−\dmod{x}{1}} = 0 \) en dus \( \dfloor{−x} = −\dceil{x} \).

  10. Voor \( \dceil{−x} = −\dfloor{x} = −\dceil{x} + C(x⊥1) \) volgt de tweede \( = \) volgt uit vergelijking \eqref{eq:ceilfloor}.

    De eerste \( = \) volgt uit vergelijking \eqref{eq:minusfloor} als je daarin overal \( x \) vervangt door \( −x \).

  11. Voor \( \dmod{−x}{p} = \ddom{x}{p} = −\dmod{x}{p} + pC(x⊥p) \) volgt de eerste \( = \) uit

    \begin{align} \dmod{−x}{p} \| = −x − p\dfloorratio{−x}{p} \eqavide{eq:mod} \notag \\ \| = p\dceilratio{x}{p} − x \eqavide{eq:minusfloor} \notag \\ \| = \ddom{x}{p} \eqavide{eq:dom} \end{align}

    en de tweede \( = \) uit

    \begin{align} \dmod{x}{p} \| = x − p\dfloorratio{x}{p} \notag \eqavide{eq:mod} \\ \| = x − p\dparen{\dceilratio{x}{p} − C\dparen{\dfrac{x}{p} ⊥ 1}} \notag \eqavide{eq:ceilfloor} \\ \| = x − p\dceilratio{x}{p} + pC\dparen{x ⊥ p} \notag \\ \| = −\ddom{x}{p} + pC\dparen{x ⊥ p} \eqavide{eq:dom} \end{align}

  12. \( \ddom{−x}{p} = \dmod{x}{p} = −\ddom{x}{p} + pC(x⊥p) \) volgt uit de vorige als je elke \( x \) vervangt door \( −x \).

  13. \( \dfloor{x + y} = \dfloor{x} + \dfloor{y} + C\dparen{\dmod{x}{1} + \dmod{y}{1} ≥ 1} \) want

    \begin{align} \dfloor{x ± y} \| = x ± y − \dmod{x ± y}{1} \eqavide{eq:mod} \notag \\ \| = \dfloor{x} + \dmod{x}{1} ± \dparen{\dfloor{y} + \dmod{y}{1}} − \dmod{x ± y}{1} \eqavide{eq:mod} \notag \\ \| = \dfloor{x} ± \dfloor{y} + \dmod{x}{1} ± \dmod{y}{1} − \dmod{x ± y}{1} \notag \\ \| = \dfloor{x} ± \dfloor{y} + \dmod{x}{1} ± \dmod{y}{1} − \dmod{\dmod{x}{1} ± \dmod{y}{1}}{1} \eqavide{eq:dmod2} \label{eq:floorpm} \end{align}

    Er geldt

    \begin{align} \dmod{\dmod{x}{1} + \dmod{y}{1}}{1} \| = \dmod{x}{1} + \dmod{y}{1} − C\dparen{\dmod{x}{1} + \dmod{y}{1} \ge 1} \\ \dmod{\dmod{x}{1} − \dmod{y}{1}}{1} \| = \dmod{x}{1} − \dmod{y}{1} + C\dparen{\dmod{x}{1} − \dmod{y}{1} \lt 0} \label{eq:mod1m} \end{align}

    want \( 0 \le \dmod{•}{1} \lt 1 \). Dus

    \begin{equation} \dfloor{x + y} = \dfloor{x} + \dfloor{y} + C\dparen{\dmod{x}{1} + \dmod{y}{1} \ge 1} \end{equation}

  14. \( \dfloor{x − y} = \dfloor{x} − \dfloor{y} + C\dparen{\dmod{x}{1} − \dmod{y}{1} \lt 0} \) volgt uit vergelijkingen \eqref{eq:floorpm} en \eqref{eq:mod1m}.
  15. \( \dmod{x + y}{p} = \dmod{x}{p} + \dmod{y}{p} − pC\dparen{\dmod{x}{p} + \dmod{y}{p} ≥ p} \) volgt uit

    \begin{align} \dmod{x ± y}{p} \| = x ± y − p\dfloorratio{x ± y}{p} \eqavide{eq:mod} \notag \\ \| = p\dfloorratio{x}{p} + \dmod{x}{p} ± \dparen{p\dfloorratio{y}{p} + \dmod{y}{p}} \notag \\ \| − p\dfloorratio{p\dfloorratio{x}{p} + \dmod{x}{p} ± \dparen{p\dfloorratio{y}{p} + \dmod{y}{p}}}{p} \notag \eqavide{eq:mod} \\ \| = p\dfloorratio{x}{p} + \dmod{x}{p} ± p\dfloorratio{y}{p} ± \dmod{y}{p} \notag \\ \| − p\dfloorratio{x}{p} ∓ p\dfloorratio{y}{p} − p\dfloorratio{\dmod{x}{p} ± \dmod{y}{p}}{p} \notag \\ \| = \dmod{x}{p} ± \dmod{y}{p} − p\dfloorratio{\dmod{x}{p} ± \dmod{y}{p}}{p} \label{eq:i15a} \end{align}

    Er geldt

    \begin{align} \dfloorratio{\dmod{x}{p} + \dmod{y}{p}}{p} \| = C\dparen{\dmod{x}{p} + \dmod{y}{p} \ge p} \label{eq:i15c} \\ \dfloorratio{\dmod{x}{p} − \dmod{y}{p}}{p} \| = −C\dparen{\dmod{x}{p} − \dmod{y}{p} \lt 0} \label{eq:i15b} \end{align}

    omdat \( 0 \le \dmod{•}{p} \lt p \), dus

    \begin{equation} \dmod{x}{p} + \dmod{y}{p} − p\dfloorratio{\dmod{x}{p} + \dmod{y}{p}}{p} = \dmod{x}{p} + \dmod{y}{p} − pC\dparen{\dmod{x}{p} + \dmod{y}{p} \ge p} \end{equation}

    en daarmee is het bewijs af.

  16. \( \dmod{x − y}{p} = \dmod{x}{p} − \dmod{y}{p} + pC\dparen{\dmod{x}{p} − \dmod{y}{p} \lt 0} \) volgt uit vergelijkingen \eqref{eq:i15a} en \eqref{eq:i15b}.
  17. \( \dceil{x + y} = \dceil{x} + \dceil{y} − C\dparen{\dmod{x}{1} + \dmod{y}{1} ≥ 1} \) want

    \begin{align} \dceil{x ± y} \| = x ± y + \ddom{x ± y}{p} \notag \eqavide{eq:dom} \\ \| = \dceil{x} − \ddom{x}{1} ± \dparen{\dceil{y} − \ddom{y}{1}} + \ddom{x ± y}{p} \notag \eqavide{eq:dom} \\ \| = \dceil{x} ± \dceil{y} − \ddom{x}{1} ∓ \ddom{y}{1} + \ddom{x ± y}{p} \label{eq:i17} \end{align}

    Dat levert

    \begin{align} \dceil{x + y} \| = \dceil{x} + \dceil{y} − \ddom{x}{1} − \ddom{y}{1} + \ddom{x + y}{p} \notag \\ \| = \dceil{x} + \dceil{y} − \ddom{x}{1} − \ddom{y}{1} + \ddom{x}{1} + \ddom{y}{1} − C\dparen{\ddom{x}{1} + \ddom{y}{1} ≥ 1} \eqavide{eq:domp} \notag \\ \| = \dceil{x} + \dceil{y} − C\dparen{\ddom{x}{1} + \ddom{y}{1} ≥ 1} \end{align}

  18. \( \dceil{x − y} = \dceil{x} − \dceil{y} + C\dparen{\dmod{x}{1} − \dmod{y}{1} \lt 0} \) want

    \begin{align} \dceil{x − y} \| = \dceil{x} − \dceil{y} − \ddom{x}{1} + \ddom{y}{1} + \ddom{x − y}{p} \notag \eqavide{eq:i17} \\ \| = \dceil{x} − \dceil{y} − \ddom{x}{1} + \ddom{y}{1} + \ddom{x}{1} − \ddom{y}{1} + C\dparen{\ddom{x}{1} − \ddom{y}{1} \lt 0} \eqavide{eq:modp} \notag \\ \| = \dceil{x} − \dceil{y} + C\dparen{\ddom{x}{1} − \ddom{y}{1} \lt 0} \end{align}

  19. \( \ddom{x + y}{p} = \ddom{x}{p} + \ddom{y}{p} − pC\dparen{\ddom{x}{p} + \ddom{y}{p} ≥ p} \) want

    \begin{align} \ddom{x ± y}{p} = \| p\dceilratio{x ± y}{p} − \dparen{x ± y} \notag \eqavide{eq:dom} \\ = \| p\dceilratio{p\dceilratio{x}{p} − \ddom{x}{p} ± \dparen{p\dceilratio{y}{p} − \ddom{y}{p}}}{p} \notag \\ \| − \dparen{p\dceilratio{x}{p} − \ddom{x}{p} ± \dparen{p\dceilratio{y}{p} − \ddom{y}{p}}} \notag \eqavide{eq:dom} \\ = \| p\dceilratio{x}{p} ± p\dceilratio{y}{p} + p\dceilratio{−\ddom{x}{p} ∓ \ddom{y}{p}}{p} \notag \\ \| − \dparen{p\dceilratio{x}{p} ± p\dceilratio{y}{p} − \dparen{\ddom{x}{p} ± \ddom{y}{p}}} \notag \\ = \| \ddom{x}{p} ± \ddom{y}{p} + p\dceilratio{−\ddom{x}{p} ∓ \ddom{y}{p}}{p} \label{eq:i19a} \end{align}

    Er geldt

    \begin{align} \dceilratio{−\ddom{x}{p} − \ddom{y}{p}}{p} \| = −C\dparen{\ddom{x}{p} + \ddom{y}{p} \ge p} \\ \dceilratio{−\ddom{x}{p} + \ddom{y}{p}}{p} \| = C\dparen{\ddom{x}{p} − \ddom{y}{p} \lt 0} \label{eq:i19b} \end{align}

    want \( 0 \le \ddom{•}{p} \lt 1 \), dus

    \begin{equation} \ddom{x}{p} + \ddom{y}{p} + p\dceilratio{\ddom{x}{p} + \ddom{y}{p}}{p} = \ddom{x}{p} + \ddom{y}{p} − pC\dparen{\ddom{x}{p} + \ddom{y}{p} \ge p} \end{equation}

    en daarmee is het bewijs af.

  20. \( \ddom{x − y}{p} = \ddom{x}{p} − \ddom{y}{p} + pC\dparen{\ddom{x}{p} − \ddom{y}{p} \lt 0} \) volgt uit vergelijkingen \eqref{eq:i19a} en \eqref{i19b}.

  21. \begin{eqnarray} n\dmod{x}{1} − \dmod{nx}{1} \| = \| n\dmod{x}{1} − \dmod{n\dfloor{x} + n\dmod{x}{1}}{1} \notag \\ \| = \| n\dmod{x}{1} − \dmod{n\dmod{x}{1}}{1} \qquad{(n ∥ 1)} \eqavide{eq:modp} \notag \\ \| = \| \dfloor{n\dmod{x}{1}} \eqavide{eq:mod} \end{eqnarray}
  22. \begin{align} \dfloor{x} − \dfloor{y} \| = \dparen{x − \dmod{x}{1}} − \dparen{y − \dmod{y}{1}} \notag \\ \| = x − y + \dmod{y}{1} − \dmod{x}{1} \end{align}

    Dan

    \begin{equation} x − y − 1 \lt \dfloor{x} − \dfloor{y} \lt x − y + 1 \end{equation}

    omdat

    \begin{equation} 0 \le \dmod{•}{1} \lt 1 \end{equation}

  23. \begin{equation} \dceil{x − y} − 1 \le \dfloor{x} − \dfloor{y} \le \dfloor{x − y} + 1 \end{equation}

    omdat

    \begin{align} x − y − 1 \lt \dfloor{x} − \dfloor{y} \lt x − y + 1 \eqavide{eq:floordiffrange} \\ x − y \le \dceil{x − y} \| \quad (\dfloor{x} − \dfloor{y} ∥ 1) \end{align}

  24. \begin{align} \dceil{x} − \dceil{y} \| = \dparen{x + \ddom{x}{1}} − \dparen{y + \ddom{y}{1}} \notag \\ \| = x − y + \ddom{x}{1} − \ddom{y}{1} \end{align}

    Dan

    \begin{equation} x − y − 1 \lt \dceil{x} − \dceil{y} \lt x − y + 1 \end{equation}

    omdat

    \begin{equation} 0 \le \ddom{•}{1} \lt 1 \end{equation}

  25. \begin{equation} \dceil{x − y} − 1 \le \dceil{x} − \dceil{y} \le \dfloor{x − y} + 1 \end{equation}

    omdat

    \begin{align} x − y − 1 \lt \dceil{x} − \dceil{y} \lt x − y + 1 \eqavide{eq:ceildiffrange} \\ x − y \le \dceil{x − y} \| \quad (\dfloor{x} − \dfloor{y} ∥ 1) \end{align}

  26. Als \( y = 1 \):

    \begin{align} \dceilratio{x}{y} \| = \dceilratio{x}{1} = x \| \qquad (x ∥ 1) \\ \| = (x − 1) + 1 = \dfloorratio{x − 1}{1} + 1 = \dfloorratio{x − 1}{y} + 1 \end{align}

    Als \( y \gt 1 \):

    \begin{align} \dceilratio{x}{y} \| = \dfloorratio{x}{y} + C(x⊥y) \eqavide{eq:ceilfloor} \notag \\ \| = \dfloorratio{x}{y} + C\dparen{\dmod{x}{y} \ge 1} \| \qquad (x, y ∥ 1) \notag \\ \| = \dfloorratio{x}{y} + C\dparen{\dmod{\dfrac{x}{y}}{1} \ge \dfrac{1}{y}} \notag \\ \| = \dfloorratio{x}{y} + C\dparen{\dmod{\dfrac{x}{y}}{1} \ge \dmod{\dfrac{1}{y}}{1}} \| (y \gt 1) \notag \\ \| = \dfloorratio{x}{y} − \dfloorratio{1}{y} + C\dparen{\dmod{\dfrac{x}{y}}{1} − \dmod{\dfrac{1}{y}}{1} \ge 0} \| (y \gt 1) \notag \\ \| = \dfloorratio{x}{y} − \dfloorratio{1}{y} + 1 − C\dparen{\dmod{\dfrac{x}{y}}{1} − \dmod{\dfrac{1}{y}}{1} \lt 0} \notag \\ \| = \dfloorratio{x − 1}{y} + 1 \eqavide{eq:floorm} \end{align}

  27. Als \( y = 1 \):

    \begin{equation} \ddom{x}{y} = \ddom{x}{1} = 0 = y − 1 − \ddom{x − 1}{y} \qquad (x ∥ 1) \end{equation}

    Als \( y \gt 1 \):

    \begin{align} \ddom{x}{y} \| = y\ddom{\dfrac{x}{y}}{1} \notag \\ \| = y\dparen{\dceil{\dfrac{x}{y}} − \dfrac{x}{y}} \eqavide{eq:dom} \notag \\ \| = y\dparen{\dfloorratio{x − 1}{y} + 1 − \dfrac{x}{y}} \eqavide{eq:ceil2floor} \notag \\ \| = y\dparen{\dfrac{x − 1}{y} − \dmod{\dfrac{x − 1}{y}}{1} + 1 − \dfrac{x}{y}} \eqavide{eq:mod} \notag \\ \| = x − 1 − y\dmod{\dfrac{x − 1}{y}}{1} + y − x \notag \\ \| = y − 1 − \dmod{x − 1}{y} \end{align}

  28. Stel

    \begin{align} \{ k, α \} \| = \Div(x, y) \\ \{ m, β \} \| = \Div(α, 1) \end{align}

    dus

    \begin{equation} x = ky + α = ky + m + β \end{equation}

    waarbij

    \begin{align} k, m, y \| ∥ 1 \\ 0 \| ≤ m ≤ y − 1 \\ 0 \| ≤ β \lt 1 \end{align}

    dan

    \begin{align} \dfloor{\dmod{x}{y}} \| = \dfloor{\dmod{ky + m + β}{y}} \notag \\ \| = \dfloor{\dmod{m + β}{y}} \notag \\ \| = \dfloor{m + β} \| (0 ≤ m + β \lt y) \notag \\ \| = m \end{align}

    en ook

    \begin{align} \dmod{\dfloor{x}}{y} \| = \dmod{\dfloor{ky + m + β}}{y} \notag \\ \| = \dmod{ky + m}{y} = m \end{align}

    dus

    \begin{equation} \dfloor{\dmod{x}{y}} = \dmod{\dfloor{x}}{y} \end{equation}

12.2. Grote Tussenresultaten

Veel van de kalenderberekeningen die hieronder beschreven worden zijn van de vorm

\begin{align} y \| = \dfloorratio{fx + t}{d} \label{eq:template} \\ e \| = \dmod{fx + t}{d} = (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| ≤ 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 + \dfloorratio{t}{d} d + \dmod{t}{d} = dy + e \eqavide{eq:mod} \\ y \| = \dfloorratio{fx + t}{d} = \dfloorratio{t}{d} + \dfloorratio{fx + \dmod{t}{d}}{d} \\ e \| = \dmod{fx + t}{d} = \dmod{fx + \dmod{t}{d}}{d} \eqavide{eq:modmod} \end{align}

waarin de tweede term van de laatste twee formules dezelfde vorm heeft als formule \eqref{eq:template}ff, als je \( \dmod{t}{d} \) hernoemt tot een nieuwe \( t \). We nemen hieronder aan dat dat gebeurd is, en dus dat \( 0 ≤ t \lt d \).

Als \( f \gt d \), dan kunnen we formule \eqref{eq:template}ff omschrijven naar

\begin{align} fx + t \| = \dparen{\dfloorratio{f}{d} d + \dmod{f}{d}} x + t = dy + e \eqavide{eq:mod} \\ y \| = \dfloorratio{f}{d} x + \dfloorratio{\dmod{f}{d} x + t}{d} \label{eq:template2} \\ e \| = \dmod{\dmod{f}{d} x + t}{d} \end{align}

Dan mag \( |x| \) ongeveer zo groot zijn als \( w/\dmod{f}{d} \) voordat er problemen komen.

Formules \eqref{eq:template2}ff hebben weer de vorm van formule \eqref{eq:template}ff, als je \( \dmod{f}{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\dfloorratio{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\dparen{ \dfloorratio{x}{d} d + \dmod{x}{d}} + t \eqavide{eq:mod} \\ y \| = f\dfloorratio{x}{d} + \dfloorratio{f\dmod{x}{d} + t}{d} \label{eq:detour1} \\ e \| = \dmod{f\dmod{x}{d} + t}{d} \end{align}

Nu is het grootste tussenresultaat niet meer \( fx + t \), dat zo groot kan worden als \( fw \), maar \( f\dmod{x}{d} + t \), dat niet groter kan worden dan \( fd \lt d^2 \).

Formules \eqref{eq:detour1}ff hebben weer de vorm van formule \eqref{eq:template}ff, als je \( \dmod{x}{d} \) hernoemt tot een nieuwe \( x \).

Bijvoorbeeld, stel dat \( d = 12345 \), \( f = 8432 \), \( t = 871 \), en \( w = 2^{31} − 1 = 2147483647 \), en dat we \( y \), \( e \) willen uitrekenen voor \( x = 300000 \).

We gebruiken de omweg van formule \eqref{eq:detour1}. We vinden

\begin{align*} \dfloorratio{x}{d} \| = \dfloorratio{300000}{12345} = 24 \\ \dmod{x}{d} \| = \dmod{300000}{12345} = 3720 \\ y = \| f\dfloorratio{x}{d} + \dfloorratio{f\dmod{x}{d} + t}{d} \\ \| = 8432×24 + \dfloorratio{8432×3720 + 871}{12345} \\ \| = 202368 + \dfloorratio{31367911}{12345} \\ \| = 202368 + 2540 = 204908 \\ e \| = \dmod{31367911}{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 \| = \dfloorratio{fx + t}{d} = \dfloorratio{8432×300000 + 871}{12345} = \dfloorratio{2529600871}{12345} = 204908 \\ e \| = \dmod{2529600871}{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 een product van twee getallen kan veel groter zijn dan \( w \) ook als de twee getallen apart veel kleiner zijn dan \( w \). Als het product niet groter mag worden dan \( w \), dan mogen beide getallen 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 = 2147483647 \) en is \( \sqrt{w} ≈ 46341 \), dus zelfs als \( d \) en \( fd \) 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 heel getal \( P \gt 0 \) en berekenen daarmee eenmalig

\begin{align} \{Q, R\} \| = \Div(fP, d) \label{eq:PQR} \\ Q \| = \dfloorratio{fP}{d} \\ R \| = \dmod{fP}{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 \| = \dfloorratio{x}{P} \\ r \| = \dmod{x}{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 \| = \dfloorratio{qdQ + qR + fr + t}{d} = qQ + \dfloorratio{qR + fr + t}{d} \label{eq:detour2} \\ e \| = \dmod{qdQ + qR + fr + t}{d} = \dmod{qR + fr + t}{d} \end{align}

Nu is het grootste tussenresultaat \( m ≡ qR + fr + t \). Om niet in de problemen te komen moet \( \dabs{m} ≤ w \) zijn, dus (omdat \( r \lt P \))

\begin{eqnarray} \dabs{x}\frac{R}{P} + fP + t ≤ w \\ \dabs{x} ≤ X ≡ \dparen{w − fP − t}\dfrac{P}{R} \end{eqnarray}

We hebben \( f \lt d \) dus \( f \) is geen veelvoud van \( d \) dus \( R \gt 0 \).

We zien dat \( 0 \lt P \lt \dfrac{w − t}{f} \) moet zijn, want anders is \( X ≤ 0 \).

Bijvoorbeeld, stel dat \( d = 765433 \), \( f = 25920 \), \( t = 13835 \), \( w = 2^{31} − 1 = 2147483647 \). Dan moet, om \( X ≥ 0 \) te krijgen,

\[ P \lt \dfrac{w − t}{f} = \dfrac{2147483647 − 13835}{25920} = 82849.9 \]

Wat voorbeelden:

\({P}\) \({Q}\) \({R}\) \({X}\) \({X/w}\)
1 0 25920 82848.9 0.000
2 0 51840 82847.9 0.000
3 0 77760 82846.9 0.000
29 0 751680 82820.9 0.000
30 1 12167 5.29307 × 10+06 0.002
31 1 38087 1.74723 × 10+06 0.001
59 1 763847 165754 0.000
60 2 24334 5.29115 × 10+06 0.002
943 31 714137 2.8034 × 10+06 0.001
944 31 740057 2.70805 × 10+06 0.001
945 32 544 3.68789 × 10+09 1.717
33783 1144 8 5.37071 × 10+12 2500.932
82849 2805 406515 4836.65 0.000
82850 2805 432435 −419.198 −0.000

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 \( P \) langzaam toeneemt (steeds met 1) dan varieert \( R = \dmod{fP}{d} \) grillig tussen 0 en \( d − 1 \), dus de waarde van \( R \) is onafhankelijk van de globale grootte van \( P \), en er zijn veel waarden van \( P \) mogelijk voor dezelfde kleinste waarde van \( R \).

Als \( R \) de kleinst mogelijke waarde (groter dan nul) heeft, wat moet dan ongeveer de waarde van \( P \) zijn die de grootste waarde van \( X \) geeft?

Dan is \( X \) een kwadratische functie van \( P \). Als \( P \) elke willekeurige waarde kon hebben dan zou die grootst mogelijk waarde optreden voor

\begin{equation} P = P_0 = \dfrac{w − t}{2f} \end{equation}

en gelijk zijn aan

\begin{equation} \max(X) = \dfrac{\dparen{w − t}^2}{4Rf} = \dfrac{fP_0^2}{R} \end{equation}

Om \( \max(X) ≥ w \) te hebben moet dus zeker

\begin{equation} R ≤ \dfrac{w}{4f}\dparen{1−\dfrac{t}{w}}^2 \label{eq:maxR} \end{equation}

De kleinst mogelijke waarde die \( R \) kan hebben is gelijk aan de grootste gemene deler \( \gcd(f, d) \) van \( f \) en \( d \).

\begin{equation} R = R_1 ≡ \gcd(f, d) \end{equation}

Het Uitgebreide Algoritme van Euclides levert die waarde op, en ook getallen \( x \) en \( y \) zodat

\begin{equation} fx + dy = R \end{equation}

De \( x \) en \( y \) die je dan krijgt zijn in zekere zin het kleinste, maar ook de volgende waarden voldoen (met \( k \) een willekeurig heel getal):

\begin{equation} f\dparen{x + k\dfrac{d}{R}} + d\dparen{y − k\dfrac{f}{R}} = R \end{equation}

Omdat \( R \) een deler is van \( d \) en ook van \( f \) leveren de delingen door \( R \) in deze formule altijd hele getallen op.

De bij elkaar horende mogelijke waarden van \( P \) en \( Q \) zijn dan

\begin{align} P \| = x + k\dfrac{d}{R} \\ Q \| = −y + k\dfrac{f}{R} \end{align}

voor willekeurige hele \( k \) waarvoor \( P, Q \gt 0 \). De kleinste bruikbare positieve \( P \) en de daarbij horende waarde van \( Q \) zijn

\begin{align} P_1 \| = \dmod{x}{d/R_1} \\ Q_1 \| = \dmod{−y}{f/R_1} \end{align}

Deze \( P_1, Q_1, R_1 \) voldoen aan vergelijkingen \eqref{eq:PQR}ff, want

\begin{equation} \dfloorratio{fP_1}{d} = \dfloorratio{dQ_1 + R_1}{d} = Q_1 + \dfloorratio{R_1}{d} = Q_1 \end{equation}

omdat \( \dfloor{R_1/d} = 0 \) omdat \( R_1 = \gcd(f,d) \lt d \) omdat \( f \lt d \). En als \( Q_1 \) past dan past \( R_1 \) ook.

Om \( X \gt 0 \) te krijgen moet zeker gelden \( P ≤ w/f \), dus de grootste bruikbare \( P \) is

\begin{equation} P_\text{max} = \dfrac{w}{f} − \dmod{\dfrac{w}{f} − P_1}{d/R_1} \end{equation}

De stapgrootte tussen opeenvolgende waarden van \( P \) die bij deze \( R \) horen is \( d/R \) dus als \( d/R \gt w/f \) (dus \( fd/R \gt w \)) dan is er misschien helemaal geen acceptabele waarde van \( P \) voor deze \( R \). In dat geval is \( P_\text{max} \lt 0 \).

Voor hetzelfde geval als in het vorige voorbeeld vinden we met het Uitgebreide Algoritme van Euclides

\[ fx + dy = 25920×99902 − 765433×3383 = 1 \]

dus

\begin{align*} x \| = 99902 \\ y \| = −3383 \\ R_1 \| = 1 \\ P_1 \| = \dmod{x}{d/R} = \dmod{99902}{765433} = 99902 \\ Q_1 \| = \dmod{−y}{f/R} = \dmod{3383}{25920} = 3383 \\ P_\text{max} \| = \dfrac{w}{f} − \dmod{\dfrac{w}{f} − P_1}{d/R_1} \\ \| = \dfrac{2147483647}{25920} − \dmod{\dfrac{2147483647}{25920} − 99902}{765433/1} \\ \| = 82850.4493441 − \dmod{82850.4493441 − 99902}{765433} \\ \| = 82850.4493441 − \dmod{−17051.5506559}{765433} \\ \| = 82850.4493441 − 748381.449344 = −665531 \end{align*}

dus \( P_\text{max} \lt 0 \) dus voor deze \( R \) is er op deze manier geen acceptabele waarde van \( P \).

Als je voor \( R = R_1 \) geen acceptabele waarde van \( P \) kunt vinden, probeer dan een steeds groter veelvoud van \( R_1 \) tot je wel een acceptabele \( P \) vindt. Dat kan, want omdat

\begin{equation} fP_1 − dQ_1 = R_1 \end{equation}

geldt ook

\begin{equation} fnP_1 − dnQ_1 = nR_1 \end{equation}

voor willekeurige \( n \).

Maar \( nP_1 \) mag niet groter zijn dan \( w/f \) dus \( n \) mag niet groter zijn dan \( w/(fP_1) \) en dat is vaak helemaal niet zo groot.

In ons voorbeeld mag \( n \) niet groter zijn dan

\[ \dfrac{w}{fP_1} = \dfrac{2147483647}{25920×99902} = \dfrac{2147483647}{2589459840} = 0.829317224321 \]

en dat is zelfs kleiner dan 1.

Om toch meer kleine waarden van \( P \) te vinden kunnen we gebruik maken van de modulus-functie. Als we voor \( P \) nemen

\begin{equation} P = \dmod{nP_1}{(d/R_1)} \end{equation}

dan is

\begin{align} \dfrac{nP_1R_1}{d} \| = n\dfrac{R_1}{f}\dfrac{dQ_1 + R_1}{d} \\ P \| = \dfrac{d}{R_1}\dmod{\dfrac{nP_1R_1}{d}}{1} \\ \dfrac{fP}{d} \| = \dfrac{f}{R_1}\dmod{\dfrac{nP_1R_1}{d}}{1} = \dfrac{f}{R_1}\dmod{n\dfrac{R_1}{f}\dfrac{dQ_1 + R_1}{d}}{1} \notag \\ \| = \dmod{nQ_1 + \dfrac{nR_1}{d}}{(f/R_1)} \\ Q \| = \dfloorratio{fP}{d} = \dfloor{\dmod{nQ_1 + \dfrac{nR_1}{d}}{(f/R_1)}} \notag \\ \| = \dmod{\dfloor{nQ_1 + \dfrac{nR_1}{d}}}{(f/R_1)} = \dmod{nQ_1 + \dfloor{\dfrac{nR_1}{d}}}{(f/R_1)} \eqvide{eq:modfloor} \\ R \| = fP − dQ \notag \\ \| = d\dmod{nQ_1 + \dfrac{nR_1}{d}}{(f/R_1)} − d\dmod{nQ_1 + \dfloor{\dfrac{nR_1}{d}}}{(f/R_1)} \notag \\ \| = d\dmod{nQ_1 + \dfloor{\dfrac{nR_1}{d}} + \dmod{\dfrac{nR_1}{d}}{1}}{(f/R_1)} − d\dmod{nQ_1 + \dfloor{\dfrac{nR_1}{d}}}{(f/R_1)} \notag \\ \| = d\dmod{nQ_1 + \dfloor{\dfrac{nR_1}{d}}}{(f/R_1)} + d\dmod{\dmod{\dfrac{nR_1}{d}}{1}}{(f/R_1)} \notag \\ \| − \dfrac{fd}{R_1} C\dparen{\dmod{nQ_1 + \dfloor{\dfrac{nR_1}{d}}}{(f/R_1)} + \dmod{\dmod{\dfrac{nR_1}{d}}{1}}{(f/R_1)} ≥ \dfrac{f}{R_1}} \notag \\ \| − d\dmod{nQ_1 + \dfloor{\dfrac{nR_1}{d}}}{(f/R_1)} \notag \\ \| = d\dmod{\dmod{\dfrac{nR_1}{d}}{1}}{(f/R_1)} \notag \\ \| − \dfrac{fd}{R_1} C\dparen{\dmod{nQ_1 + \dfloor{\dfrac{nR_1}{d}}}{(f/R_1)} + \dmod{\dmod{\dfrac{nR_1}{d}}{1}}{(f/R_1)} ≥ \dfrac{f}{R_1}} \end{align}

Er geldt \( f/R_1 ≥ 1 \) en \( 0 ≤ \dmod{nR_1/d}{1} \lt 1 \) dus de \( \dmod{•}{(f/R_1)} \) daaromheen heeft geen effect, dus

\begin{equation} d\dmod{\dmod{\dfrac{nR_1}{d}}{1}}{(f/R_1)} = d\dmod{\dfrac{nR_1}{d}}{1} = \dmod{nR_1}{d} \end{equation}

De formule binnen de \( C(•) \) is net zo om te schrijven tot

\begin{equation} \dmod{nQ_1 + \dfloor{\dfrac{nR_1}{d}}}{(f/R_1)} + \dmod{\dfrac{nR_1}{d}}{1} ≥ \dfrac{f}{R_1} \end{equation}

Er geldt

\begin{align} nQ_1 + \dfloorratio{nR_1}{d} \le \dfrac{f}{R_1} − 1 \\ \dmod{\dfrac{nR_1}{d}}{1} \lt 1 \end{align}

omdat \( nQ_1 \) en \( \dfloor{nR_1/d} \) en ook \( f/R_1 \) hele getallen zijn. Dus de som van die twee is kleiner dan \( f/R_1 \), dus aan de voorwaarde binnen de \( C(•) \) is nooit voldaan, dus die term valt weg. Al met al vinden we

\begin{align} P \| = \dmod{nP_1}{(d/R_1)} \\ Q \| = \dmod{nQ_1 + \dfloorratio{nR_1}{d}}{(f/R_1)} \\ R \| = \dmod{nR_1}{d} \end{align}

Voor de berekening is deze vorm handiger:

\begin{align} P \| = \dmod{nP_1}{(d/R_1)} \\ \{ ρ, R \} \| = \Div(nR_1, d) \\ Q \| = \dmod{nQ_1 + ρ}{(f/R_1)} \end{align}

Zolang geldt \( n \lt d/R_1 \) is \( \dfloor{nR_1/d} = 0 \) en dus \( Q = \dmod{nQ_1}{(f/R_1)} \). Dat zal in de praktijk meestal het geval zijn.

Met ons voorbeeld (\( P_1 = 99902, Q_1 = 3383, R_1 = 1, d = 765433, f = 25920, t = 13835 \)) vinden we

\begin{align*} P \| = \dmod{99902n}{765433} \\ \{ ρ, R \} \| = \Div(n, 765433) \\ Q \| = \dmod{3383n + ρ}{25920} \end{align*}

\({n}\) \({P}\) \({ρ}\) \({R}\) \({Q}\) \({fP−dQ}\) \({X/w}\)
1 99902 0 1 3383 1 −20561.6
2 199804 0 2 6766 2 −141024.5
3 299706 0 3 10149 3 −261487.5
4 399608 0 4 13532 4 −381950.5
5 499510 0 5 16915 5 −502413.4
6 599412 0 6 20298 6 −622876.3
7 699314 0 7 23681 7 −743339.3
8 33783 0 8 1144 8 +2500.9
9 133685 0 9 4527 9 −9114.0
765432 665531 0 765432 22536 765432 −6.1
765433 0 1 0 0 0
765434 99902 1 1 3383 1 −20561.6
765435 199804 1 2 6766 2 −141024.5

dus pas voor \( n = 8 \) vinden we een \( X \gt w \).

Om

\begin{equation} X = (w − fP − t)\dfrac{P}{R} \gt 0 \end{equation}

te vinden moet \( P \) voldoende dicht bij \( P_0 = (w − t)/(2f) \) liggen.

Met \( P = \dmod{nP_1}{(d/R_1)} \) is de kleinste positieve waarde \( n_0 \) van \( n \) waarvoor we \( P = P_0 \) krijgen gelijk aan \( n_0 = P_0/P_1 \), en de volgende waarde van \( n \) waarvoor \( P = P_0 \) ligt steeds \( d/P_1R_1 \) hoger dan de vorige, dus de waarden \( n_k \) van \( n \) die \( P = P_0 \) geven zijn

\begin{equation} n_k = \dfrac{P_0}{P_1} + k\dfrac{d}{P_1R_1} \end{equation}

voor hele waarden \( 0 ≤ k \lt d \).

Het hele getal \( [n_k] = \dfloor{n_k + 1/2} \) het dichtste bij \( n_k \) is dan de kandidaat-\( n \). Calculate \( X \) for that value of \( n \) to see if it meets the condition that \( X \gt w \).

In ons voorbeeld vinden we

\begin{align*} P_0 \| = \dfrac{w − t}{2f} = \dfrac{2147483647 - 13835}{2×25920} = 41424.9577932 \\ n_k \| = \dfrac{P_0}{P_1} + k\dfrac{d}{P_1R_1} = \dfrac{41424.9577932}{99902} + \dfrac{765433}{99902×1}k \\ \| = 0.414655940754 + 7.66183860183 k \\ n \| = \dfloor{n_k + ½} = \dfloor{0.914655940754 + 7.66183860183 k} \\ R \| = n \\ P \| = \dmod{99902n}{765433} \\ X \| = (w − fP − t)\dfrac{P}{R} = (2147469812 − 25920 P)\dfrac{P}{R} \end{align*}

De eerste paar relatief goede waarden van \( n \) zijn dan

\({k}\) \({n_k}\) \({n}\) \({P}\) \({Q}\) \({R}\) \({X/w}\)
0 0.41 0 0 0 0 +0.0
1 8.08 8 33783 1144 8 +2500.9
2 15.74 16 67566 2288 16 +779.0
3 23.40 23 1447 49 23 +61.8
4 31.06 31 35230 1193 31 +653.2
5 38.72 39 69013 2337 39 +295.5
6 46.39 46 2894 98 46 +60.7
7 54.05 54 36677 1242 54 +378.5
8 61.71 62 70460 2386 62 +170.0

De eerste \( n \) is 0 en valt daarom af. De eerste daarboven is 8, zoals we ook eerder zagen.

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 en leest gemakkelijker.

Voor het geval uit het vorige voorbeeld is \( X ≥ w \) voor 1498 waarden van \( R \) tussen 8 en 20312, en \( X ≥ d \) voor 82576 waarden van \( R \) tussen 8 en 765'426. 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 \| = \dfloorratio{x}{P} = \dfloorratio{1710321}{1447} = 1181 \\ r \| = \dmod{x}{P}= \dmod{1710321}{1447} = 1414 \\ y \| = qQ + \dfloorratio{qR + fr + t}{d} \\ \| = 1181×49 + \dfloorratio{1181×23 + 25920×1414 + 13835}{765433} \\ \| = 57869 + \dfloorratio{36691878}{765433} \\ \| = 57869 + 47 = 57916 \\ e \| = \dmod{36691878}{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 \| = \dfloorratio{fx + t}{d} = \dfloorratio{25920×1710321 + 13835}{765433} = \dfloorratio{44331534155}{765433} = 57916 \\ e \| = \dmod{44331534155}{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 \( \dfrac{w}{f} = \dfrac{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*} \\ P_1 \| = \dmod{−15188}{(146097/3)} = \dmod{−15188}{48699} = 33511 \\ Q_1 \| = \dmod{−499}{(4800/3)} = \dmod{−499}{1600} = 1101 \\ R_1 \| = 3 \end{align*}

Even controleren:

\[ fP_1 − dQ_1 = 4800×33511 − 146097×1101 = 3 = R_1 \]

dus mogelijk goede combinaties zijn

\begin{align*} P \| = \dmod{nP_1}{(d/R_1)} = \dmod{33511n}{48699} \\ \{ ρ, R \} \| = \Div(nR_1, 146097) = \Div(3n, 146097) \\ Q \| = \dmod{nQ_1 + ρ}{(f/R_1)} = \dmod{1101n + ρ}{1600} \end{align*}

De beste kandidaten voor \( n \) zijn

\begin{align*} P_0 \| = \dfrac{w − t}{2f} = \dfrac{2147483647 − 15793}{2×4800} = 223694.568125 \\ n_k \| = \dfrac{P_0}{P_1} + k\dfrac{d}{P_1R_1} = \dfrac{223694.568125}{33511} + \dfrac{146097}{33511×3}k \\ \| = 6.67525791904 + 1.4532243144 k \end{align*}

Voor kleine \( R \) vinden we de volgende combinaties:

\({R}\) \({P}\) \({Q}\)
3 33511 1101
6 67022 2202
9 100533 3303
12 134044 4404

Er zijn 57132 combinaties waarvoor \( X ≥ w \). De combinaties met de kleinste \( PQR \) zijn:

\({P}\) \({Q}\) \({R}\) \({PQR}\) \({X/w}\)
487 16 48 3.74 × 105 10.1
974 32 96 2.99 × 106 10.1
761 25 375 7.13 × 106 41.3
1461 48 144 1.01 × 107 10.1
1248 41 423 2.16 × 107 37.7
6270 206 18 2.32 × 107 343.5

We kiezen \( P = 487 \), dan \( Q = 16 \) en \( R = 48 \). We rekenen \( y\), \( e \) uit voor \( x = 731767 \). Dan is

\begin{align*} q \| = \dfloorratio{731767}{487} = 1502 \\ r \| = \dmod{731767}{487} = 293 \\ y \| = 1502×16 + \dfloorratio{1502×48 + 4800×293 + 15793}{146097} \\ \| = 24032 + \dfloorratio{1494289}{146097} = 24032 + 10 = 24042 \\ e \| = \dmod{1494289}{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 \| = \dfloorratio{4800×731767 + 15793}{146097} = \dfloorratio{3512497393}{146097} = 24042 \\ e \| = \dmod{3512497393}{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) \| ≈ \dfloorratio{w}{4} \\ \max(f_d) \| ≈ \dfloorratio{w}{3} \\ \max(d_w) \| ≈ w − 5 + ⌊w⌉_2 \\ \max(d_d) \| ≈ w − 1 \\ \max(c_w) \| ≈ \dfloorratio{w+8}{16} \\ \max(c_d) \| ≈ \dfloorratio{w−1}{2} \\ \max(P_w) \| ≈ \dfloorratio{w}{2} − 2 + ⌊w⌉_2 \\ \max(P_d) \| ≈ \dfloorratio{w}{2} − 1 \\ \max(Q) \| ≈ \dfloorratio{2\sqrt{w − 1} − 3}{2} \\ \max(R_w) \| ≈ \dfloorratio{\sqrt{w + 1} − 1}{2} \\ \max(R_d) \| ≈ \frac{\sqrt{w(w + 1100)}}{25} \\ \max(X) \| ≈ \dfloorratio{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) \| ≈ \dfloorratio{1023}{4} = 255 \\ \max(f_d) \| ≈ \dfloorratio{1023}{3} = 341 \\ \max(d_w) \| ≈ 1023 − 5 + ⌊1023⌉_2 = 1019 \\ \max(d_d) \| ≈ 1023 − 1 = 1022 \\ \max(c_w) \| ≈ \dfloorratio{1023 + 8}{16} = 64 \\ \max(c_d) \| ≈ \dfloorratio{1023 − 1}{2} = 511 \\ \max(P_w) \| ≈ \dfloorratio{1023}{2} − 2 + ⌊1023⌉_2 = 510 \\ \max(P_d) \| ≈ \dfloorratio{1023}{2} − 1 = 510 \\ \max(Q) \| ≈ \dfloorratio{2×\sqrt{1023 − 1} − 3}{2} ≈ ⌊30.47⌋ = 30 \\ \max(R_w) \| ≈ \dfloorratio{\sqrt{1023 + 1} − 1}{2} ≈ ⌊15.50⌋ = 15 \\ \max(R_d) \| ≈ \frac{\sqrt{1023 × (1023 + 1100)}}{25} ≈ 58.95 \\ \max(X) \| ≈ \dfloorratio{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}ff 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.

We geven met \( m \) het maandnummer aan, met \( d \) het dagnummer in de maand, en met \( s \) het doorlopende dagnummer dat het begin- of eindpunt van de berekening is.

12.3.1. Van maand en dagnummer in de maand naar lopende dagnummer

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. We noemen de kortste maandlengte \( q \), en de fractie van de maanden die lang zijn noemen we \( ψ \). Dan

\begin{eqnarray} q \| = \| \dfloor{p} \\ p \| = \| q + ψ \end{eqnarray}

Het doorlopende dagnummer \( s \) hangt op de volgende manier af van maandnummer \( m \) en dagnummer-in-de-maand \( d \):

\begin{eqnarray} σ \| ≡ \| ⌊pm + b⌋ \label{eq:sm} \\ s \| ≡ \| σ + d \label{eq:s} \end{eqnarray}

waarbij \( m, d, s, σ \) hele getallen zijn, en \( p ≥ 1 \) en \( b \) voor een bepaalde kalender vaste waarden hebben. De eerste maand heeft \( m = 0 \) en de eerste dag van de maand heeft \( d = 0 \), want dat rekent eenvoudiger. \( σ \) is het lopende dagnummer van het begin van de maand. Als er waarden van \( σ \) voor verschillende maanden van belang zijn dan schrijven we \( σ[m] \) voor de waarde van \( σ \) die hoort bij maand \( m \).

De eerste dag (\( d = 0 \)) van de eerste maand (\( m = 0 \)) heeft lopende dagnummer \( s = 0 \), dus

\begin{equation} ⌊b⌋ = 0 ⇔ 0 ≤ b \lt 1 \end{equation}

Dus \( b \) moet tussen 0 en 1 zijn (0 kan wel, 1 kan niet).

12.3.2. Maandlengte

De lengte \( L(m) \) van maand \( m \) is

\begin{eqnarray} L(m) \| = \| σ(m + 1) − σ(m) \notag \\ \| = \| \dfloor{q (m + 1) + ψ (m + 1) + b} − \dfloor{qm + ψm + b} \notag \\ \| = \| q + \dfloor{ψm + ψ + b} − \dfloor{ψm + b} \notag \\ \| = \| q + \dfloor{ψm + b} + C\dparen{\dmod{ψm + b}{1} + ψ ≥ 1} − \dfloor{ψm + b} \eqavide{eq:splitfloor} \notag \\ \| = \| q + C\dparen{\dmod{ψm + b}{1} + ψ ≥ 1} \end{eqnarray}

Elke maand is \( q \) of \( q + 1 \) dagen lang. Maand \( m \) is lang (met \( q + 1 \) dagen) als \( \dmod{ψx + b}{1} ≥ 1 − ψ \). Gemiddeld is er een lange maand na elke

\begin{equation} Q = \frac{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⌉ \).

Ook geldt

\begin{align} L(m) \| = q + \dfloor{ψm + ψ + b} − \dfloor{ψm + b} \notag \\ \| = q + ψm + ψ + b − \dmod{ψm + b + ψ}{1} − \dparen{ψm + b − \dmod{ψm + b}{1}} \notag \\ \| = q + ψ + \dmod{ψm + b}{1} − \dmod{ψm + b + ψ}{1} \notag \\ \| = p + \dmod{ψm + b}{1} − \dmod{ψm + b + ψ}{1} \end{align}

12.3.3. Maandpatroon verschuiven

Hiermee krijgen we een bepaald patroon van lange en korte maanden. Stel dat dat precies het patroon is dat we willen, behalve dat het \( ∆m \) maanden verschoven moet worden. Dus als \( σ_* \) bij de oude kalender hoort (met \( b_* \)) en \( σ \) bij de nieuwe kalender (met \( b = b_* + ∆b \)) dan willen we dat voor alle waarden van \( m \) geldt dat

\begin{equation} σ(m + 1) − σ(m) = σ_*(m + ∆m + 1) − σ_*(m + ∆m) \end{equation}

Nu geldt

\begin{align} \| σ(m + 1) − σ(m) \notag \\ \| = \dfloor{p(m + 1) + b} − \dfloor{pm + b} \notag \\ \| = \dfloor{pm + b + p} − \dfloor{pm + b} \notag \\ \| = \dfloor{\dfloor{pm + b} + \dmod{pm + b}{1} + p} − \dfloor{pm + b} \notag \\ \| = \dfloor{pm + b} + \dfloor{\dmod{pm + b}{1} + p} − \dfloor{pm + b} \notag \\ \| = \dfloor{\dmod{pm + b}{1} + p} \end{align}

en net zo

\begin{align} \| σ_*(m + ∆m + 1) − σ_*(m + ∆m) \notag \\ \| = \dfloor{p(m + ∆m + 1) + b_*} − \dfloor{p(m + ∆m) + b_*} \notag \\ \| = \dfloor{pm + p∆m + b_* + p} − \dfloor{pm + p∆m + b_*} \notag \\ \| = \dfloor{\dfloor{pm + p∆m + b_*} + \dmod{pm + p∆m + b_*}{1} + p} − \dfloor{pm + p∆m + b_*} \notag \\ \| = \dfloor{pm + p∆m + b_*} + \dfloor{\dmod{pm + p∆m + b_*}{1} + p} − \dfloor{pm + p∆m + b_*} \notag \\ \| = \dfloor{\dmod{pm + b_* + p∆m}{1} + p} \end{align}

dus we krijgen wat we willen als

\begin{equation} b = \dmod{b_* + p∆m}{1} \end{equation}

12.3.4. Van lopende dagnummer naar maand en dagnummer in de maand

We gaan van lopende maandnummer \( m \) en dagnummer \( d \) in de maand naar lopende dagnummer \( s \) via een formule zoals

\begin{equation} s = \dfloor{pm + v} + d = σ + d \label{eq:sv} \end{equation}

waar \( v \) een willekeurig getal is. Formule \eqref{eq:s} is zoals formule \eqref{eq:sv} als \( v = b \). We zoeken voor \( m \) uit \( s \) een formule zoals

\begin{equation} m = \dceilratio{s + u − p}{p} = \dceilratio{s + u}{p} − 1 \end{equation}

Voor welke \( u \) werkt dit?

\begin{align} m \| = \dceilratio{s + u − p}{p} \notag \\ \| = \dceilratio{\dfloor{pm + v} + d + u − p}{p} \eqavide{eq:s} \notag \\ \| = \dceilratio{d + u + pm + v − \dmod{pm + v}{1} − p}{p} \notag \\ \| = m + \dceilratio{d + u + v − \dmod{pm + v}{1} − p}{p} \end{align}

dus dan moet gelden

\begin{eqnarray} \dceilratio{d + u + v − \dmod{pm + v}{1} − p}{p} = 0 \notag \\ −1 \lt \dfrac{d + u + v − \dmod{pm + v}{1} − p}{p} ≤ 0 \notag \\ −p \lt d + u + v − \dmod{pm + v}{1} − p ≤ 0 \notag \\ \dmod{pm + v}{1} − v − d \lt u ≤ \dmod{pm + v}{1} − v − d + p \end{eqnarray}

Dit moet gelden voor all waarden van \( d \) en \( m \) die in de kalender kunnen voorkomen. Voor de linkerongelijkheid \( … \lt u \) betekent dit dat we de kleinste waarde van \( d \) invullen die kan voorkomen, want hogere waarden van \( d \) voldoen eerder aan die ongelijkheid dan lagere waarden. Dus daar kunnen we \( d = 0 \) invullen.

Voor de rechterongelijkheid \( u ≤ … \) moeten we de grootste waarde van \( d \) invullen die kan voorkomen, want lagere waarden van \( d \) voldoen eerder aan die ongelijkheid dan hogere waarden. Dus daar kunnen we \( d = L(m) − 1 \) invullen, het dagnummer-in-de-maand van de laatste dag van maand \( m \). Dat schrijven we om naar een hier handigere vorm.

\begin{align} L(m) \| = σ(m + 1) − σ(m) \notag \\ \| = \dfloor{p(m + 1) + v} − \dfloor{pm + v} \notag \\ \| = \dparen{pm + v + p − \dmod{pm + v + p}{1}} − \dparen{pm + v − \dmod{pm + v}{1}} \notag \\ \| = p + \dmod{pm + v}{1} − \dmod{pm + v + p}{1} \end{align}

Daarmee vinden we

\begin{equation*} \dmod{pm + v}{1} − v \lt u ≤ \dmod{pm + v}{1} − v − \dparen{p + \dmod{pm + v}{1} − \dmod{pm + v + p}{1} − 1} + p \end{equation*}

\begin{equation} \dmod{pm + v}{1} − v \lt u ≤ \dmod{pm + v + p}{1} − v + 1 \end{equation}

Voor de linkerongelijkheid \( … \lt u \) moeten we de grootst mogelijke waarde van \( \dmod{pm + v}{1} \) aanhouden. Die is net kleiner dan 1, dus als we daar 1 invullen dan mag de \( \lt \) veranderen in \( ≤ \). Voor de rechterongelijkheid \( u ≤ … \) moeten de kleinst mogelijke waarde van \( \dmod{pm + v + p}{1} \) aanhouden, en dat is 0. Daarmee vinden we

\begin{equation} 1 − v ≤ u ≤ 1 − v \end{equation}

Voor die ongelijkheden is precies één oplossing:

\begin{equation} u = 1 − v \end{equation}

dus

\begin{equation} m = \dceilratio{s + 1 − v − p}{p} = \dceilratio{s + 1 − v}{p} − 1 \label{eq:svtom} \end{equation}

Het was hiervoor nodig om de eis \( d ≤ L(m) − 1 \) te gebruiken. Als we in plaats daarvan \( d \lt L(m) \) hadden gebruikt dan hadden we geen oplossing gevonden. Dat betekent dat je misschien het verkeerde antwoord vindt als \( s \) een gebroken getal is dat hoort bij een moment tijdens de laatste dag van de maand.

De overgang van de ene waarde van \( m \) naar de andere gebeurt als

\[ \dfrac{s + 1 − v − p}{p} \]

precies een heel getal (laten we het \( μ \) noemen) is, dus als

\[ s = pμ + p + v − 1 = p(μ + 1) + v − 1 \]

\( p \) en \( v \) hoeven geen hele getallen te zijn, dus hoeft die \( s \) waar formule \eqref{eq:svtom} naar een nieuwe maand gaat dat ook niet te zijn.

Dus moet in formule \eqref{eq:svtom} \( s \) een heel getal zijn, anders vind je misschien het verkeerde maandnummer \( m \).

Met \( p = 30.6 \) en \( v = b = 0 \) vinden we

\[ s = \dfloor{pm + b} + d = \dfloor{30.6m} + d \]

en dus dat maand \( m = 2 \) begint op dag

\[ s = \dfloor{30.6×2} + 0 = \dfloor{61.2} = 61 \]

Van dag \( s \) naar maand \( m \) gaat via

\[ m = \dceilratio{s + 1 − b − p}{p} = \dceilratio{s − 29.6}{30.6} \]

Dat geeft, voor een paar momenten tussen \( s = 60 \) en \( s = 61 \):

\({s}\) \({\dfrac{s−29.6}{30.6}}\) \({m}\)
60 0.99346405 1
60.2 1. 1
60.21 1.0003268 2
61 1.0261438 2

dus voor \( s \) gelijk aan of net onder 60.2 vinden we \( m = 1 \) zoals gewenst, maar voor \( s \) groter dan 60.2 en kleiner dan 61 vinden we al \( m = 2 \) terwijl ook dat deel van dag \( s = 60 \) helemaal in maand \( m = 1 \) hoort.

En dan kunnen we ook \( d \) vinden.

\begin{align} pm \| = p\dceilratio{s + 1 − v}{p} − p \notag \\ \| = p\dparen{\dfrac{s + 1 − v}{p} + \ddom{\dfrac{s + 1 − v}{p}}{1}} − p \eqavide{eq:dom} \notag \\ \| = s + 1 − v − p + \ddom{s + 1 − v}{p} \\ d \| = s − \dfloor{pm + v} \notag \\ \| = s − \dfloor{s + 1 − p + \ddom{s + 1 − v}{p}} \notag \\ \| = −\dfloor{1 − p + \ddom{s + 1 − v}{p}} \eqavide{eq:minusfloor} (s ∥ 1) \notag \\ \| = \dceil{p − 1 − \ddom{s + 1 − v}{p}} \eqavide{eq:minusceil} \end{align}

Dus als we \( s + 1 − v \) scheiden in

\begin{equation} s + 1 − v = pμ − δ = p\dceilratio{s + 1 − v}{p} − \ddom{s + 1 − v}{p} \end{equation}

dan

\begin{align} m \| = μ − 1 \label{eq:mviaμ} \\ d \| = \dceil{p − 1 − δ} \label{eq:dviaδ} \end{align}

We kunnen dit omschrijven voor gebruik met de \( \Div \)-functie, via

\begin{equation}\{−μ,δ\} = \Div(−(s + 1 − v), p)\end{equation}

Voor de simpele kalender is \( v = b \) dus dan

\begin{align} \{−μ,δ\} \| = \Div(−(s + 1 − b), p) \\ m \| = μ − 1 = \dceilratio{s + 1 − b}{p} − 1 \label{eq:ynaarx} \\ d \| = \dceil{p − 1 − δ} = \dceil{p − 1 − \ddom{s + 1 − b}{p}} \end{align}

Een voorbeeld, met \( p = 30.6 \) en \( b = 0 \). We vinden

\begin{align*} σ \| = \dfloor{pm + b} = \dfloor{30.6 m} \\ L(m) \| = q + C\dparen{\dmod{ψm + b}{1} + ψ ≥ 1} = 30 + C\dparen{\dmod{0.6m}{1} ≥ 0.4} \\ μ \| = \dceilratio{s + 1 − b}{p} = \dceilratio{s + 1}{30.6} \\ m \| = μ − 1 = \dceilratio{s − 29.6}{30.6} \\ δ \| = \ddom{s + 1 − b}{p} = \ddom{s + 1}{30.6} \\ d \| = \dceil{p − 1 − δ} = \dceil{29.6 − δ} = \dceil{29.6 − \ddom{s + 1}{30.6}} \end{align*}

En dan voor de eerste paar maanden

\({m}\) \({pm}\) \({σ(m)}\) \({L(m)}\)
−1 −30.6 −31 31
0 0 0 30
1 30.6 30 31
2 61.2 61 30
3 91.8 91 31
4 122.4 122 31
5 153 153 30
6 183.6 183 31
7 214.2 214 30
8 244.8 244 31
9 275.4 275 31
10 306 306

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:

\({s}\) \({μ}\) \({δ}\) \({m}\) \({d}\)
−2 0 1. −1 29
−1 0 0. −1 30
0 1 29.6 0 0
1 1 28.6 0 1
90 3 0.8 2 29
91 4 30.4 3 0
120 4 1.4 3 29
121 4 0.4 3 30
122 5 30. 4 0
123 5 29. 4 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 \( (s + 1 − b)/p = 6.99999999998 \) maar door een hele kleine afrondfout denkt je rekenmachine dat \( (s + 1 − b)/p = 7.00000000001 \), dan vindt je rekenmachine dat \( \dceil{(s + 1 − b)/p} = 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 \( x \) en \( y \) (\( y \gt 0 \)) geldt

\begin{align} \dceilratio{x}{y} \| = \dfloorratio{x − 1}{y} + 1 \eqavide{eq:ceil2floor} \\ \ddom{x}{y} \| = y − 1 − \dmod{x − 1}{y} \eqavide{eq:ddom2dmod} \end{align}

Als de gemiddelde lengte \( p \) een breuk is, dan kunnen we afrondingsfouten ontlopen door de formules om te schrijven tot formules met breuken. We stellen

\begin{align} p \| = \dfrac{f}{g} = q + \dfrac{h}{g} \\ q \| = \dfloorratio{f}{g} \\ h \| = \dmod{f}{g} \end{align}

met \( f \), \( g \) hele getallen groter dan nul. Dan vinden we, voor een willekeurige waarde \( x \),

\begin{equation} \dmod{x}{f/g} = \dmod{x}{p} = p\dmod{\dfrac{x}{p}}{1} = \dfrac{f \dmod{\dfrac{gx}{f}}{1}}{g} = \dfrac{\dmod{gx}{f}}{g} \label{eq:gmodp} \end{equation}

en net zo

\begin{equation} \ddom{x}{f/g} = \dfrac{\ddom{gx}{f}}{g} \label{eq:gdomp} \end{equation}

Van maand \( m \) en dag \( d \) naar lopende dagnummer \( s \) gaat dan via

\begin{equation} t ≡ vg \end{equation}

\begin{align} s \| = \dfloor{pm + v} + d \notag \\ \| = \dfloor{\dfrac{fm + vg}{g}} + d \notag \\ \| = \dfloor{\dfrac{fm + t}{g}} + d \end{align}

waarbij we eisen dat ook \( t \) een heel getal is. Als \( v \) een breuk is kun je dat altijd voor elkaar krijgen door de juiste keuze van \( g \).

Voor de lengte van de maand vinden we

\begin{equation} L(m) = q + C\dparen{\dmod{hm + t}{g} ≥ g − h}\end{equation}

Voor de berekening van \( m \) en \( d \) uit \( s \) vinden we:

\begin{align} m \| = \dceilratio{s + 1 − v}{p} − 1 = \dceilratio{gs + g − t}{f} − 1 \notag \\ \| = \dfloorratio{gs + g − t − 1}{f} \eqavide{eq:ceil2floor} (t,g,s,f ∥ 1) \label{eq:ynaarx2} \\ d \| = \dceil{p − 1 − \ddom{s + 1 − v}{p}} \notag \\ \| = \dceilratio{f − g − \ddom{gs + g − t}{f}}{g} \eqavide{eq:gdomp} \notag \\ \| = \dfloorratio{f − g − \ddom{gs + g − t}{f} − 1}{g} + 1 \eqavide{eq:ceil2floor} (t,g,s,f ∥ 1) \notag \\ \| = \dfloorratio{f − g − (f − 1 − \dmod{gs + g − t − 1}{f}) − 1}{g} + 1 \eqavide{eq:ddom2dmod} \notag \\ \| = \dfloorratio{\dmod{gs + g − t − 1}{f}}{g} \eqavide{eq:ddom2dmod} \end{align}

Samenvattend, van lopende maandnummer \( m \) en dagnummer \( d \) in de maand naar lopende dagnummer \( s \):

\begin{equation} s = \dfloorratio{fm + t}{g} + d \end{equation}

en van \( s \) naar \( m \) en \( d \):

\begin{align} w \| = gs + g − t − 1 \\ m \| = \dfloorratio{w}{f} \label{eq:ynaarxr} \\ d \| = \dfloorratio{\dmod{w}{f}}{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, b = 0 \), dus \( f = 153, g = 5, t = 0 \). We vinden dan

\begin{align*} s \| = \dfloorratio{153m}{5} + d \\ w \| = 5s + 4 \\ m \| = \dfloorratio{5s + 4}{153} \\ d \| = \dfloorratio{\dmod{5s + 4}{153}}{5} \end{align*}

en voor het begin van de eerste paar maanden

\({m}\) \({σ}\) \({L(m)}\)
0 0 30
1 30 31
2 61 30
3 91 31
4 122 31
5 153 30
6 183 31
7 214 30
8 244 31
9 275 31
10 306 30
11 336 31
12 367

Nu gaan we de andere kant op voor een paar lopende dagnummers:

\({s}\) \({w}\) \({m}\) \({\dmod{w}{f}}\) \({d}\)
−2 −6 −1 147 29
−1 −1 −1 152 30
0 4 0 4 0
1 9 0 9 1
120 604 3 145 29
121 609 3 150 30
122 614 4 2 0
123 619 4 7 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 + r \) dagen lang zijn, met \( q\), \( r \) 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 + rψ \end{equation}

dagen. De formule om het doorlopende dagnummer \( σ \) van de eerste dag van maand \( m \) uit te rekenen is dan

\begin{equation} σ = qm + r\dfloor{ψm + b} \label{eq:sm2} \end{equation}

Als we daarin \( r = 1 \) invullen dan krijgen we

\begin{eqnarray} σ \| = \| qm + \dfloor{ψm + b} \notag \\ \| = \| \dfloor{(q + ψ)m + b} \notag \\ \| = \| \dfloor{pm + b} \end{eqnarray}

dus hetzelfde als formule \eqref{eq:sm}.

Met formule \eqref{eq:sm2} is de lengte \( L(m) \) van maand \( m \)

\begin{eqnarray} L(m) \| = \| σ(m + 1) − σ(m) \notag \\ \| = \| q(m + 1) + r\dfloor{ψ(m + 1) + b} − (qm + r\dfloor{ψm + b}) \notag \\ \| = \| q + rC\dparen{\dfloor{ψm + ψ + b} − \dfloor{ψm + b}} \notag \\ \| = \| q + rC\dparen{\ddom{ψm + b}{1} + ψ ≥ 1} \eqavide{eq:splitfloor} \end{eqnarray}

dus de lange maanden zijn de maanden waarvoor \(\ddom{ψm + b}{1} + ψ ≥ 1\), net als eerder bij de simpele kalender.

De formule om het doorlopende dagnummer \( s \) te berekenen uit maandnummer \( m \) en dagnummer-in-de-maand \( d \) is dan

\begin{eqnarray} s \| = \| σ + d \notag \\ \| = \| qm + r⌊ψm + b⌋ + d \label{eq:xnaary3} \end{eqnarray}

Hoe gaan we nu de andere kant op? Daartoe vergelijken we het doorlopende dagnummer dat uit vergelijking \eqref{eq:xnaary3} komt voor de eerste dag (\( d = 0 \)) van maand \( m \) met het doorlopende dagnummer dat voor dezelfde \( m \) komt uit de meest vergelijkbare simpelste kalender. We schrijven de uitkomst voor de gewenste kalender als \( σ \), en voor de simpelere vergelijkingskalender als \( σ_* \).

\begin{align} σ \| = qm + r\dfloor{ψm + b} \\ σ_* \| = qm + \dfloor{r(ψm + b)} = \dfloor{pm + rb} \label{eq:σ*} \\ ∆σ ≡ σ_* − σ \| = \dfloor{r(ψm + b)} − r\dfloor{ψm + b} \notag \\ \| = r(ψm + b) − \dmod{r(ψm + b)}{1} − \dparen{r(ψm + b) − r\dmod{ψm + b}{1}} \notag \\ \| = r\dmod{ψm + b}{1} − \dmod{r(ψm + b)}{1} \notag \\ \| = r\dmod{ψm + b}{1} − \dmod{r\dmod{ψm + b}{1}}{1} \notag \\ \| = \dfloor{r\dmod{ψm + b}{1}} \end{align}

Voor dit verschil geldt

\begin{equation} 0 \le σ_* − σ \le r − 1 \end{equation}

dus het begin van maand \( m \) in de doelkalender is tussen \( 0 \) en \( r − 1 \) dagen (inclusief) voor het begin van maand \( m \) in de simpele kalender.

Bijvoorbeeld, stel dat \( q = 30, ψ = 0.12, r = 5, b = 0.1 \). Dan is \( p = q + rψ = 30.6 \) de gemiddelde lengte van een maand. Dan vinden we voor de eerste 10 maanden

\({m}\) \({σ_*}\) \({σ}\) \({σ_* − σ}\) \({ψm + b}\) \({r\dmod{ψm + b}{1}}\)
0 0 0 0 0.1 0.5
1 31 30 1 0.22 1.1
2 61 60 1 0.34 1.7
3 92 90 2 0.46 2.3
4 122 120 2 0.58 2.9
5 153 150 3 0.7 3.5
6 184 180 4 0.82 4.1
7 214 210 4 0.94 4.7
8 245 245 0 1.06 0.3
9 275 275 0 1.18 0.9

en \( σ_* − σ \) varieert tussen 0 en \( r − 1 = 5 − 1 = 4 \) zoals verwacht.

Voor die simpelere kalender gebaseerd op \( σ_* \) hebben we formule \eqref{eq:svtom} om het maandnummer uit te rekenen uit het lopende dagnummer:

\[ m_*(s) = \dceilratio{s + 1 − v}{p} − 1 \]

Dat betekent dat

\begin{equation} m_↑ = m_*(s + \max(∆σ)) = \dceilratio{s + \max(∆σ) + 1 − v}{p} − 1 \end{equation}

groter of gelijk is aan het goede maandnummer. En

\begin{equation} m_↓ = m_*(s + \min(∆σ)) = \dceilratio{s + \min(∆σ) + 1 − v}{p} − 1 \end{equation}

is kleiner of gelijk is aan het goede maandnummer.

Met \( m_↑ \) vinden we

\begin{equation} d_↑ = s − σ(m_↑) \end{equation}

Als \( d_↑ \lt 0 \) dan is \( m_↑ \) te groot. Als \( d_↑ \ge 0 \) dan hebben we het juiste maandnummer gevonden, maar die \( d_↑ \) is waarschijnlijk niet het juiste dagnummer.

Kunnen we een recept vinden om \( d \) uit te rekenen met een vast aantal stappen? Zoiets als

\begin{align} m_↑ \| ≡ \dceilratio{s + \max(∆σ) + 1 − v}{p} − 1 \\ d_↑ \| = s − σ(m_↑) \\ m \| = m_↑ + ξ \\ d \| = s − σ(m) \end{align}

waar \( ξ \) de correctie is die we moeten toepassen op \( m_↑ \) om \( m \) te vinden. We kunnen niet in alle gevallen \( ξ \) in één keer vinden, maar soms wel als \( ξ = 0 \) of \( ξ = 1 \), dus als het verschil tussen \( m_↑ \) en \( m \) hooguit 1 is.

We moeten dan hebben dat \( ξ = 0 \) als \( d_↑ ≥ 0 \) en dat \( ξ = −1 \) als \( d_↑ \lt 0 \). Dat suggereert zoiets als

\begin{equation} ξ = \dfloorratio{d_↑}{Ξ} \end{equation}

want dat geeft \( ξ = 0 \) als \( 0 \le d_↑ \lt Ξ \) en geeft \( ξ = −1 \) als \( −Ξ \le d_↑ \lt 0 \). Wat voor waarde moeten we dan gebruiken voor \( Ξ \)? Dat hangt af van de grootste en kleinste waarden die \( d_↑ \) kan hebben, dus laten we die afleiden.

\begin{align} s \| = σ(m) + d \notag \\ \| = σ_*(m) − ∆σ(m) + d \notag \\ \| = \dfloor{pm + v} − ∆σ(m) + d \notag \\ \| = pm + v − \dmod{pm + v}{1} − ∆σ(m) + d \end{align}

dus

\begin{align} m_↑ − m \| = \dceilratio{s + \max(∆σ) + 1 − v}{p} − 1 − m \notag \\ \| = \dceilratio{pm + v − \dmod{pm + v}{1} − ∆σ(m) + d + \max(∆σ) + 1 − v}{p} − 1 − m \notag \\ \| = \dceilratio{1 − \dmod{pm + v}{1} + \max(∆σ) − ∆σ(m) + d}{p} − 1 \end{align}

Altijd geldt \( 0 \lt 1 − \dmod{•}{1} \le 1 \) en \( \max(∆σ) − ∆σ(m) \ge 0 \) en \( d ≥ 0 \) dus is het stuk tussen \( \dceil{} \) altijd groter dan 0, dus \( m_↑ − m ≥ 0 \) zoals gewenst. Wanneer is zeker \( m_↑ − m ≤ 1 \)? Dan moet

\begin{align*} \dceilratio{1 − \dmod{pm + v}{1} + \max(∆σ) − ∆σ(m) + d}{p} ≤ 2 \\ \dfrac{1 − \dmod{pm + v}{1} + \max(∆σ) − ∆σ(m) + d}{p} ≤ 2 \\ 1 − \dmod{pm + v}{1} + \max(∆σ) − ∆σ(m) + d ≤ 2p \end{align*}

De grootste waarde die \( d \) kan hebben is \( \max(L) − 1 \), dus we hebben zeker \( m_↑ − m \le 1 \) als

\begin{equation} ρ ≡ \max(∆σ) − \min(∆σ) + \max(L) − 2p ≤ 0 \label{eq:singlepass} \end{equation}

Als \( m_↑ = m \) dan is de kleinste waarde van \( d_↑ \) gelijk aan 0 en de grootste gelijk aan \( \max(L) − 1 \).

Als \( m_↑ = m + 1 \) dan

\begin{align} d_↑ \| = s − σ(m_↑) \notag \\ \| = s − σ(m + 1) \notag \\ \| = \dparen{pm + v − \dmod{pm + v}{1} − ∆σ(m) + d} \notag \\ \| − \dparen{pm + v + p − \dmod{pm + v + p}{1} − ∆σ(m + 1)} \notag \\ \| = d − p + \dparen{\dmod{pm + v + p}{1} − \dmod{pm + v}{1}} + ∆σ(m + 1) − ∆σ(m) \notag \\ \| \gt 0 − p + \min\dparen{\dmod{pm + v + p}{1} − \dmod{pm + v}{1}} + \min(∆σ(m + 1) − ∆σ(m)) \notag \\ \| = −p + (\dmod{p}{1} − 1) + \min(∆σ(m + 1) − ∆σ(m)) \eqavide{eq:domp} \notag \\ \| = −p + \dmod{p}{1} − 1 + \min(L_*(m) − L(m)) \notag \\ \| = −\dfloor{p} − 1 + \min(L_*(m) − L(m)) \eqavide{eq:mod} \notag \\ \| ≥ −\dfloor{p} − 1 + \min(L_*) − \max(L) \notag \\ \| = −\dfloor{p} − 1 + \dfloor{p} − \max(L) \notag \\ \| = −1 − \max(L) \notag \\ d_↑ \| \gt −1 − \max(L) \\ d_↑ \| ≥ −\max(L) \end{align}

dus

\begin{equation} −\max(L) ≤ d_↑ ≤ \max(L) − 1 \end{equation}

Voor

\[ ξ = \dfloorratio{d_↑}{Ξ} \]

hebben we dan nodig dat aan allebei de volgende eisen is voldaan:

\begin{align*} \dfloorratio{−\max(L)}{Ξ} = −1 \\ \dfloorratio{\max(L) − 1}{Ξ} = 0 \end{align*}

Allebei die eisen zijn gelijkwaardig met

\begin{equation} Ξ ≥ \max(L) \end{equation}

Dus als we

\begin{equation} Ξ = \max(L) \end{equation}

gebruiken (of een grotere waarde) dan voldoen we aan beide voorwaarden.

Samengevat, als

\[ ρ = \max(∆σ) − \min(∆σ) + \max(L) − 2p ≤ 0 \]

dan

\begin{align} m_↑ \| = \dceilratio{s + \max(∆σ) + 1 − v}{p} − 1 \\ d_↑ \| = s − σ_↑ = s − σ(m_↑) \\ ξ \| = \dfloorratio{d_↑}{\max(L)} \\ m \| = m_↑ + ξ \\ d \| = s − σ(m) \end{align}

Met

\begin{align*} v \| = rb \\ \max(∆σ) \| = r − 1 \\ \min(∆σ) \| = 0 \\ \max(L) \|= q + r \\ p \| = q + rψ \end{align*}

vinden we

\begin{align} m_↑ \| = \dceilratio{s + r − rb}{p} − 1 \label{eq:ynaarx3} \\ d_↑ \| = s − σ_↑ = s − σ(m_↑) \\ ρ \| = 2r(1 − ψ) − 1 − q \\ ξ \| = \dfloorratio{d_↑}{q + r} \\ m \| = m_↑ + ξ \\ d \| = s − σ(m) \end{align}

dus \( ρ ≤ 0 \) komt overeen met

\begin{equation} r ≤ \dfrac{1}{2} \dfrac{q + 1}{1 − ψ} ≥ q + 1 \end{equation}

Als \( ρ \gt 0 \) dan werkt bovenstaand recept niet altijd dus dan is dat recept niet geschikt. Zie dan hoofdstuk 12.7.

Voor de kalender uit het vorige voorbeeld vinden we

\begin{align*} m_↑ \| = \dceilratio{s + r − rb}{p} − 1 = \dceilratio{s − 26.1}{30.6} \\ ρ \| = 2r(1 − ψ) − q − 1 = 2×5×(1 − 0.12) − 1 − 30 = −22.2 ≤ 0 \end{align*}

Omdat \( ρ ≤ 0 \) kunnen we het recept met het vaste aantal stappen gebruiken.

\({s}\) \({m}\) \({\dfrac{s-26.1}{30.6}}\) \({m_↑}\) \({m_↑-m}\) \({d_↑}\) \({ξ}\) \({m}\) \({d}\)
−5 −1 −1.0163399 −1 0 30 0 −1 30
−4 −1 −0.98366013 0 1 −4 −1 −1 31
0 0 −0.85294118 0 0 0 0 0 0
1 0 −0.82026144 0 0 1 0 0 1
29 0 0.094771242 1 1 −1 −1 0 29
30 1 0.12745098 1 0 0 0 1 0
59 1 1.0751634 2 1 −1 −1 1 29
60 2 1.1078431 2 0 0 0 2 0
89 2 2.0555556 3 1 −1 −1 2 29
90 3 2.0882353 3 0 0 0 3 0
119 3 3.0359477 4 1 −1 −1 3 29
120 4 3.0686275 4 0 0 0 4 0
148 4 3.9836601 4 0 28 0 4 28
149 4 4.0163399 5 1 −1 −1 4 29
150 5 4.0490196 5 0 0 0 5 0
153 5 4.1470588 5 0 3 0 5 3
154 5 4.1797386 5 0 4 0 5 4
209 6 5.9771242 6 0 29 0 6 29
210 7 6.0098039 7 0 0 0 7 0
214 7 6.1405229 7 0 4 0 7 4
215 7 6.1732026 7 0 5 0 7 5

en daar is inderdaad \( m_↑ ≥ m\).

Als \( p = \dfrac{f}{g} \), \( ψ = \dfrac{h}{g}\) en \( b = \dfrac{t}{g} \) breuken zijn (\( f, g, h, t \) zijn hele getallen met \( f \gt g \gt 0 \), \( 0 \le h, t \lt g \)) dan vinden we

\begin{align} s \| = σ + d = qm + r\dfloorratio{hm + t}{g} + d \label{eq:xnaary3r} \\ m_↑ \| = \dceilratio{s + \max(∆σ) + 1 − v}{p} − 1 \notag \\ \| = \dceilratio{gs + g\max(∆σ) + g − gv}{f} − 1 \notag \\ \| = \dceilratio{gs + g\max(∆σ) + g − t}{f} − 1 \notag \\ \| = \dfloorratio{gs + g\max(∆σ) + g − t − 1}{f} \eqavide{eq:ceil2floor} \\ ρ \| = 2r\dparen{1 − \dfrac{h}{g}} − 1 − q \\ d_↑ \| = s − qm_↑ − r\dfloorratio{hm_↑ + t}{g} \\ ξ \| = \dfloorratio{d_↑}{q + r} \\ m \| = m_↑ + ξ \\ d \| = s − qm − r\dfloorratio{hm + t}{g} \end{align}

Voor de kalender uit de vorige voorbeelden vinden we (met \( q = 30, ψ = 0.12 = 3/25, r = 5, b = 0.1 = 1/10 \)) \( f = 1530, g = 50, h = 6, t = 5 \) en dan

\begin{align*} σ \| = 30m + 5\dfloorratio{6m + 5}{50} \\ s \| = 30m + 5\dfloorratio{6m + 5}{50} + d \\ m_↑ \| = \dfloorratio{50s + 50×4 + 50 − 5 − 1}{1530} = \dfloorratio{50s + 244}{1530} \\ d_↑ \| = s − 30m_↑ − 5\dfloorratio{6m_↑ + 5}{50} \\ ξ \| = \dfloorratio{d_↑}{35} \\ m \| = m_↑ + ξ \\ d \| = s − 30m − 5\dfloorratio{6m + 5}{50} \end{align*}

\({m}\) \({σ}\)
0 0
1 30
2 60
3 90
4 120
5 150
6 180
7 210
8 245
9 275

\({s}\) \({m_↑}\) \({d_↑}\) \({ξ}\) \({m}\) \({d}\)
−5 −1 30 0 −1 30
−4 0 −4 −1 −1 31
−1 0 −1 −1 −1 34
0 0 0 0 0 0
1 0 1 0 0 1
148 4 28 0 4 28
149 5 −1 −1 4 29
150 5 0 0 5 0
209 6 29 0 6 29
210 7 0 0 7 0

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 \( \dfloor{ψm + b} \) het patroon van lange maanden (met verschuiving naar wens). We laten nu een willekeurig aantal van die patronen toe, elk met hun eigen lengteverschil \( r_i \) (dat positief of negatief mag zijn), voorkomstfractie \( 0 \lt ψ_i \lt 1 \) en verschuiving \( b_i \). Dan vinden we

\begin{align} σ \| = qm + \sum_{i}r_i \dfloor{ψ_im + b_i} \\ s = σ + d \| = qm + \sum_{i}r_i \dfloor{ψ_im + b_i} + d \label{eq:xnaary4} \end{align}

De afleiding van de formule in omgekeerde richting gaat analoog aan die van formule \eqref{eq:ynaarx3}. We vinden

\begin{align} σ_* \| = qm + \dfloor{\sum_i r_i (ψ_i m + b_i)} \notag \\ \| = \dfloor{pm + \sum_i r_i b_i} \notag \\ \| = pm + \sum_i r_i b_i − \dmod{\sum_i r_i \dparen{ψ_i m + b_i}}{1} \label{eq:σ*∑} \eqavide{eq:mod} \\ ∆σ = σ_* − σ \| = \dfloor{\sum_{i}r_{i}(ψ_{i}m + b)} − \sum_{i} r_{i}\dfloor{ψ_{i}m + b_{i}} \notag \\ \| = \dfloor{\sum_{i} r_{i}\dmod{ψ_{i}m + b_{i}}{1}} \eqavide{eq:dmoddiff1} \notag \end{align}

dus

\begin{align} v \| = \sum_i r_ib_i \\ \max(L) \| ≤ q + \sum_{r_i \gt 0} r_i \\ \max(∆σ) \| ≤ \dparen{\sum_{r_i \gt 0} r_i} − 1 \\ \min(∆σ) \| ≥ \sum_{r_i \lt 0} r_i \\ ρ \| = \max(∆σ) − \min(∆σ) + \max(L) − 2p \notag \\ \| ≤ 2\dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_{r_i \lt 0} r_i} − q − 1 − 2\dparen{\sum_i r_i ψ_i} \end{align}

We mogen voor \( \max(L) \) in onderstaande formules best een hogere waarde invullen, zoals de waarde die hierboven aan de rechterkant van \( \max(L) ≤ \) staat, en net zo voor de andere ongelijkheden. We doen daarom hieronder voor het gemak alsof die ongelijkheden gelijkheden zijn.

En dus

\begin{align} m_↑ \| = \dceilratio{s + \max(∆σ) + 1 − v}{p} − 1 \notag \\ \| = \dceilratio{s + \dparen{\sum_{r_i \gt 0} r_i} − \sum_i r_i b_i}{p} − 1 \label{eq:ynaarx4} \\ d_↑ \| = s − qm_↑ − \sum_i r_i\dfloor{ψ_i m_↑ + b_i} \\ ρ \| = 2\dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_{r_i \lt 0} r_i} − q − 1 − 2\dparen{\sum_i r_i ψ_i} \end{align}

Als \( ρ ≤ 0 \) dan schelen \( m \) en \( m_↑ \) hooguit 1. Die eis komt overeen met

\begin{align} 2\dparen{\sum_{r_i \gt 0} r_i} \| − \dparen{\sum_{r_i \lt 0} r_i} − q − 1 − 2\dparen{\sum_i r_i ψ_i} ≤ 0 \notag \\ \dparen{\sum_{r_i \gt 0} r_i} \| + \dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_{r_i \lt 0} r_i} − q − 1 − 2\dparen{\sum_i r_i ψ_i} ≤ 0 \notag \\ \dparen{\sum_{r_i \gt 0} r_i} \| + \dparen{\sum_{i} |r_i|} − q − 1 − 2\dparen{\sum_i r_i ψ_i} ≤ 0 \notag \\ \sum_{r_i \gt 0} r_i \| ≤ q + 1 + 2\dparen{\sum_i r_i ψ_i} − \dparen{\sum_{i} |r_i|} \eqavide{eq:singlepass} \end{align}

Dan

\begin{align} ξ \| = \dfloorratio{d_↑}{q + \sum_{r_i \gt 0} r_i} \\ m \| = m_↑ + ξ \label{eq:xζ4} \\ d \| = s − qm − \sum_i r_i\dfloor{ψ_i m + b_i} \end{align}

Als alle \( ψ_i = h_i/g_i \) en \( b_i = t_i/g_i \), en als aan eis \eqref{eq:singlepass} is voldaan

\begin{align} p \| = q + \sum_i r_iψ_i = q + \sum_i \dfrac{r_i h_i}{g_i} \\ g \| = \lcm(g_i) \\ γ_i \| = \dfrac{g}{g_i} \\ f \| = pg = gq + \sum_i γ_i r_i h_i \\ s \| = qm + \sum_i r_i\dfloorratio{h_im + t_i}{g_i} + d \label{eq:xnaary4r} \\ m_↑ \| = \dceilratio{s + \dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_i r_i b_i}}{f/g} − 1 \notag \\ \| = \dceilratio{gs + g\dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_i γ_i r_i t_i}}{f} − 1 \notag \\ \| = \dfloorratio{gs + g\dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_i γ_i r_i t_i} − 1}{f} \label{eq:ynaarx4r} \\ d_↑ \| = s − qm_↑ − \sum_i r_i\dfloorratio{h_im_↑ + t_i}{g_i} \\ ρ \| = 2\dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_{r_i \lt 0} r_i} − q − 1 − 2\dparen{\sum_i \dfrac{r_i h_i}{g_i}} \\ ξ \| = \dfloorratio{d_↑}{q + \sum_{r_i \gt 0} r_i} \\ m \| = m_↑ + ξ \\ d \| = s − qm − \sum_i r_i\dfloorratio{h_im + t_i}{g_i} \end{align}

\( g \) is het kleinste gemene veelvoud van de noemers van alle \( ψ_i \) en \( b_i \).

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 \( q = 17 \) en

\({i}\) \({r_i}\) \({ψ_i}\) \({g_i}\) \({h_i}\) \({t_i}\) \({γ_i}\)
1 2 1/3 3 1 0 5
2 3 1/5 5 1 0 3

en \( g = 15 \) (het product van noemers 3 en 5). Dan is

\begin{align*} p \| = 17 + 2×\dfrac{1}{3} + 3×\dfrac{1}{5} = 18 + \dfrac{4}{15} \\ f \| = pg = 15×\dparen{18 + \dfrac{4}{15}} = 274 = 15×17 + 5×2×1 + 3×3×1 \\ s \| = 17m + 2\dfloorratio{m}{3} + 3\dfloorratio{m}{5} \\ m_↑ \| = \dfloorratio{15s + 15×5 − 0 − 1}{274} = \dfloorratio{15s + 74}{274} \\ d_↑ \| = s − 17m_↑ − 2\dfloorratio{m_↑}{3} − 3\dfloorratio{m_↑}{5} \\ ρ \| = 2×5 − 0 − 17 − 1 − 2×\dparen{\dfrac{2×1}{3} + \dfrac{3×1}{5}} = −10 − \dfrac{8}{15} \\ ξ \| = \dfloorratio{d_↑}{22} \\ m \| = m_↑ + ξ \\ d \| = s − 17m − 2\dfloorratio{m}{3} − 3\dfloorratio{m}{5} \end{align*}

De volgende tabel toont de resultaten die je krijgt als je voor bepaalde kalenderdata \( m \), \( d \) de bijbehorende lopende dagnummers \( s \) uitrekent, en als je daarna uit die \( s \) weer het maandnummer \( m \) uitrekent.

\({m}\) \({d}\) \({s}\) \({m_↑}\) \({d_↑}\) \({ξ}\) \({m_↑+ξ}\)
0 0 0 0 0 0 0
0 16 16 1 −1 −1 0
1 0 17 1 0 0 1
1 16 33 2 −1 −1 1
2 0 34 2 0 0 2
2 18 52 3 −1 −1 2
3 0 53 3 0 0 3
3 16 69 4 −1 −1 3
4 0 70 4 0 0 4
4 19 89 5 −1 −1 4
5 0 90 5 0 0 5
5 18 108 6 −1 −1 5
6 0 109 6 0 0 6
6 16 125 7 −1 −1 6
7 0 126 7 0 0 7
7 16 142 8 −1 −1 7
8 0 143 8 0 0 8
8 18 161 9 −1 −1 8
9 0 162 9 0 0 9
9 19 181 10 −1 −1 9
10 0 182 10 0 0 10
10 16 198 11 −1 −1 10
11 0 199 11 0 0 11
11 18 217 12 −1 −1 11
12 0 218 12 0 0 12
12 16 234 13 −1 −1 12
13 0 235 13 0 0 13
13 16 251 14 −1 −1 13
14 0 252 14 0 0 14
14 21 273 15 −1 −1 14
15 0 274 15 0 0 15
15 16 290 16 −1 −1 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 voldoende klein is dan het maandnummer berekend met de overeenkomstige simpele kalender hooguit eentje fout is: \( 2\dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_{r_i \lt 0} r_i} − q − 1 − 2\dparen{\sum_i r_iψ_i} ≤ 0 \). 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 \( m_↑ \) en reken de bijbehorende \( d_↑\) en \( ξ \) uit. Is deze \( ξ \lt 0 \)? Trek dan 1 af van \( m_↑ \) en probeer opnieuw, net zo lang tot \( ξ = 0 \): dan heb je de juiste \( m \) gevonden.

Pas op! In eerdere hoofdstukken telden we \( ξ \) op bij \( m_↑ \) om het maandnummer te corrigeren, maar hier zijn we er niet zeker van dat we dan nooit een te klein maandnummer vinden. Een te groot maandnummer is eenvoudig te herkennen (dan is \( d_↑ \lt 0 \)) maar een te klein maandnummer niet. Dus hier moeten we niet \( ξ \) erbij tellen. Als \( ξ \lt 0 \), trek dan 1 af van het maandnummer en probeer het met dat nieuwe maandnummer, net zo lang tot \( ξ = 0 \).

Stel, \( q = 3 \), \( r = 7 \), \( ψ = 1/3 \), dan is \( h = 1 \), \( g = 3 \), \( f = 16 \), \( p = q + rψ = 3 + 5/3 = 5 \frac{2}{3} \) en \( ρ = \dfloor{2×5\frac{2}{3}} + 1 − 10 = 2 \) dus aan de eis \( r ≤ ρ \) 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*} m_↑ \| = \dfloorratio{3s + 20}{16} \\ σ \| = 3m + 7\dfloorratio{m}{3} \end{align*}

We vinden

\({s}\) \({m_↑}\) \({σ_↑}\) \({d₁}\) \({ξ₁}\) \({m₂}\) \({σ₂}\) \({d₂}\) \({ξ₂}\) \({m₃}\) \({σ₃}\) \({d₃}\) \({ξ₄}\) \({m}\) \({d}\)
0 1 3 −3 −1 0 0 0 0 0 0
1 1 3 −2 −1 0 0 1 0 0 1
2 1 3 −1 −1 0 0 2 0 0 2
3 1 3 0 0 1 0
4 2 6 −2 −1 1 3 1 0 1 1
5 2 6 −1 −1 1 3 2 0 1 2
6 2 6 0 0 2 0
7 2 6 1 0 2 1
8 2 6 2 0 2 2
9 2 6 3 0 2 3
10 3 16 −6 −1 2 6 4 0 2 4
11 3 16 −5 −1 2 6 5 0 2 5
12 3 16 −4 −1 2 6 6 0 2 6
13 3 16 −3 −1 2 6 7 0 2 7
14 3 16 −2 −1 2 6 8 0 2 8
15 4 19 −4 −1 3 16 −1 −1 2 6 9 0 2 9
16 4 19 −3 −1 3 16 0 0 3 0

Bijvoorbeeld: voor \( s = 11 \) vinden we

\begin{align*} m_1 \| = m_↑ = \dfloorratio{3×11 + 20}{16} = 3 \\ σ_1 \| = σ(m_1) = 3×3 + 7\dfloorratio{3}{3} = 16 \\ d_1 \| = s − σ_1 = 11 − 16 = −5 \end{align*}

Die \( d_1 \) is kleiner dan nul, dus verlagen we \( m \) met één (\( m_2 = m_1 − 1 = 2 \)) en proberen we het opnieuw. Met die nieuwe \( m \) vinden we

\begin{align*} σ_2 \| = 3×2 + 7\dfloorratio{2}{3} = 6 \\ d_2 \| = s − σ_2 = 11 − 6 = 5 \end{align*}

en dat is niet meer negatief, dus zijn we klaar. Voor \( s = 11 \) is \( m = 2 \) en \( d = 5 \).

Je kunt deze procedure desgewenst ook gebruiken als wel aan eis \eqref{eq:singlepass} is voldaan.

Het grootste aantal maandnummers dat je misschien moet nakijken voordat je de goede gevonden hebt is gelijk aan de maximale waarde die \( m_↑ − m_↓ \) kan bereiken, plus 1.

\begin{align} m_↑ − m_↓ \| = \dceilratio{s + \max(∆σ) + 1 − v}{p} − \dceilratio{s + \min(∆σ) + 1 − v}{p} \\ \| ≤ \dceilratio{\max(∆σ) − \min(∆σ)}{p} + 1 \eqavide{eq:ceildiffrange} \end{align}

dus het aantal maanden dat je hooguit hoeft te proberen is ten hoogste

\begin{equation} N = \dceilratio{\max(∆σ) − \min(∆σ)}{p} + 2 \end{equation}

Voor een kalender met twee maandlengtes wordt dat

\begin{equation} N = \dceilratio{r − 1}{p} + 2 \end{equation}

en voor een kalender met meer maandlengtes

\begin{align} N \| ≤ \dceilratio{\dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_{r_i \lt 0} r_i}}{p} + 2 \\ \| = \dceilratio{\sum_i |r_i|}{p} + 2 \end{align}

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 \( s \), lopende maandnummer \( m \), en dagnummer-in-de-maand \( d \) (allen beginnend bij 0) is dan

\({s}\) \({m}\) \({d}\)
0 0 0
1 0 1
6 0 6
7 1 0
19 1 12
20 2 0
24 2 4
25 3 0
35 3 10
36 4 0
39 4 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 \( s \) en het lopende maandnummer \( m \) 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

\begin{equation} \dfloorratio{s − a}{f} + 1 = \dfloorratio{s + f − a}{f} \end{equation}

De \( + 1 \) zorgt ervoor dat de uitkomst 0 is voor \( s \lt a \) en 1 voor \( s ≥ a \).

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

\[ m = \dfloorratio{s − 7}{40} + 1 = \dfloorratio{s + 33}{40} \]

\({s}\) \({s−7}\) \({m}\)
0 −7 0
1 −6 0
6 −1 0
7 0 1
8 1 1
46 39 1
47 40 2
48 41 2

Als er \( g \) maanden zijn, elk met hun eigen \( a_i \) (voor \( i \) van 0 tot en met \( g − 1 \)), dan is hun gecombineerde effect

\begin{equation} \sum_{i=0}^{g−1} \dparen{\dfloorratio{s − a_i}{f} + 1} = g + \sum_{i=0}^{g−1} \dfloorratio{s − a_i}{f} = \sum_{i=0}^{g−1} \dfloorratio{s + f − a_i}{f} \end{equation}

We willen zoals gewoonlijk dat maand \( m = 0 \) begint als \( s = 0 \), dus dan moet \( a_0 = 0 \) zijn.

Als de opeenvolgende maandlengtes gelijk zijn aan \( L_i \), dan zit de eerste trede bij \( a_0 = 0 \), de tweede bij \( a_1 = a_0 + L_0 = L_0 \), de derde bij \( a_2 = a_1 + L_1 = L_0 + L_1 \), en in het algemeen

\begin{equation} a_i = \sum_{j=0}^{i-1} L_j \end{equation}

Daarmee is

\begin{equation} m = \sum_{i=0}^{g−1} \dfloorratio{s + f − \sum_{j=0}^{i−1} L_j}{f} \label{eq:willekeurigynaarx} \end{equation}

Voor de voorbeeldkalender hebben we \( f = 40 \), \( g = 5 \) en

\({i}\) \({L_i}\) \({a_i}\)
1 7 0
2 13 7
3 5 20
4 11 25
5 4 36

en daarmee

\begin{align*} m \| = \dfloorratio{s + 40 − 0}{40} + \dfloorratio{s + 40 − 7}{40} + \dfloorratio{s + 40 − 20}{40} + \dfloorratio{s + 40 − 25}{40} + \dfloorratio{s + 40 − 36}{40} \\ \| = \dfloorratio{s + 40}{40} + \dfloorratio{s + 33}{40} + \dfloorratio{s + 20}{40} + \dfloorratio{s + 15}{40} + \dfloorratio{s + 4}{40} \end{align*}

Bijvoorbeeld, als \( s = 21 \) dan

\[ m = \dfloorratio{61}{40} + \dfloorratio{54}{40} + \dfloorratio{41}{40} + \dfloorratio{36}{40} + \dfloorratio{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 \( σ \) van de eerste dag van maand \( m \):

\begin{equation} σ = \sum_{i=0}^{g−1} L_i \dfloorratio{m + g − 1 − i}{g} \end{equation}

Met weer dezelfde kalender vinden we

\[ σ = 7 \dfloorratio{m + 4}{5} + 13 \dfloorratio{m + 3}{5} + 5 \dfloorratio{m + 2}{5} + 11 \dfloorratio{m + 1}{5} + 4 \dfloorratio{m}{5} \]

\({x}\) \({7⌊(x+4)/5⌋}\) \({{13⌊(x+3)/5⌋}}\) \({5⌊(x+2)/5⌋}\) \({11⌊(x+1)/5⌋}\) \({4⌊x/5⌋}\) \({c}\)
0 0 0 0 0 0 0
1 7 0 0 0 0 7
2 7 13 0 0 0 20
3 7 13 5 0 0 25
4 7 13 5 11 0 36
5 7 13 5 11 4 40

De formule om van het lopende maandnummer \( m \) en het dagnummer-in-de-maand \( d \) te gaan naar lopende dagnummer \( s \) (allen beginnend bij 0) is dan (met \( i \) die loopt van 0 tot en met \( g − 1 \))

\begin{equation} s = σ + d = \sum_{i=0}^{g−1} m_i \dfloorratio{m + g − 1 − i}{g} + d \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 \( s = \dfloor{pm + b} + d \). Om die kalender het begin van maand \( m \) op lopende dag \( s \) te laten leggen moeten we dus hebben \( s = \dfloor{pm + b} \) waaruit volgt dat \( s ≤ pm + b \lt s + 1 \) ofwel (voor \( m \gt 0 \)) \( (s − b)/m ≤ p \lt (s + 1 − b)/m \). We weten dat \( 0 ≤ b \lt 1 \), dus

\[ \frac{s − 1}{m} \lt \frac{s − b}{m} \le p \lt \frac{s + 1 − b}{p} \le \frac{s + 1}{p} \]

dus

\begin{equation} \frac{s − 1}{m} \lt p \lt \frac{s + 1}{m} \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 \( m = 1 \) heeft \( s = 7 \), dus moet \( 6 \lt p \lt 8 \). De eerste dag van maand \( m = 2 \) heeft \( s = 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 \( m = 1 \) goed te plaatsen moet \( p \) kleiner zijn dan 8, maar om het begin van maand \( m = 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 \( p \), dus meestal moet je verschillende perioden combineren. Stel we hebben formules voor twee perioden:

\begin{align} y_1 \| = D_1(\{ x_1, z_1 \}) \\ y_2 \| = D_2(\{ x_2, z_2 \}) \end{align}

We gebruiken hier geen \( m \), \( d \) en \( s \) omdat we de vrijheid willen hebben om andere kalendereenheden dan maanden en dagen te gebruiken. \( x \) telt de grotere eenheid, en \( y \) en \( z \) tellen de kleinere eenheid. \( y \) is het lopende aantal van die kleinere eenheid, en \( z \) is het aantal van die kleinere eenheid sinds het begin van de meest recente grotere eenheid. Relatie \( D_1 \) zegt dat je \( y_1 \) uit kunt rekenen uit \( x_1 \) en \( z_1 \), en net zo voor \( D_2 \).

De andere kant op hebben we

\begin{align} \{ x_1, z_1 \} \| = U_1(y_1) \\ \{ x_2, z_2 \} \| = U_2(y_2) \end{align}

waar \( U \) en \( D \) elkaars inverse zijn:

\begin{align} y \| = D(U(y)) \\ \{ x, z \} \| = U(D(\{ x, z \})) \end{align}

Om van de kalenderdatum naar het lopende dagnummer te gaan passen we eerst \( D_1 \) toe en dan \( D_2 \). 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 relaties dezelfde schrikkeleenheden, bijvoorbeeld dagen. In het tweede geval hebben de twee perioden verschillende 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 (\( r \gt 1 \)), of getrapt (dan meestal met \( r = 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 \| = \dfloorratio{7x_1}{3} + z_1 = σ_1 + z_1 \\ x_1 \| = \dfloorratio{3y_1 + 2}{7} \\ z_1 \| = \dfloorratio{⌊3y_1 + 2⌉_7}{3} \end{align*}

\begin{align*} y_2 \| = \dfloorratio{37x_2}{5} + z_2 = σ_2 + z_2 \\ x_2 \| = \dfloorratio{5y_2 + 4}{37} \\ z_2 \| = \dfloorratio{⌊5y_2 + 4⌉_{37}}{5} \end{align*}

en ook

\begin{align*} \{x_1, r_1\} \| = \Div(3y_1 + 2, 7) \\ z_1 \| = \dfloorratio{r_1}{3} \\ \{x_2, r_2\} \| = \Div(5y_2 + 4, 37) \\ z_2 \| = \dfloorratio{r_2}{5} \end{align*}

12.9.1. Vlakke combinatie

In dit geval is \( z_2 = y_1 \), dus we vinden

\begin{align} y_1 \| = D_1\dparen{\{x_1, z_1\}} \\ y_2 \| = D_2\dparen{\{x_2, z_2\}} = D_2\dparen{\{x_2, D_1\dparen{\{x_1, z_1\}}\}} \label{eq:vlak} \end{align}

en omgekeerd

\begin{align} \{ x_2, z_2 \} \| = U_2(y_2) \label{eq:vlakr} \\ \{ x_1, z_1 \} \| = U_1(z_2) \end{align}

of, schematisch

  x₂ ──────────┐
  x₁ ┐         │
  z₁ ┴ y₁ = z₂ ┴ y₂

De onderste rij heeft de kleinste kalendereenheid, meestal dagen. Steeds hogere rijen hebben steeds grotere tijdseenheden, bijvoorbeeld maanden en jaren. \( x_2 \) zou dan bijvoorbeeld het jaartal zijn, \( x_1 \) het maandnummer in het jaar, \( z_1 \) het dagnummer in de maand, \( y_1 \) het dagnummer in het jaar, en \( y_2 \) het lopende dagnummer.

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 berekening van \( x_2, x_1, z_1 \) uit \( y_2 \) voor de eerste 20 dagen:

\({y_2}\) \({x_2}\) \({r_2}\) \({z_2=y_1}\) \({x_1}\) \({r_1}\) \({z_1}\) \({\{x_2,x_1,z_1\}}\)
0 0 4 0 0 2 0 {0, 0, 0}
1 0 9 1 0 5 1 {0, 0, 1}
2 0 14 2 1 1 0 {0, 1, 0}
3 0 19 3 1 4 1 {0, 1, 1}
4 0 24 4 2 0 0 {0, 2, 0}
5 0 29 5 2 3 1 {0, 2, 1}
6 0 34 6 2 6 2 {0, 2, 2}
7 1 2 0 0 2 0 {1, 0, 0}
8 1 7 1 0 5 1 {1, 0, 1}
9 1 12 2 1 1 0 {1, 1, 0}
10 1 17 3 1 4 1 {1, 1, 1}
11 1 22 4 2 0 0 {1, 2, 0}
12 1 27 5 2 3 1 {1, 2, 1}
13 1 32 6 2 6 2 {1, 2, 2}
14 2 0 0 0 2 0 {2, 0, 0}
15 2 5 1 0 5 1 {2, 0, 1}
16 2 10 2 1 1 0 {2, 1, 0}
17 2 15 3 1 4 1 {2, 1, 1}
18 2 20 4 2 0 0 {2, 2, 0}
19 2 25 5 2 3 1 {2, 2, 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{align} y_1 \| = D_1\dparen{\{x_1, z_1\}} \\ y_2 \| = D_2\dparen{\{x_2, z_2\}} = D_2\dparen{D_1\dparen{\{x_1, z_1\}, z_2}} \end{align}

en omgekeerd

\begin{align} \{x_2, z_2\} \| = U_2(y_2) \\ \{x_1, z_1\} \| = U_1(x_2) \end{align}

of, schematisch

  x₁ ┐
  z₁ ┴ y₁ = x₂ ┐
  z₂ ──────────┴ y₂

Hier kan bijvoorbeeld \( x_1 \) het jaartal zijn, \( z_1 \) het maandnummer in het jaar, \( z_2 \) het dagnummer in de maand, \( y_1 \) het doorlopende maandnummer, en \( y_2 \) het doorlopende dagnummer.

Met onze twee voorbeeldkalenders vinden we

\({y_2}\) \({x_2=y_1}\) \({r_2}\) \({z_2}\) \({x_1}\) \({r_1}\) \({z_1}\) \({\{x_1,z_1,z_2\}}\)
0 0 4 0 0 2 0 {0, 0, 0}
1 0 9 1 0 2 0 {0, 0, 1}
2 0 14 2 0 2 0 {0, 0, 2}
3 0 19 3 0 2 0 {0, 0, 3}
4 0 24 4 0 2 0 {0, 0, 4}
5 0 29 5 0 2 0 {0, 0, 5}
6 0 34 6 0 2 0 {0, 0, 6}
7 1 2 0 0 5 1 {0, 1, 0}
8 1 7 1 0 5 1 {0, 1, 1}
9 1 12 2 0 5 1 {0, 1, 2}
10 1 17 3 0 5 1 {0, 1, 3}
11 1 22 4 0 5 1 {0, 1, 4}
12 1 27 5 0 5 1 {0, 1, 5}
13 1 32 6 0 5 1 {0, 1, 6}
14 2 0 0 1 1 0 {1, 0, 0}
15 2 5 1 1 1 0 {1, 0, 1}
16 2 10 2 1 1 0 {1, 0, 2}
17 2 15 3 1 1 0 {1, 0, 3}
18 2 20 4 1 1 0 {1, 0, 4}
19 2 25 5 1 1 0 {1, 0, 5}

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 \) (allemaal hele getallen groter dan 1) 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 \( s \) om te rekenen naar \( \{x\} \) kunnen we dan de volgende formule gebruiken:

\begin{equation} x_i = ⌊s + a_i⌉_{p_i} = (s + a_i) \bmod p_i \label{eq:cycli} \end{equation}

Hierin is \( a_i \) de waarde die \( x_i \) krijgt als \( s = 0 \). Die waarde hangt af van de kalender.

Stel dat in de kalender uit het vorige voorbeeld \( s = 0 \) overeenkomt met \( \{11, 8\} \). Dan is \( a_1 = 11 \) en \( a_2 = 8 \), en dan

\begin{align*} x_1 = \dmod{s + 11}{13} \\ x_2 = \dmod{s + 8}{20} \end{align*}

Dag \( s = 11 \) komt dan overeen met

\begin{align*} x_1 \| = \dmod{11 + 11}{13} = \dmod{22}{13} = 9 \\ x_2 \| = \dmod{11 + 8}{20} = \dmod{19}{20} = 19 \end{align*}

dus de datum is \( \{9, 19\} \).

Wat meer voorbeelden:

\({s}\) \({x_1}\) \({x_2}\)
0 11 8
1 12 9
2 0 10
3 1 11
10 8 18
11 9 19
12 10 0
13 11 1

12.10.2. Van datum naar doorlopend dagnummer

Het is een stuk lastiger om de andere kant op te gaan. Dan moeten we een \( s \) vinden zodat voor alle \( i \) aan vergelijking \eqref{eq:cycli} voldaan is, ofwel

\begin{equation} s ≡ 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 \( s \) oplossen uit

\begin{align} s \| ≡ c_1 \pmod{p_1} \label{eq:c1} \\ s \| ≡ c_2 \pmod{p_2} \label{eq:c2} \end{align}

Er zijn alleen oplossingen als

\begin{equation} c_1 ≡ c_2 \pmod{g} \end{equation}

waar

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

de grootste gemene deler van \( p_1 \) en \( p_2 \) is, dus we nemen aan dat hieraan voldaan is. Dan zijn er getallen \( n_1, n_2 \) te vinden waarvoor geldt

\begin{equation} g = n_1 p_1 + n_2 p_2 \end{equation}

en dan zijn de oplossingen

\begin{equation} s ≡ \dfrac{c_1 n_2 p_2 + c_2 n_1 p_1}{g} \pmod{\dfrac{p_1 p_2}{g}} \label{eq:cyclitoj} \end{equation}

De tellers van deze breuken bevatten een deler \( g \) dus deze delingen leveren altijd hele getallen op.

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 een oplossing van

\[ 1 = 13 n_1 + 20 n_2 \]

Je kunt \( g, n_1, n_2 \) vinden met behulp van het Uitgebreide Algoritme van Euclides. Je kunt \( n_1, n_2 \) ook vinden door oplopende waarden van \( n_1 \) (of \( n_2 \)) te proberen tot je er eentje vindt waarvoor het klopt. Je hebt een juiste \( n_1 \) gevonden als

\[ \dmod{13 n_1 − 1}{20} = 0 \]

Als je begint met \( n_1 = 1 \) en steeds eentje hoger gaat dan hoef je hooguit \( n_2 − 1 \) verschillende waarden te proberen.

\({n_1}\) \({\dmod{13n_1 − 1}{20}}\)
1 12
2 5
3 18
4 11
5 4
6 17
7 10
8 3
9 16
10 9
11 2
12 15
13 8
14 1
15 14
16 7
17 0
18 13
19 6
20 19
21 12

We zien dat \( n_1 = 17 \) een oplossing is. Dan is

\[ n_2 = \dfrac{1 − 13 n_1}{20} = \dfrac{1 − 13×17}{20} = −11 \]

dus

\[ 1 = 17×13 − 11×20 = 221 − 220 \]

Daarmee zijn de gevraagde lopende dagnummers

\begin{align*} s \| ≡ \dfrac{c_1n_2p_2 + c_2n_1p_1}{g} \pmod{\dfrac{p_1p_2}{g}} \\ \| ≡ \dfrac{(x_1 − 11)×(−220) + (x_2 − 8)×221}{1} \pmod{\dfrac{13×20}{1}} \\ \| ≡ −220 x_1 + 221 x_2 + 11×220 − 8×221 \\ \| ≡ −220 x_1 + 221 x_2 + 652 \pmod{260} \end{align*}

Omdat de voorgaande formule \( \pmod{260} \) is mag je bij elke term een willekeurig veelvoud van 260 optellen, dus als je geen negatieve getallen in de formule wilt dan kun je die omschrijven tot

\begin{align*} s \| ≡ (260 − 220) x_1 + 221 x_2 + (652 − 2×260) \\ \| ≡ 40 x_1 + 221 x_2 + 132 \pmod{260} \end{align*}

Voor datum \( \{9,19\} \) vinden we dan

\[ s ≡ 40×9 + 221×19 + 132 ≡ 4691 ≡ 11 \pmod{260} \]

dus dag \( s = 11 \) en elke 260 dagen eerder of later komen overeen met datum \( \{9, 19\} \).

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 voor de grootste gemene deler \( g \) niet gelijk is aan 1, met \( p_1 = 10 \), \( p_2 = 15 \), \( a_1 = a_2 = 0 \). Dan is

\begin{align*} x_1 = \dmod{s}{10} \\ x_2 = \dmod{s}{15} \end{align*}

Een oplossing voor

\[ g = n_1 p_1 + n_2 p_2 \]

is

\[ 5 = −1×10 + 1×15 \]

dus

\[ s ≡ \dfrac{15x_1 − 10x_2}{5} ≡ 3x_1 − 2x_2 \pmod{30} \]

\({s}\) \({x_1}\) \({x_2}\) \({3x_1−2x_2}\) \({\dmod{3x_1−2x_2}{30}}\)
0 0 0 0 0
9 9 9 9 9
10 0 10 −20 10
14 4 14 −16 14
15 5 0 15 15
19 9 4 19 19
20 0 5 −10 20
29 9 14 −1 29
30 0 0 0 0

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 \( s \) toepassen dan vinden we \( s ≡ 3×3 − 2×7 ≡ −5 ≡ 25 \pmod{30} \), maar voor \( s = 25 \) vinden we \( x_1 = \dmod{25}{10} = 5 \) en \( x_2 = \dmod{25}{15} = 10 \), dus \( \{5, 10\} \) en niet \( \{3, 7\} \). Ook voor onmogelijke \( \{x\} \) komt er een nette \( s \) uit de formule.

12.10.3. Meer dan twee cycli

Met behulp van formule \eqref{eq:cyclitoj} komt uit \( s ≡ c_1 \pmod{p_1} \) en \( s ≡ c_2 \pmod{p_2} \) een andere formule \( s ≡ C_2 \pmod{P_2} \) met

\begin{align} C_2 \| ≡ \dfrac{c_1n_2p_2 + c_2n_1p_1}{\gcd(p_1, p_2)} \\ P_2 \| ≡ \dfrac{p_1p_2}{\gcd(p_1, p_2)} \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 \( s ≡ c_3 \pmod{p_3} \), en zo door tot we alle \( p_i \) gehad hebben. Uiteindelijk vinden we een formule die weer diezelfde vorm heeft \( s ≡ 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

    \begin{align*} C_1 \| = x_1 − a_1 \\ P_1 \| = p_1 \end{align*}

  2. Voor \( i \) van 2 tot en met \( n \):

    1. Bereken \( g_i = \gcd(P_{i−1}, p_i) \), de grootste gemene deler van \( P_{i−1} \) en \( p_i \).

    2. Vind \( n_i, m_i \) zodat

      \[ g_i = n_i P_i + m_i p_i \]

    3. Zet

      \begin{align*} C_i \| = \dfrac{C_{i−1} m_i p_i + c_i n_i P_{i−1}}{g_i} \\ P_i \| = \dfrac{P_{i−1}p_i}{g_i} \end{align*}

  3. De oplossing is

    \begin{equation} s ≡ C_n \pmod{P_n} \label{eq:cycle} \end{equation}

Laten we een kalender bekijken met de volgende kenmerken:

\({i}\) \({p_i}\) \({a_i}\)
1 4 3
2 5 1
3 6 2

Dan reken je als volgt om van doorlopend dagnummer \( s \) naar kalenderdatum \( \{x\} \):

\begin{align*} x_1 \| = \dmod{s + 3}{4} \\ x_2 \| = \dmod{s + 1}{5} \\ x_3 \| = \dmod{s + 2}{6} \end{align*}

In de omgekeerde richting vinden we:

\begin{align*} P_1 \| = 4 \\ C_1 \| ≡ x_1 − 3 \pmod{P_1 = 4} \\ c_2 \| = x_2 − 1 \\ g_2 \| = \gcd(4, 5) = 1 = −1×4 + 1×5 = m_2P_1 + n_2p_2 \\ P_2 \| = \dfrac{P_1p_2}{g_2} = \dfrac{4×5}{1} = 20 \\ C_2 \| ≡ \dfrac{C_1 n_2 p_2 + c_2 m_2 P_1}{g_2} \\ \| ≡ 5 (x_1 − 3) − 4 (x_2 − 1) \\ \| ≡ 5 x_1 − 4 x_2 − 11 \\ \| ≡ 5 x_1 + 16 x_2 + 9 \pmod{P_2 = 20} \\ g_3 \| = \gcd(20, 6) = 2 = 1×20 − 3×6 = m_3P_2 + n_3p_3 \\ P_3 \| = \dfrac{P_2p_3}{g_3} = \dfrac{20×6}{2} = 60 \\ C_3 \| ≡ \dfrac{C_2 n_3 p_3 + c_3 m_3 P_2}{g_3} \\ \| ≡ −9 (5 x_1 + 16 x_2 + 9) + 10 (x_3 − 2) \\ \| ≡ ―45 x_1 − 144 x_2 + 10 x_3 − 101 \\ \| ≡ 15 x_1 + 36 x_2 + 10 x_3 + 19 \pmod{P_3 = 60} \end{align*}

De oplossing is

\[ s ≡ C_3 ≡ 15x_1 + 36x_2 + 10x_3 + 19 \pmod{60} \]

\({s}\) \({x_1}\) \({x_2}\) \({x_3}\) \({C_2}\) \({C_3}\)
0 3 1 2 0 0
1 0 2 3 1 1
2 1 3 4 2 2
3 2 4 5 3 3
4 3 0 0 4 4
5 0 1 1 5 5
6 1 2 2 6 6
7 2 3 3 7 7
8 3 4 4 8 8
9 0 0 5 9 9
10 1 1 0 10 10
11 2 2 1 11 11
12 3 3 2 12 12
13 0 4 3 13 13
14 1 0 4 14 14
27 2 3 5 7 27
28 3 4 0 8 28
29 0 0 1 9 29
30 1 1 2 10 30
31 2 2 3 11 31
654 1 0 2 14 54

Bijvoorbeeld, als \( s = 654 \), dan \( x_1 = \dmod{654 + 3}{4} = 1 \), \( x_2 = \dmod{654 + 1}{5} = 0 \), \( x_3 = \dmod{654 + 2}{6} = 2 \). En van \( \{x\} \) naar \( s \) vinden we

\[ s ≡ 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 \( s \) dat overeenkomt met datum \( \{x\} \) vonden we formule \eqref{eq:cycle}, die een oplossing geeft \( \bmod P_n \). Als je een dagnummer \( s \) 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 oplossing te zoeken die het dichtste bij een door ons gekozen datum \( s_0 \) ligt. Je kunt "het dichtste bij" hier op tenminste vier manieren uitleggen:

We bekijken die een voor een, voor \( s ≡ C_n \pmod{P_n} \).

12.10.4.1. De laatste op of voor

We zoeken de laatste \( s \) op of voor \( s_0 \) die voldoet aan \( s ≡ C_n \pmod{P_n} \). Dan, met \( k \) een heel getal,

\begin{align} s_0 − P_n \| \lt s ≤ s_0 \\ s_0 − P_n \| \lt C_n + kP_n ≤ s_0 \\ \frac{s_0 − C_n}{P_n} − 1 \| \lt k ≤ \frac{s_0 − C_n}{P_n} \end{align}

Er is maar één heel getal \( k \) dat aan deze ongelijkheid voldoet, namelijk

\begin{equation} k = \dfloorratio{s_0 − C_n}{P_n} \end{equation}

en daarmee

\begin{align} s \| = C_n + P_n \dfloorratio{s_0 − C_n}{P_n} \notag \\ \| = C_n + P_n \dparen{\frac{s_0 − C_n}{P_n} − \mod1ratio{s_0 − C_n}{P_n}} \notag \\ \| = C_n + (s_0 − C_n) − P_n \mod1ratio{s_0 − C_n}{P_n} \notag \\ \| = s_0 − \dmod{s_0 − C_n}{P_n} \notag \\ \| = s_0 − ((s_0 − C_n) \bmod P_n) \label{eq:nearestle} \end{align}

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:nearestle} vinden we dan \( s = 700 − \dmod{700 − 54}{60} = 700 − \dmod{646}{60} = 700 − 46 = 654 \) en dat klopt: 654 + 60 = 714 is groter dan 700, dus 654 is de laatste \( s \) die kleiner of gelijk is aan \( s_0 \) en die past bij datum \( \{1,0,2\} \).

We moeten \( s = 654 \) vinden voor \( s_0 \) van 654 tot en met 654 + 60 − 1 = 713, en dat doen we ook:

\({s_0}\) \({s_0−C_n}\) \({\dmod{s_0−C_n}{P_n}}\) \({s}\)
653 599 59 594
654 600 0 654
712 658 58 654
713 659 59 654
714 660 0 714

12.10.4.2. De eerste op of na

We zoeken de eerste \( s \) op of na \( s_0 \) die voldoet aan \( s ≡ C_n \pmod{P_n} \). Dan, met \( k \) een heel getal,

\begin{align} s_0 \| ≤ s \lt s_0 + P_n \\ s_0 \| ≤ C_n + kP_n \lt s_0 + P_n \\ \dfrac{s_0 − C_n}{P_n} \| ≤ k \lt \dfrac{s_0 − C_n}{P_n} + 1 \end{align}

Er is maar één heel getal \( k \) dat aan deze ongelijkheid voldoet, namelijk

\begin{equation} k = \dceilratio{s_0 − C_n}{P_n} \end{equation}

en daarmee

\begin{align} s \| = C_n + P_n \dceilratio{s_0 − C_n}{P_n} \notag \\ \| = C_n + P_n \dparen{\dfrac{s_0 − C_n}{P_n} + \dom1ratio{s_0 − C_n}{P_n}} \notag \\ \| = C_n + (s_0 − C_n) + P_n \dom1ratio{s_0 − C_n}{P_n} \\ \| = s_0 + \ddom{s_0 − C_n}{P_n} \\ \| = s_0 + \dmod{C_n − s_0}{P_n} \\ \| = s_0 + ((C_n − s_0) \bmod P_n) \label{eq:nearestge} \end{align}

Bijvoorbeeld, wat is de eerste dag op of na \( s_0 = 700 \) die overeenkomt met datum \( \{1,0,2\} \) in de kalender uit het vorige voorbeeld?

We hadden \( C_n = 54 \). Met formule \eqref{eq:nearestge} vinden we dan \( s = 700 + \dmod{54 − 700}{60} = 700 + \dmod{−646}{60} = 700 + 14 = 714 \) en dat klopt: 714 − 60 = 654 is kleiner dan 700, dus 714 is de eerste \( s \) die groter of gelijk is aan \( s_0 \) en die past bij datum \( \{1,0,2\} \).

We moeten \( s = 714 \) vinden voor \( s_0 \) van 714 − 60 + 1 = 655 tot en met 714, en dat doen we ook:

\({s_0}\) \({s_0−C_n}\) \({\dmod{C_n−s_0}{P_n}}\) \({s}\)
654 600 0 654
655 601 59 714
656 602 58 714
713 659 1 714
714 660 0 714
715 661 59 774

12.10.4.3. de laatste voor

De laatste \( s \) voor \( s_0 \) is één \( P_n \) eerder dan de eerste \( s \) op of na \( s_0 \), dus

\begin{equation} s = s_0 − P_n − \dmod{s_0 − C_n}{P_n} \end{equation}

12.10.4.4. De eerste na

De eerste \( s \) na \( s_0 \) is één \( P_n \) later dan de laatste \( s \) op of voor \( s_0 \), dus

\begin{align} s \| = s_0 + P_n + ⌈s_0 − C_n⌋_{P_n} \\ \| = s_0 + P_n + ⌊C_n − s_0⌉_{P_n} \end{align}

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:

 #     
2 3 4
\({p}\) \({q + \dfrac{h}{g}}\) \({q + r\dfrac{h}{g}}\) \({q + \sum_i \dfrac{r_i h_i}{g_i}}\)
\({f}\) \({qg + h}\) \({qg + rh}\) \({qg + \sum_i γ_i r_i h_i}\)
\({σ}\) \({\dfloorratio{fm + t}{g}}\) \({qm + r\dfloorratio{hm + t}{g}}\) \({qm + \sum_i r_i\dfloorratio{h_i m + t_i}{g_i}}\)
\({ρ}\) \({2r(1 − ψ) − 1 − q}\) \({2\dparen{\sum_{r_i\gt0}r_i} − \dparen{\sum_{r_i\lt0}r_i} − q − 1 − 2\sum_i \dfrac{r_ih_i}{g_i}}\)
\({w}\) \({gs + g − t − 1}\) \({gs + gr − rt − 1}\) \({gs + g\dparen{\sum_{r_i \gt 0}r_i} − \dparen{\sum_i γ_i r_i t_i} − 1}\)
\({m}\) \({\dfloorratio{w}{f}}\) \({\dfloorratio{w}{f}}\) \({\dfloorratio{w}{f}}\)
\({d}\) \({\dfloorratio{\dmod{w}{f}}{g}}\) \({s-qm-r\dfloorratio{hm+t}{g}}\) \({s−qm−\dparen{\sum_ir_i\dfloorratio{h_im+t_i}{g_i}}}\)
\({ξ}\) \({\dfloorratio{d}{q+r}}\) \({\dfloorratio{d}{q+\sum_{r_i \gt 0} r_i}}\)

Kalendertype 1 is als kalendertype 2 maar met \( t = 0 \).

Voor kalendertypen 3 en 4 geeft de formule voor \( m \) een bovengrens voor het maandnummer. De algemene procedure om het juiste maandnummer te vinden is dan:

Probeer de \( m \) die uit de formule in de tabel komt. Reken de bijbehorende \( σ\) uit en daarna \( d = s − σ \) en \( ξ \). Als \( ξ \) gelijk is aan 0 dan ben je klaar. Trek anders 1 af van \( m \) \(\) en probeer opnieuw.

Als \( ρ ≤ 0 \) dan hoef je \( ξ \) hooguit één maal uit te rekenen. Anders kunnen meer keren nodig zijn.

Als er meer dan twee tijdsperioden in het spel zijn, dan moeten verschillende kalenderniveaus gecombineerd worden.

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.

We geven verderop voor elke kalenderberekening een diagram. We leggen die diagrammen uit aan de hand van dit voorbeeld:

  j ───────────┐ ┌─ a₁ ──────────┐
               (1)               │
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        │
  d ─(−1)─ d₀ ─────────(2)─ d₁ ─(3)─ s ─(+J₀)─ J

De kalenderdatum met jaar, maand, dag \( j, m, d \) staat helemaal links, en het CJDN \( J \) staat rechts. De symbolen tussen haakjes, zoals (1) en (+J₀), geven een bewerking aan. De andere symbolen, zoals a₁ en d₁, geven tussenresultaten aan. De lijnen geven aan welke tussenresultaten uit de ene bewerking worden gebruikt in de andere bewerking. De tussenresultaten met namen met een a erin (zoals a₁) zijn gemeten in jaren, die met m zijn gemeten in maanden, en die met d, s, of J zijn gemeten in dagen. Namen met een c erin (zoals c₁, niet in bovenstaand diagram) zijn gemeten in eeuwen van 100 jaren. De bewerkingen met grotere eenheden staan hoger in het diagram dan die met kleinere eenheden.

De bewerkingen waarvoor een plus- of minteken tussen de haakjes staat geven de betreffende optelling of aftrekking aan als je van links (kalenderdatum) naar rechts (CJDN) gaat. Dus (+J₀) betekent dan dat je \( J_0 \) erbij telt. Als je van rechts (CJDN) naar links (kalenderdatum) gaat dat doe je juist het omgekeerde, dus dan betekent (+J₀) dat je \( J_0 \) er vanaf trekt.

Voor een bewerking waarvoor een getal zonder plus- of minteken tussen de haakjes staat geeft dat getal het volgnummer van de bewerking aan. Meer details van die bewerking worden dan later gegeven. De meeste van zulke bewerkingen (zoals hier bewerkingen 2 en 3) gaan van één naar twee getallen of omgekeerd, en komen overeen met één kalenderniveau uit het vorige hoofdstuk. En soms is er een bewerking (hier bewerking 1) die twee getallen aanpast, dus van twee getallen naar weer twee getallen gaat. Als het getal tussen ronde haken () staat dan gaat het om een kalenderniveau van type 1 of 2. Als het getal tussen rechte haken [] staat dan gaat het om een kalenderniveau van type 3 of 4.

Laten we kijken naar de maand \( m \). Gaand van links naar rechts komen we eerst bij (−1) dus er wordt 1 vanaf getrokken en dat levert \( m_0 \) op. Die gaat samen met \( j\) in bewerking 1 en dat levert \( a_1 \) (gemeten in jaren) en \( m_1 \) (gemeten in maanden) op. \( m_1 \) gaat naar bewerking 2, samen met \( d_0 \), en levert \( d_1 \) op. Die gaat samen met \( a_1 \) naar bewerking 3 en levert \( s \) op. Daar wordt \( J_0 \) bijgeteld en dan krijgen we het eindresultaat \( J \).

Je kunt het diagram ook van rechts naar links lezen. We beginnen met CJDN \( J \) aan de rechterkant. Gaand naar links komen we eerst bij (+J₀) dus er wordt \( J_0 \) van afgetrokken (omdat we van rechts naar links gaan) en dan vinden we \( s \). Die gaat in bewerking 3 en die levert \( a_1 \) en \( d_1 \) op. Die \( d_1 \) gaat in bewerking 2 en daar komen \( d_0 \) en \( m_1 \) uit. \( m_1 \) gaat samen met \( a_1 \) in bewerking 1 en daar komen \( j \) en \( m_0 \) uit. Dan komen we bij (−1) dus wordt er 1 bij opgeteld (omdat we van rechts naar links gaan) en dan vinden we \( m \).

In onderstaande berekeningen gebruiken we soms tussenresultaten die niet in die diagrammen staan. Die geven we aan met \( α_i \) als ze gemeten zijn in jaren, \( μ_i \) als ze gemeten zijn in maanden, \( δ_i \) als ze gemeten zijn in dagen, en \( ω_i \) als ze gemeten zijn in een andere eenheid. Die namen kunnen voor de tegengestelde kalenderrichtingen voor verschillende zaken gebruikt worden, dus \( α_1 \) in de beschrijving van hoe je van kalenderdatum naar lopende dagnummer gaat kan iets anders betekenen dan \( α_1 \) in de beschrijving van hoe je van lopende dagnummer naar kalenderdatum gaat.

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 rekenmaand 0 van het rekenjaar, en is de daaropvolgende februari rekenmaand 11 van datzelfde rekenjaar. We combineren een kalenderniveau tussen maanden en dagen met een kalenderniveau tussen jaren en dagen, en dan maken we met dat tweede kalenderniveau de lengte van het jaar zo dat de laatste rekenmaand (dus februari) toch korter wordt dan 30 dagen.

De berekeningen zijn schematisch zoals in het volgende diagram. We gaan nu van links naar rechts. Het jaar

  j ───────────┐ ┌─ a₁ ──────────┐
               (1)               │
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        │
  d ─(−1)─ d₀ ─────────(2)─ d₁ ─(3)─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's (zoals in het vorige hoofdstuk) is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 12 1 12 0 2 12
2 153 5 30 3 2 30.6
3 1461 4 365 1 0 365.25

  1. Eerst verschuiven we maanden en dagen zodat de eerste beginnen met waarde 0. 1 januari komt dan overeen met \( m_0 = 0, d_0 = 0 \).

    \begin{align} m_0 \| = m − 1 \\ d_0 \| = d − 1 \end{align}

  2. Berekening 1 verschuift het maandnummer en jaarnummer zodat maart de eerste rekenmaand (maand \( m_1 = 0 \)) van het rekenjaar \( a_1 \) is in plaats van januari:

    \begin{align} \{ α_1, m_1 \} \| = \Div(m_0 − 2, 12) \\ a_1 \| = j + α_1 \end{align}

    \({j}\) \({m}\) \({a_0}\) \({a_1}\) \({m_1}\)
    0 1 −1 −1 10
    0 2 −1 −1 11
    0 3 0 0 0
    0 10 0 0 7
    0 11 0 0 8
    0 12 0 0 9
    1 1 −1 0 10
    1 2 −1 0 11
    1 3 0 1 0

  3. Berekening 2 berekent het dagnummer \( d_1 \) sinds het begin van het rekenjaar uit het rekenmaandnummer \( m_1 \) en het dagnummer \( d_0 \) sinds het begin van de rekenmaand:

    \begin{equation} d_1 = \dfloorratio{153 m_1 + 2}{5} + d_0 = 30 m_1 + \dfloorratio{3 m_1 + 2}{5} + d_0 \end{equation}

    Dit is een kalenderniveau van type 2, met \( f = 153, g = 5, q = 30, h = 3, t = 2 \).

    \({m}\) \({d}\) \({m_1}\) \({d_0}\) \({d_1}\) \({L}\)
    1 1 10 0 306 31
    1 2 10 1 307
    1 31 10 30 336
    2 1 11 0 337
         ? 
    2 2 11 1 338
    2 28 11 27 364
    2 29 11 28 365
    3 1 0 0 0 31
    4 1 1 0 31 30
    5 1 2 0 61 31
    6 1 3 0 92 30
    7 1 4 0 122 31
    8 1 5 0 153 31
    9 1 6 0 184 30
    10 1 7 0 214 31
    11 1 8 0 245 30
    12 1 9 0 275 31
    12 31 9 30 305 30

    In bovenstaande tabel geeft \( L \) de lengte van de betreffende maand aan. De lengte van de laatste rekenmaand van het jaar (dus februari) is aangegeven als "?" omdat die bepaald wordt door de lengte van het jaar, en die is niet steeds hetzelfde.

  4. Berekening 3 berekent het lopende dagnummer \( s \) sinds het begin van rekenjaar 0 uit het rekenjaar \( a_1 \) en het dagnummer \( d_1 \) sinds het begin van het rekenjaar:

    \begin{equation} s = \dfloorratio{1461 a_1}{4} + d_1 \end{equation}

    Dit is een kalenderniveau van type 2, met \( f = 1461, g = 4, q = 365, h = 1, t = 0 \).

    \({a_1}\) \({s}\) \({L}\)
    0 0 365
    1 365 365
    2 730 365
    3 1095 366
    4 1461

    In bovenstaande tabel geeft \( L \) de lengte van het betreffende jaar aan: 3 jaren van 365 dagen elk, gevolgd door een jaar van 366 dagen ― het schrikkelaar. Na die 4 jaren herhaalt de boel zich.

  5. En dan tellen we er de CJDN van het begin van rekenjaar 0 (dus 1 maart van jaar 0) nog bij, en dat is 1721118:

    \begin{equation} J = s + J_0 = s + 1721118 \end{equation}

We kunnen voorgaande stappen samenvoegen tot

\begin{align} \{ a_2, m_1 \} \| = \Div(m ― 3, 12) \\ J \| = \dfloorratio{1461\dparen{j + a_2}}{4} + \dfloorratio{153m_1 + 2}{5} + d + 1721117 \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*} m_0 \| = m − 1 = 7 − 1 = 6 \\ d_0 \| = d − 1 = 6 − 1 = 5 \\ α_1 \| = m_0 − 2 = 6 − 2 = 4 \\ \{ a_0, m_1 \} \| = \Div(α_1, 12) = \Div(4, 12) = \{ 0, 4 \} \\ a_1 \| = j + a_0 = 2003 + 0 = 2003 \\ d_1 \| = \dfloorratio{153 m_1 + 2}{5} + d_0 = \dfloorratio{153×4 + 2}{5} + 5 = \dfloorratio{614}{5} + 5 = 122 + 5 = 127 \\ s \| = \dfloorratio{1461 a_1}{4} + d_1 = \dfloorratio{1461×2003}{4} + 122 = 731595 + 127 = 731722 \\ J \| = 731722 + 1721118 = 2452840 \end{align*}

Of, met de samengevoegde formules:

\begin{align*} \{ a_2, m_1 \} \| = \Div(m ― 3, 12) = \Div(7 ― 3, 12) = \{ 0, 4 \} \\ J \| = \dfloorratio{1461\dparen{j + a_2}}{4} + \dfloorratio{153m_1 + 2}{5} + d + 1721117 \\ \| = \dfloorratio{1461×2003}{4} + \dfloorratio{153×4 + 2}{5} + 6 + 1721117 \\ \| = 731595 + 122 + 6 + 1721117 = 2452840 \end{align*}

Nog wat meer voorbeelden:

\({j}\) \({m}\) \({d}\) \({m_0}\) \({d_0}\) \({α_1}\) \({a_0}\) \({m_1}\) \({a_1}\) \({d_1}\) \({s}\) \({J}\)
−1 12 31 11 30 9 0 9 −1 305 −61 1721057
0 1 1 0 0 −2 −1 10 −1 306 −60 1721058
0 2 28 1 27 −1 −1 11 −1 364 −2 1721116
0 2 29 1 28 −1 −1 11 −1 365 −1 1721117
0 3 1 2 0 0 0 0 0 0 0 1721118
1999 12 31 11 30 9 0 9 1999 305 730439 2451557
2000 1 1 0 0 −2 −1 10 1999 306 730440 2451558
2000 2 28 1 27 −1 −1 11 1999 364 730498 2451616
2000 2 29 1 28 −1 −1 11 1999 365 730499 2451617
2000 3 1 2 0 0 0 0 2000 0 730500 2451618
2003 7 6 6 5 4 0 4 2003 127 731722 2452840

13.1.2. Van CJDN naar Juliaanse datum (1)

Hiervoor doorlopen we de omgekeerde procedure als hierboven.

  j ───────────┐ ┌─ a₁ ──────────┐
               (1)               │
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        │
  d ─(−1)─ d₀ ─────────(2)─ d₁ ─(3)─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's (zoals in het vorige hoofdstuk) is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 12 1 12 0 2 12
2 153 5 30 3 2 30.6
3 1461 4 365 1 0 365.25

  1. Eerst bepalen we het lopende dagnummer \( s \) door van de CJDN \( J \) van de gewenste datum de CJDN van het begin van rekenjaar 0 af te trekken.

    \begin{equation} s = J − J_0 = J − 1721118 \end{equation}

  2. Berekening 3 berekent uit het lopende dagnummer \( s \) het rekenjaar \( a_1 \) en het dagnummer \( d_1 \) sinds het begin van dat rekenjaar.

    \begin{align} \{ a_1, ω_1 \} \| = \Div(4s + 3, 1461) \\ d_1 \| = \dfloorratio{ω_1}{4} \end{align}

  3. Berekening 2 berekent de rekenmaand \( m_1 \) en dagnummer \( d_0 \) sinds het begin van de rekenmaand uit dagnummer \( d_1 \) sinds het begin van het rekenjaar.

    \begin{align} \{ m_1, ω_2 \} \| = \Div(5d_1 + 2, 153) \\ d_0 \| = \dfloorratio{ω_2}{5} \end{align}

  4. Berekening 1 verschuift het maandnummer en jaarnummer zodat januari en niet maart maand 0 is.

    \begin{align} \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) \\ j \| = a_1 + α_1 \end{align}

  5. En als laatste verschuiven we het maandnummer en dagnummer zodat ze beginnen bij 1 en niet 0.

    \begin{align} m \| = m_0 + 1 \\ d \| = d_0 + 1 \end{align}

We kunnen dit een beetje indikken:

\begin{align} \{ a_1, ω_1 \} \| = \Div(4J − 6884469, 1461) \\ \{ m_1, ω_2 \} \| = \Div\dparen{5\dfloorratio{ω_1}{4} + 2, 153} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) \\ j \| = a_1 + α_1 \\ m \| = m_0 + 1 \\ d \| = \dfloorratio{ω_2}{5} + 1 \end{align}

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

\begin{align*} s \| = J − J_0 = 2452840 − 1721118 = 731722 \\ \{ a_1, ω_1 \} \| = \Div(4s + 3, 1461) \\ \| = \Div(4×731722 + 3, 1461) = \Div(2926891, 1461) = \{2003, 508\} \\ d_1 \| = \dfloorratio{ω_1}{4} = \dfloorratio{508}{4} = 127 \\ \{ m_1, ω_2 \} \| = \Div(5d_1 + 2, 153) \\ \| = \Div(5×127 + 2, 153) = \Div(637, 153) = \{4, 25\} \\ d_0 \| = \dfloorratio{ω_2}{5} = \dfloorratio{25}{5} = 5 \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) = \Div(4 + 2, 12) = \{ 0, 6 \} \\ j \| = a_1 + α_1 = 2003 − 0 = 2003 \\ m \| = m_0 + 1 = 6 + 1 = 7 \\ d \| = d_0 + 1 = 5 + 1 = 6 \end{align*}

De datum is 6 juli 2003.

Of, op de ingedikte manier:

\begin{align*} \{ a_1, ω_1 \} \| = \Div(4J − 6884469, 1461) = \Div(4×2452840 − 6884469, 1461) \\ \| = \Div(2926891, 1461) = \{2003, 508\} \\ \{ m_1, ω_2 \} \| = \Div\dparen{5\dfloorratio{ω_1}{4} + 2, 153} = \Div\dparen{5\dfloorratio{508}{4} + 2, 153} \\ \| = \Div(5×127 + 2, 153) = \Div(637, 153) = \{4, 25\} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) = \Div(4 + 2, 12) = \Div(6, 12) = \{0, 6\} \\ j \| = a_1 + α_1 = 2003 + 0 = 2003 \\ m \| = m_0 + 1 = 6 + 1 = 7 \\ d \| = \dfloorratio{ω_2}{5} + 1 = \dfloorratio{25}{5} + 1 = 5 + 1 = 6 \end{align*}

Nog wat meer voorbeelden:

\({J}\) \({s}\) \({a_1}\) \({ω_1}\) \({d_1}\) \({m_1}\) \({ω_2}\) \({d_0}\) \({α_1}\) \({m_0}\) \({j}\) \({m}\) \({d}\)
−1 −1721119 −4713 1220 305 9 150 30 0 2 0 3 1
0 −1721118 −4713 1224 306 10 2 0 1 0 −4712 1 1
1721057 −61 −1 1220 305 9 150 30 0 11 −1 12 31
1721058 −60 −1 1224 306 10 2 0 1 0 0 1 1
1721117 −1 −1 1460 365 11 144 28 1 1 0 2 29
1721118 0 0 3 0 0 2 0 0 2 0 3 1
2451557 730439 1999 1220 305 9 150 30 0 11 1999 12 31
2451558 730440 1999 1224 306 10 2 0 1 0 2000 1 1
2451616 730498 1999 1456 364 11 139 27 1 1 2000 2 28
2451617 730499 1999 1460 365 11 144 28 1 1 2000 2 29
2451618 730500 2000 3 0 0 2 0 0 2 2000 3 1
2452840 731722 2003 508 127 4 25 5 0 6 2003 7 6

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 naar een doorlopend dagnummer 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.

De berekeningen zijn schematisch als volgt:

  j ────────────┐
  m ─(−1)─ m₀ ─(1)─ m₁ ─┐
  d ─(−1)─ d₀ ─────────[2]─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 12 1 12 0 0 12
2.1 1461 48 30 1 7 5 12 4 30.4375
2.2 −2 1 10 12 4
2.3 1 1 46 48 1

  1. Eerst verschuiven we maanden en dagen zodat de eerste beginnen met waarde 0. 1 januari komt dan overeen met \( m_0 = 0, d_0 = 0 \).

    \begin{align} m_0 \| = m − 1 \\ d_0 \| = d − 1 \end{align}

  2. Berekening 1 rekent het jaartal \( j \) en het maandnummer \( m_0 \) sinds het begin van het jaar om naar een doorlopend maandnummer \( m_1 \), maar dat is erg simpel:

    \begin{equation} m_1 = 12j + m_0 \end{equation}

    Dit is een kalenderniveau van type 2, met \( f = 12, g = 0, q = 12, h = 0, t = 0 \). Omdat \( t = 0 \) is het ook een kalenderniveau van type 1.

  3. Berekening 2 moet het doorlopende maandnummer \( m_1 \) omrekenen naar een doorlopend dagnummer \( s \). Van de 12 maanden van een jaar zijn er 7 lang, met elk 31 dagen, dus hebben we een formule zoals \( \dfloor{(7(m_1 + a))/12} \) nodig (dat zich elke 12 maanden herhaalt), maar wat moet dan de waarde van \( a \) zijn?

    Met \( a = 0 \) krijgen we de waarden

    \({m_1}\) \({\dfloorratio{7m_1}{12}}\)
    0 0 0
    1 0 1
    2 1 0
    3 1 1
    4 2 0
    5 2 1
    6 3 1
    7 4 0
    8 4 1
    9 5 0
    10 5 1
    11 6 1
    12 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, want juli en augustus (de 7e en 8e maanden) zijn allebei lang. Dat krijgen we als we het patroon verschuiven over −1 maand (eentje naar links), dus \( a = −1 \). Dan is \( t = \dmod{fa}{g} = \dmod{−7}{12} = 5 \), dus vinden we \( \dfloor{(7m_1 + 5)/12} \).

    Dan zijn alle maanden goed, behalve februari (\( m_1 = 1 \)) want die krijgt dan 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\dfloor{(m_1 + 10)/12} \). We tellen er in het eerste van elke vier jaar weer 1 dag bij met de formule \( \dfloor{(x_2 + 46)}{48} \). Al met al vinden we

    \begin{equation} s = 30m_1 + \dfloorratio{7m_1 + 5}{12} − 2\dfloorratio{m_1 + 10}{12} + \dfloorratio{m_1 + 46}{48} + d_0 \end{equation}

    Dit is kalendertype 4 met

    \( q = 30 \), \( g = 48 \), \( \{ r_1, h_1, t_1, g_1 \} = \{ 1, 7, 5, 12 \} \), \( \{r_2, h_2, t_2, g_2 \} = \{ −2, 1, 10, 12 \} \), \( \{ r_3, h_3, t_3, g_3 \} = \{ 1, 1, 46, 48\} \).

  4. En dan tellen we nog de CJDN van het begin van jaar 0 (1 january van het jaar 0) er bij op, en dat is 1721058.

    \begin{equation} J = s + J_0 = s + 1721058 \end{equation}

Dit dikt in tot

\begin{align} m_1 \| = 12j + m − 1 \\ J \| = 30m_1 + \dfloorratio{7m_1 + 5}{12} − 2\dfloorratio{m_1 + 10}{12} + \dfloorratio{m_1 + 46}{48} + d + 1721057 \end{align}

Bijvoorbeeld, wat is het CJDN dat hoort bij Juliaanse datum 6 juli 2003? Dan is \( j = 2003 \), \( m = 7 \), \( d = 6 \), en dan

\begin{align*} m_0 \| = m − 1 = 6 \\ d_0 \| = d − 1 = 5 \\ m_1 \| = 12j + m_0 = 12×2003 + 6 = 24042 \\ s \| = 30m_1 + \dfloorratio{7m_1 + 5}{12} − 2\dfloorratio{m_1 + 10}{12} + \dfloorratio{m_1 + 46}{48} + d_0 \\ \| = 30×24042 + \dfloorratio{7×24042 + 5}{12} − 2×\dfloorratio{24042 + 10}{12} + \dfloorratio{24042 + 46}{48} + 5 \\ \| = 721260 + \dfloorratio{168299}{12} − 2×\dfloorratio{24052}{12} + \dfloorratio{24088}{48} + 5 \\ \| = 721260 + 14024 − 2×2004 + 501 + 5 = 731782 \\ J \| = s + J_0 = 731782 + 1721058 = 2452840 \end{align*}

Of, op de ingedikte manier:

\begin{align*} m_1 \| = 12j + m − 1 = 12×2003 + 7 − 1 = 24042 \\ J \| = 30m_1 + \dfloorratio{7m_1 + 5}{12} − 2\dfloorratio{m_1 + 10}{12} + \dfloorratio{m_1 + 46}{48} + d + 1721057 \\ \| = 30×24042 + \dfloorratio{7×24042 + 5}{12} − 2\dfloorratio{24042 + 10}{12} + \dfloorratio{24042 + 46}{48} + 6 + 1721057 \\ \| = 721260 + \dfloorratio{168299}{12} − 2\dfloorratio{24052}{12} + \dfloorratio{24088}{48} + 1721063 \\ \| = 721260 + 14024 − 2×2004 + 501 + 1721063 = 2452840 \end{align*}

Nog wat meer voorbeelden:

\({j}\) \({m}\) \({d}\) \({m_0}\) \({d_0}\) \({m_1}\) \({\dfloorratio{7m_1+5}{12}}\) \({\dfloorratio{m_1+10}{12}}\) \({\dfloorratio{m_1+46}{48}}\) \({s}\) \({J}\)
−1 12 31 11 30 −1 −1 0 0 −1 1721057
0 1 1 0 0 0 0 0 0 0 1721058
0 12 31 11 30 11 6 1 1 365 1721423
1 1 1 0 0 12 7 1 1 366 1721424
2003 2 28 1 27 24037 14022 2003 501 731654 2452712
2003 3 1 2 0 24038 14022 2004 501 731655 2452713
2003 7 6 6 5 24042 14024 2004 501 731782 2452840
2003 12 31 11 30 24047 14027 2004 501 731960 2453018
2004 1 1 0 0 24048 14028 2004 501 731961 2453019
2004 2 28 1 27 24049 14029 2004 501 732019 2453077
2004 2 29 1 28 24049 14029 2004 501 732020 2453078
2004 3 1 2 0 24050 14029 2005 502 732021 2453079

13.1.4. Van CJDN naar Juliaanse datum (2)

De berekeningen zijn schematisch als volgt:

  j ────────────┐
  m ─(−1)─ m₀ ─(1)─ m₁ ─┐
  d ─(−1)─ d₀ ─────────[2]─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 12 1 12 0 0 12
2.1 1461 48 30 1 7 5 12 4 30.4375
2.2 −2 1 10 12 4
2.3 1 1 46 48 1

Hiervoor doorlopen we dezelfde procedure als hierboven, maar in de omgekeerde richting. Eerst berekenen we het lopende dagnummer \( s \) door van de CJDN \( J \) van de gezochte datum de CJDN \( J_0 \) van het begin van jaar 0 af te trekken.

\begin{equation} s = J − J_0 = J − 1721058 \end{equation}

Berekening 2 levert het lopende maandnummer \( m_1 \) en het dagnummer \( d_0 \) sinds het begin van de maand op uit het lopende dagnummer \( s \).

We hebben

\begin{align} μ_1 \| = \dfloorratio{gs + g\dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_i γ_i r_i t_i} − 1}{f} \notag \\ \| = \dfloorratio{48s + 48×2 − (4×1×5 + 4×−2×10 + 1×1×46) − 1}{1461} \notag \\ \| = \dfloorratio{48s + 109}{1461} \notag \\ δ_1 \| = s − 30μ_1 − \dfloorratio{7μ_1 + 5}{12} + 2\dfloorratio{μ_1 + 10}{12} − \dfloorratio{μ_1 + 46}{48} \end{align}

Omdat \( ρ ≤ 0 \) mogen we de procedure met het vaste aantal stappen gebruiken. Dan

\begin{align} m_1 \| = μ_1 + \dfloorratio{δ_1}{32} \\ d_0 \| = s − 30m_1 − \dfloorratio{7m_1 + 5}{12} + 2\dfloorratio{m_1 + 10}{12} − \dfloorratio{m_1 + 46}{48} \end{align}

Berekening 1 gaat van lopend maandnummer \( m_1 \) naar jaarnummer \( j \) en maandnummer \( m_0 \) sinds het begin van het jaar. Dit is een kalenderniveau van type 1.

\begin{equation} \{ j, m_0 \} = \Div(m_1, 12) \end{equation}

En als laatste verschuiven we het maandnummer en dagnummer zodat ze beginnen bij 1 en niet 0.

\begin{align} m \| = m_0 + 1 \\ d \| = d_0 + 1 \end{align}

Bijvoorbeeld, wat is de Juliaanse datum die hoort bij CJDN 2452840? Dan is \( J = 2452840 \), en daarmee

\begin{align*} s \| = 2452840 − 1721058 = 731782 \\ μ_1 \| = \dfloorratio{48×731782 + 109}{1461} \\ \| = \dfloorratio{35125645}{1461} = 24042 \\ δ_1 \| = 731782 − 30×24042 − \dfloorratio{7×24042 + 5}{12} \\ \| + 2×\dfloorratio{24042 + 10}{12} − \dfloorratio{24042 + 46}{48} \\ \| = 731782 − 721260 − \dfloorratio{168299}{12} + 2×\dfloorratio{24052}{12} − \dfloorratio{24088}{48} \\ \| = 10522 − 14024 + 2×2004 − 501 = 5 \\ m_1 \| = 24042 + \dfloorratio{5}{32} = 24042 \\ d_0 \| = 5 \\ \{ j, m_0 \} \| = \Div(24042, 12) = \{ 2003, 6 \} \\ m \| = 6 + 1 = 7 \\ d \| = 5 + 1 = 6 \end{align*}

dus de datum is 6 juli 2003.

Nog wat meer voorbeelden:

\({J}\) \({s}\) \({μ_1}\) \({δ_1}\) \({m_1}\) \({d_0}\) \({m_0}\) \({j}\) \({m}\) \({d}\)
1721057 −1 0 −1 −1 30 11 −1 12 31
1721058 0 0 0 0 0 0 0 1 1
1721423 365 12 −1 11 30 11 0 12 31
1721424 366 12 0 12 0 0 1 1 1
2452712 731654 24037 27 24037 27 1 2003 2 28
2452713 731655 24038 0 24038 0 2 2003 3 1
2452840 731782 24042 5 24042 5 6 2003 7 6
2453018 731960 24048 −1 24047 30 11 2003 12 31
2453019 731961 24048 0 24048 0 0 2004 1 1
2453077 732019 24049 27 24049 27 1 2004 2 28
2453078 732020 24050 −1 24049 28 1 2004 2 29
2453079 732021 24050 0 24050 0 2 2004 3 1

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 \). De berekeningen zijn zoals getoond in het volgende diagram:

                         ┌── c₁ ──────────┐
  j ───────────┐ ┌─ a₁ ─(2)─ a₂ ─┐        │
               (1)               │        │
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        │        │
  d ─(−1)─ d₀ ─────────(3)─ d₁ ─(4)─ d₂ ─(5)─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 12 1 12 0 2 12
2 100 1 100 0 0 100
3 153 5 30 3 2 30.6
4 36525 100 365 25 0 365.25
5 146097 4 36524 1 0 36524.25

De stappen zijn nu als volgt, van de Gregoriaanse kalender naar het CJDN:

  1. Eerst verschuiven we maanden en dagen zodat de eerste beginnen met waarde 0. 1 januari komt dan overeen met \( m_0 = 0, d_0 = 0 \).

    \begin{align} m_0 \| = m − 1 \\ d_0 \| = d − 1 \end{align}

  2. Berekening 1 verschuift het maandnummer en jaarnummer zodat maart de eerste rekenmaand (maand \( m_1 = 0 \)) van het rekenjaar \( a_1 \) is in plaats van januari, net als voor de Juliaanse kalender (13.1.1):

    \begin{align} \{ α_1, m_1 \} \| = \Div(m_0 − 2, 12) \\ a_1 \| = j + α_1 \end{align}

  3. Berekening 2 rekent het rekeneeuwnummer \( c_1 \) en jaarnummer \( a_2 \) sinds het begin van de rekeneeuw uit uit het rekenjaarnummer \( a_1 \).

    \begin{equation} \{ c_1, a_2 \} = \Div(a_1, 100) \end{equation}

  4. Berekening 3 berekent het dagnummer \( d_1 \) sinds het begin van het rekenjaar uit het rekenmaandnummer \( m_1 \) en het dagnummer \( d_0 \) sinds het begin van de rekenmaand:

    \begin{equation} d_1 = \dfloorratio{153 m_1 + 2}{5} + d_0 = 30 m_1 + \dfloorratio{3 m_1 + 2}{5} + d_0 \end{equation}

  5. Berekening 4 rekent het dagnummer \( d_2 \) sinds het begin van de rekeneeuw uit uit het jaarnummer \( a_2 \) sinds het begin van de rekeneeuw en het dagnummer \( d_1 \) sinds het begin van het rekenjaar.

    \begin{equation} d_2 = \dfloorratio{36525 a_2}{100} + d_1 \end{equation}

  6. Berekening 5 rekent het lopende dagnummer \( s \) uit uit het rekeneeuwnummer \( c_1 \) en het dagnummer \( d_2 \) sinds het begin van de rekeneeuw.

    \begin{equation} s = \dfloorratio{146097 c_1}{4} + d_2 \end{equation}

  7. En dan tellen we er de CJDN van het begin van rekenjaar 0 (dus 1 maart van jaar 0) nog bij, en dat is 1721120:

    \begin{equation} J = s + J_0 = s + 1721120 \end{equation}

Samengevoegd en ingedikt geeft dat:

\begin{align} \{ α_1, m_1 \} \| = \Div(m − 3, 12) \\ \{ c_1, a_2 \} \| = \Div(j + α_1, 100) \\ J \| = \dfloorratio{146097 c_1}{4} + \dfloorratio{36525 a_2}{100} + \dfloorratio{153 m_1 + 2}{5} + d + 1721119 \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*} m_0 \| = m − 1 = 7 − 1 = 6 \\ d_0 \| = d − 1 = 6 − 1 = 5 \\ \{ α_1, m_1 \} \| = \Div(m_0 − 2, 12) = \Div(4, 12) = \{ 0, 4 \} \\ a_1 \| = j + α_1 = 2003 + 0 = 2003 \\ \{ c_1, a_2 \} \| = \Div(a_1, 100) = \Div(2003, 100) = \{ 20, 3 \} \\ d_1 \| = \dfloorratio{153m_1 + 2}{5} + d_0 = \dfloorratio{153×4 + 2}{5} + 5 \\ \| = \dfloorratio{614}{5} + 5 = 122 + 5 = 127 \\\ d_2 \| = \dfloorratio{36525a_2}{100} + d_1 = \dfloorratio{36525×3}{100} + 127 \\ \| = \dfloorratio{109575}{100} + 127 = 1095 + 127 = 1222 \\ s \| = \dfloorratio{146097c_1}{4} + d_2 = \dfloorratio{146097×20}{4} + 1222 \\ \| = \dfloorratio{2921940}{4} + 1222 = 730485 + 1222 = 731707 \\ J \| = s + 1721120 = 731707 + 1721120 = 2452827 \end{align*}

of, op de ingedikte manier,

\begin{align*} \{ α_1, m_1 \} \| = \Div(m − 3, 12) = \Div(7 − 3, 12) = \Div(4, 12) = \{ 0, 4 \} \\ \{ c_1, a_2 \} \| = \Div(j + α_1, 100) = \Div(2003 + 0, 100) = \Div(2003, 100) = \{ 20, 3 \} \\ J \| = \dfloorratio{146097 c_1}{4} + \dfloorratio{36525 a_2}{100} + \dfloorratio{153 m_1 + 2}{5} + d + 1721119 \\ \| = \dfloorratio{146097×20}{4} + \dfloorratio{36525×3}{100} + \dfloorratio{153×4 + 2}{5} + 6 + 1721119 \\ \| = \dfloorratio{2921940}{4} + \dfloorratio{109575}{100} + \dfloorratio{614}{5} + 1721125 \\ \| = 730485 + 1095 + 122 + 1721125 = 2452827 \end{align*}

Nog wat meer voorbeelden:

\({j}\) \({m}\) \({d}\) \({m_0}\) \({d_0}\) \({α_1}\) \({m_1}\) \({a_1}\) \({c_1}\) \({a_2}\) \({d_1}\) \({d_2}\) \({s}\) \({J}\)
−1 12 31 11 30 0 9 −1 −1 99 305 36464 −61 1721059
0 1 1 0 0 −1 10 −1 −1 99 306 36465 −60 1721060
0 2 28 1 27 −1 11 −1 −1 99 364 36523 −2 1721118
0 2 29 1 28 −1 11 −1 −1 99 365 36524 −1 1721119
0 3 1 2 0 0 0 0 0 0 0 0 0 1721120
1900 2 28 1 27 −1 11 1899 18 99 364 36523 693959 2415079
1900 3 1 2 0 0 0 1900 19 0 0 0 693960 2415080
1999 12 31 11 30 0 9 1999 19 99 305 36464 730424 2451544
2000 1 1 0 0 −1 10 1999 19 99 306 36465 730425 2451545
2000 2 28 1 27 −1 11 1999 19 99 364 36523 730483 2451603
2000 2 29 1 28 −1 11 1999 19 99 365 36524 730484 2451604
2000 3 1 2 0 0 0 2000 20 0 0 0 730485 2451605
2003 7 6 6 5 0 4 2003 20 3 127 1222 731707 2452827

13.2.2. Van CJDN naar Gregoriaanse datum (1)

Nu gaan we weer de andere kant op, met dezelfde kalenderniveaus als hierboven.

                         ┌── c₁ ──────────┐
  j ───────────┐ ┌─ a₁ ─(2)─ a₂ ─┐        │
               (1)               │        │
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        │        │
  d ─(−1)─ d₀ ─────────(3)─ d₁ ─(4)─ d₂ ─(5)─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 12 1 12 0 2 12
2 100 1 100 0 0 100
3 153 5 30 3 2 30.6
4 36525 100 365 25 0 365.25
5 146097 4 36524 1 0 36524.25

  1. Eerst trekken we het CJDN dat hoort bij lopende dagnummer 0 af van het CJDN om het lopende dagnummer te vinden:

    \begin{equation} s = J − J_0 = J − 1721120 \end{equation}

  2. Berekening 5 haalt uit lopende dagnummer \( s \) het rekeneeuwnummer \( c_1 \) en het dagnummer \( d_2 \) sinds het begin van de rekeneeuw:

    \begin{align} \{ c_1, ω_1 \} \| = \Div(4s + 3, 146097) \\ d_2 \| = \dfloorratio{ω_1}{4} \end{align}

  3. Berekening 4 haalt uit dagnummer \( d_2 \) sinds het begin van de rekeneeuw het jaartal \( a_2 \) sinds het begin van de rekeneew en het dagnummer \( d_1 \) sinds het begin van het rekenjaar.

    \begin{align} \{ a_2, ω_2 \} \| = \Div(100d_2 + 99, 36525) \\ d_1 \| = \dfloorratio{ω_2}{100} \end{align}

  4. Berekening 3 splitst het dagnummer \( d_1 \) sinds het begin van het rekenjaar in het maandnummer \( m_1 \) sinds het begin van het rekenjaar en het dagnummer \( d_0 \) sinds het begin van de rekenmaand.

    \begin{align} \{ m_1, ω_3 \} \| = \Div(5d_1 + 2, 153) \\ d_0 \| = \dfloorratio{ω_3}{5} \end{align}

  5. Berekening 2 voegt het rekeneeuwnummer \( c_1 \) en het rekenjaarnummer \( a_2 \) sinds het begin van de rekeneeuw samen tot het rekenjaarnummer \( a_1 \).

    \begin{equation} a_1 = 100c_1 + a_2 \end{equation}

  6. Berekening 1 verschuift het rekenmaandnummer \( m_1 \) en rekenjaarnummer \( a_1 \) zodat januari in plaats van maart de eerste maand van het jaar is.

    \begin{align} \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) \\ j \| = a_1 + α_1 \end{align}

  7. En dan verschuiven we het maandnummer en het dagnummer zodat de eersten nummer 1 hebben in plaats van 0.

    \begin{align} m \| = m_0 + 1 \\ d \| = d_0 + 1 \end{align}

Dit dikt een klein beetje in tot:

\begin{align} \{ c_1, ω_1 \} \| = \Div(4J − 6884477, 146097) \\ \{ a_2, ω_2 \} \| = \Div\dparen{100\dfloorratio{ω_1}{4} + 99, 36525} \\ \{ m_1, ω_3 \} \| = \Div\dparen{5\dfloorratio{ω_2}{100} + 2, 153} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) \\ j \| = 100c_1 + a_2 + α_1 \\ m \| = m_0 + 1 \\ d \| = \dfloorratio{ω_3}{5} + 1 \end{align}

Bijvoorbeeld, welke datum in de Gregoriaanse kalender komt overeen met CJDN 2452827? Dan is \( J = 2452827 \) en dan

\begin{align*} s \| = J − 1721120 = 2452827 − 1721120 = 731707 \\ \{c_1, ω_1 \} \| = \Div(4s + 3, 146097) = \Div(4×731707 + 3, 146097) \\ \| = \Div(2926831, 146097) = \{ 20, 4891 \} \\ d_2 \| = \dfloorratio{ω_1}{4} = \dfloorratio{4891}{4} = 1222 \\ \{a_2, ω_2\} \| = \Div(100d_2 + 99, 36525) = \Div(100×1222 + 99, 36525) \\ \| = \Div(122299, 36525) = \{3, 12724\} \\ d_1 \| = \dfloorratio{ω_2}{100} = \dfloorratio{12724}{100} = 127 \\ \{m_1, ω_3 \} \| = \Div(5d_1 + 2, 153) = \Div(5×127 + 2, 153) \\ \| = \Div(637, 153) = \{4, 25\} \\ d_0 \| = \dfloorratio{ω_3}{5} = \dfloorratio{25}{5} = 5 \\ a_1 \| = 100c_1 + a_2 = 100×20 + 3 = 2003 \\ \{α_1, m_0\} \| = \Div(m_1 + 2, 12) = \Div(4 + 2, 12) = \Div(6, 12) = \{ 0, 6 \} \\ j \| = a_1 + α_1 = 2003 + 0 = 2003 \\ m \| = m_0 + 1 = 6 + 1 = 7 \\ d \| = d_0 + 1 = 5 + 1 = 6 \end{align*}

De datum is 6 juli 2003.

Of, op de ingedikte manier,

\begin{align*} \{ c_1, ω_1 \} \| = \Div(4J − 6884477, 146097) = \Div(4×2452827 − 6884477, 146097) \\ \| = \Div(2926831, 146097) = \{20, 4891\} \\ \{ a_2, ω_2 \} \| = \Div\dparen{100\dfloorratio{ω_1}{4} + 99, 36525} = \Div\dparen{100\dfloorratio{4891}{4} + 99, 36525} \\ \| = \Div(100×1222 + 99, 36525) = \Div(122299, 36525) = \{3, 12724\} \\ \{ m_1, ω_3 \} \| = \Div\dparen{5\dfloorratio{ω_2}{100} + 2, 153} = \Div\dparen{5\dfloorratio{12724}{100} + 2, 153} \\ \| = \Div(5×127 + 2, 153) = \Div(637, 153) = \{4, 25\} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) = \Div(4 + 2, 12) = \Div(6, 12) = \{0, 6\} \\ j \| = 100c_1 + a_2 + α_1 = 100×20 + 3 + 0 = 2003 \\ m \| = m_0 + 1 = 6 + 1 = 7 \\ d \| = \dfloorratio{ω_3}{5} + 1 = \dfloorratio{25}{5} + 1 = 5 + 1 = 6 \end{align*}

Wat meer voorbeelden:

\({J}\) \({s}\) \({c_1}\) \({ω_1}\) \({d_2}\) \({a_2}\) \({ω_2}\) \({d_1}\) \({m_1}\) \({ω_3}\) \({d_0}\) \({a_1}\) \({α_1}\) \({m_0}\) \({j}\) \({m}\) \({d}\)
1721059 −61 −1 145856 36464 99 30524 305 9 150 30 −1 0 11 −1 12 31
1721060 −60 −1 145860 36465 99 30624 306 10 2 0 −1 1 0 0 1 1
1721118 −2 −1 146092 36523 99 36424 364 11 139 27 −1 1 1 0 2 28
1721119 −1 −1 146096 36524 99 36524 365 11 144 28 −1 1 1 0 2 29
1721120 0 0 3 0 0 99 0 0 2 0 0 0 2 0 3 1
2415079 693959 18 146093 36523 99 36424 364 11 139 27 1899 1 1 1900 2 28
2415080 693960 19 0 0 0 99 0 0 2 0 1900 0 2 1900 3 1
2451544 730424 19 145856 36464 99 30524 305 9 150 30 1999 0 11 1999 12 31
2451545 730425 19 145860 36465 99 30624 306 10 2 0 1999 1 0 2000 1 1
2451603 730483 19 146092 36523 99 36424 364 11 139 27 1999 1 1 2000 2 28
2451604 730484 19 146096 36524 99 36524 365 11 144 28 1999 1 1 2000 2 29
2451605 730485 20 3 0 0 99 0 0 2 0 2000 0 2 2000 3 1
2452827 731707 20 4891 1222 3 12724 127 4 25 5 2003 0 6 2003 7 6

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

  j ───────────┐ ┌─ a₁ ──────────┐
               (1)               │
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        │
  d ─(−1)─ d₀ ─────────(2)─ d₁ ─[3]─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 12 1 12 0 2 12
2 153 5 30 3 2 30.6
3.1 146097 400 365 1 1 0 4 100 365.2425
3.2 −1 1 0 100 4
3.3 1 1 0 400 1

De stappen zijn nu als volgt, van de Gregoriaanse kalender naar het CJDN:

  1. Eerst verschuiven we maanden en dagen zodat de eerste beginnen met waarde 0. 1 januari komt dan overeen met \( m_0 = 0, d_0 = 0 \).

    \begin{align} m_0 \| = m − 1 \\ d_0 \| = d − 1 \end{align}

  2. Berekening 1 verschuift het maandnummer en jaarnummer zodat maart de eerste rekenmaand (maand \( m_1 = 0 \)) van het rekenjaar \( a_1 \) is in plaats van januari, net als voor de Juliaanse kalender (13.1.1):

    \begin{align} \{ α_1, m_1 \} \| = \Div(m_0 − 2, 12) \\ a_1 \| = j + α_1 \end{align}

  3. Berekening 2 berekent het dagnummer \( d_1 \) sinds het begin van het rekenjaar uit het rekenmaandnummer \( m_1 \) en het dagnummer \( d_0 \) sinds het begin van de rekenmaand:

    \begin{equation} d_1 = \dfloorratio{153 m_1 + 2}{5} + d_0 = 30 m_1 + \dfloorratio{3 m_1 + 2}{5} + d_0 \end{equation}

  4. Berekening 3 rekent het lopende dagnummer \( s \) uit uit het rekenjaarnummer \( a_1 \) en het dagnummer \( d_1 \) sinds het begin van het rekenjaar.

    \begin{equation} s = 365 a_1 + \dfloorratio{a_1}{4} − \dfloorratio{a_1}{100} + \dfloorratio{a_1}{400} + d_1 \end{equation}

  5. En dan tellen we er de CJDN van het begin van rekenjaar 0 (dus 1 maart van jaar 0) nog bij, en dat is 1721120:

    \begin{equation} J = s + J_0 = s + 1721120 \end{equation}

Dit dikt in tot

\begin{align} \{ α_1, m_1 \} \| = \Div(m − 3, 12) \\ a_1 \| = j + α_1 \\ J \| = 365 a_1 + \dfloorratio{a_1}{4} − \dfloorratio{a_1}{100} + \dfloorratio{a_1}{400} \notag \\ \| + \dfloorratio{153 m_1 + 2}{5} + d + 1721119 \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*} m_0 \| = m − 1 = 7 − 1 = 6 \\ d_0 \| = d − 1 = 6 − 1 = 5 \\ \{α_1, m_1\} \| = \Div(m_0 − 2, 12) = \Div(6 − 2, 12) = \Div(4, 12) = \{0, 4\} \\ a_1 \| = j + α_1 = 2003 + 0 = 2003 \\ d_1 \| = \dfloorratio{153m_1 + 2}{5} + d_0 = \dfloorratio{153×4 + 2}{5} + 5 = \dfloorratio{614}{5} + 5 = 122 + 5 = 127 \\ s \| = 365a_1 + \dfloorratio{a_1}{4} − \dfloorratio{a_1}{100} + \dfloorratio{a_1}{400} + d_1 \\ \| = 365×2003 + \dfloorratio{2003}{4} − \dfloorratio{2003}{100} + \dfloorratio{2003}{400} + 127 \\ \| = 731095 + 500 − 20 + 5 + 127 = 731707 \\ J \| = 731707 + 1721120 = 2452827 \end{align*}

Of, op de ingedikte manier:

\begin{align*} \{ α_1, m_1 \} \| = \Div(m ― 3, 12) = \Div(7 ― 3, 12) = \Div(4, 12) = \{ 0, 4 \} \\ a_1 \| = j + α_1 = 2003 + 0 = 2003 \\ J \| = 365a_1 + \dfloorratio{a_1}{4} − \dfloorratio{a_1}{100} + \dfloorratio{a_1}{400} \\ \| + \dfloorratio{153m_1 + 2}{5} + d + 1721119 \\ \| = 365×2003 + \dfloorratio{2003}{4} − \dfloorratio{2003}{100} + \dfloorratio{2003}{400} \\ \| + \dfloorratio{153×4 + 2}{5} + 6 + 1721119 \\ \| = 731095 + 500 − 20 + 5 + \dfloorratio{614}{5} + 1721125 \\ \| = 2452705 + 122 = 2452827 \end{align*}

Nog wat meer voorbeelden:

\({j}\) \({m}\) \({d}\) \({m_0}\) \({d_0}\) \({α_1}\) \({m_1}\) \({a_1}\) \({d_1}\) \({s}\) \({J}\)
−1 12 31 11 30 0 9 −1 305 −61 1721059
0 1 1 0 0 −1 10 −1 306 −60 1721060
0 2 28 1 27 −1 11 −1 364 −2 1721118
0 2 29 1 28 −1 11 −1 365 −1 1721119
0 3 1 2 0 0 0 0 0 0 1721120
1900 2 28 1 27 −1 11 1899 364 693959 2415079
1900 3 1 2 0 0 0 1900 0 693960 2415080
1999 12 31 11 30 0 9 1999 305 730424 2451544
2000 1 1 0 0 −1 10 1999 306 730425 2451545
2000 2 28 1 27 −1 11 1999 364 730483 2451603
2000 2 29 1 28 −1 11 1999 365 730484 2451604
2000 3 1 2 0 0 0 2000 0 730485 2451605
2003 7 6 6 5 0 4 2003 127 731707 2452827

13.2.4. Van CJDN naar Gregoriaanse Datum (2)

Nu gaan we weer de andere kant op.

  j ───────────┐ ┌─ a₁ ──────────┐
               (1)               │
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        │
  d ─(−1)─ d₀ ─────────(2)─ d₁ ─[3]─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 12 1 12 0 2 12
2 153 5 30 3 2 30.6
3.1 146097 400 365 1 1 0 4 100 365.2425
3.2 −1 1 0 100 4
3.3 1 1 0 400 1

  1. Eerst trekken we het CJDN dat hoort bij lopende dagnummer 0 af van het CJDN om het lopende dagnummer te vinden:

    \begin{equation} s = J − J_0 = J − 1721120 \end{equation}

  2. Berekening 3 splitst lopende dagnummer \( s \) in het rekenjaartal \( a_1 \) en het dagnummer \( d_1 \) sinds het begin van het rekenjaar. Er geldt

    \begin{align} ρ \| = 2×2 − (−1) − 365 − 1 − 2×\dparen{\dfrac{1×1}{4} + \dfrac{−1×1}{100} + \dfrac{1×1}{400}} \notag \\ \| = −361 − 2×\dparen{\dfrac{1}{4} − \dfrac{1}{100} + \dfrac{1}{400}} \notag \\ \| = −361\dfrac{97}{200} \le 0 \end{align}

    dus we mogen de methode met het vaste aantal stappen gebruiken.

    \begin{align} α_1 \| = \dfloorratio{400s + 400×2 − 0 − 1}{146097} = \dfloorratio{400s + 799}{146097} \\ δ_1 \| = s − 365α_1 − \dfloorratio{α_1}{4} + \dfloorratio{α_1}{100} − \dfloorratio{α_1}{400} \\ α_2 \| = \dfloorratio{δ_1}{367} \\ a_1 \| = α_1 + α_2 \\ d_1 \| = s − 365a_1 − \dfloorratio{a_1}{4} + \dfloorratio{a_1}{100} − \dfloorratio{a_1}{400} \end{align}

  3. Berekening 2 splitst het dagnummer \( d_1 \) sinds het begin van het rekenjaar in het maandnummer \( m_1 \) sinds het begin van het rekenjaar en het dagnummer \( d_0 \) sinds het begin van de rekenmaand.

    \begin{align} \{ m_1, ω_1 \} \| = \Div(5d_1 + 2, 153) \\ d_0 \| = \dfloorratio{ω_1}{5} \end{align}

  4. Berekening 1 verschuift het rekenmaandnummer \( m_1 \) en rekenjaarnummer \( a_1 \) zodat januari in plaats van maart de eerste maand van het jaar is.

    \begin{align} \{ α_2, m_0 \} \| = \Div(m_1 + 2, 12) \\ j \| = a_1 + α_2 \end{align}

  5. En dan verschuiven we het maandnummer en het dagnummer zodat de eersten nummer 1 hebben in plaats van 0.

    \begin{align} m \| = m_0 + 1 \\ d \| = d_0 + 1 \end{align}

Dit dikt een beetje in tot

\begin{align} s \| = J − J_0 = J − 1721120 \\ α_1 \| = \dfloorratio{400s + 799}{146097} \\ α_2 \| = \dfloorratio{s − 365α_1 − \dfloorratio{α_1}{4} + \dfloorratio{α_1}{100} − \dfloorratio{α_1}{400}}{367} \\ a_1 \| = α_1 + α_2 \\ \{ m_1, ω_1 \} \| = \Div\dparen{5\dparen{s − 365a_1 − \dfloorratio{a_1}{4} + \dfloorratio{a_1}{100} − \dfloorratio{a_1}{400}} + 2, 153} \\ \{ α_2, m_0 \} \| = \Div(m_1 + 2, 12) \\ j \| = a_1 + α_2 \\ m \| = m_0 + 1 \\ d \| = \dfloorratio{ω_1}{5} + 1 \end{align}

Bijvoorbeeld, welke datum in de Gregoriaanse kalender komt overeen met CJDN 2452827? Dan is \( J = 2452827 \) en dan

\begin{align*} s \| = J − 1721120 = 731707 \\ α_1 \| = \dfloorratio{400s + 799}{146097} = \dfloorratio{400×731707 + 799}{146097} = \dfloorratio{292683599}{146097} = 2003 \\ δ_1 \| = s − 365α_1 − \dfloorratio{α_1}{4} + \dfloorratio{α_1}{100} − \dfloorratio{α_1}{400} \\ \| = 731707 − 365×2003 − \dfloorratio{2003}{4} + \dfloorratio{2003}{100} − \dfloorratio{2003}{400} \\ \| = 731707 − 731095 − 500 + 20 − 5 = 127 \\ α_2 \| = \dfloorratio{δ_1}{367} = \dfloorratio{127}{367} = 0 \\ a_1 \| = α_1 + α_2 = 2003 + 0 = 2003 \\ d_1 \| = s − 365a_1 − \dfloorratio{a_1}{4} + \dfloorratio{a_1}{100} − \dfloorratio{a_1}{400} \\ \| = 731707 − 365×2003 − \dfloorratio{2003}{4} + \dfloorratio{2003}{100} − \dfloorratio{2003}{400} \\ \| = 731707 − 731095 − 500 + 20 − 5 = 127 \\ \{ m_1, ω_1 \} \| = \Div(5d_1 + 2, 153) = \Div(5×127 + 2, 153) \\ \| = \Div(637, 153) = \{ 4, 25 \} \\ d_0 \| = \dfloorratio{ω_1}{5} = \dfloorratio{25}{5} = 5 \\ \{ α_2, m_0 \} \| = \Div(m_1 + 2, 12) = \Div(4 + 2, 12) = \Div(6, 12) = \{ 0, 6 \} \\ j \| = a_1 + α_2 = 2003 + 0 = 2003 \\ m \| = m_0 + 1 = 6 + 1 = 7 \\ d \| = d_0 + 1 = 5 + 1 = 6 \end{align*}

De datum is 6 juli 2003.

Of, op de ingedikte manier:

\begin{align} s \| = J − 1721120 = 2452827 − 1721120 = 731707 \\ α_1 \| = \dfloorratio{400×s + 799}{146097} = \dfloorratio{400×731707 + 799}{146097} \\ \| = \dfloorratio{292683599}{146097} = 2003 \\ α_2 \| = \dfloorratio{s − 365×α_1 − \dfloorratio{α_1}{4} + \dfloorratio{α_1}{100} − \dfloorratio{α_1}{400}}{367} \\ \| = \dfloorratio{731707 − 365×2003 − \dfloorratio{2003}{4} + \dfloorratio{2003}{100} − \dfloorratio{2003}{400}}{367} \\ \| = \dfloorratio{731707 − 731095 − 500 + 20 − 5}{367} \\ \| = \dfloorratio{127}{367} = 0 \\ a_1 \| = α_1 + α_2 = 2003 + 0 = 2003 \\ \{ m_1, ω_1 \} \| = \Div\dparen{5×\dparen{s − 365×a_1 − \dfloorratio{a_1}{4} + \dfloorratio{a_1}{100} − \dfloorratio{a_1}{400}} + 2, 153} \\ \| = \Div\dparen{5×\dparen{731707 − 365×2003 − \dfloorratio{2003}{4} + \dfloorratio{2003}{100} − \dfloorratio{2003}{400}} + 2, 153} \\ \| = \Div(5×(731707 − 731095 − 500 + 20 − 5) + 2, 153) \\ \| = \Div(5×127 + 2, 153) = \Div(637, 153) = \{ 4, 25 \} \\ \{ α_2, m_0 \} \| = \Div(m_1 + 2, 12) = \Div(4 + 2, 12) = \Div(6, 12) = \{ 0, 6 \} \\ j \| = a_1 + α_2 = 2003 + 0 = 2003 \\ m \| = m_0 + 1 = 6 + 1 = 7 \\ d \| = \dfloorratio{ω_1}{5} + 1 = \dfloorratio{25}{5} + 1 = 6 \end{align}

In de berekening van \( α_1 \) kan de teller heel groot worden: In het voorbeeld was dat 292683599 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 \( α_1 \) 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

\[ α_1 = \dfloorratio{400s + 799}{146097} \]

te vervangen door

\begin{align} \{ ω_2, δ_2 \} \| = \Div(s, 1461) \\ α_1 \| = 4ω_2 + \dfloorratio{12ω_2 + 400δ_2 + 799}{146097} \end{align}

Bijvoorbeeld, als \( s = 9000000 \) dan is

\[ α_1 = \dfloorratio{400×9000000 + 799}{146097} = \dfloorratio{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*} \{ω_2, δ_2\} \| = \Div(9000000, 1461) = \{6160, 240\} \\ α_1 \| = 4×6160 + \dfloorratio{12×6160 + 400×240 + 799}{146097} \\ \| = 24640 + \dfloorratio{170719}{146097} = 24640 + 1 = 24641 \end{align*}

Nu is het grootste tussenresultaat 9'000'000, wat ruim past in een geheugenlocatie van 32 bits.

13.2.5. Van Gregoriaanse datum naar CJDN (3)

De berekeningen zijn schematisch als volgt:

  j ────────────┐
  m ─(−1)─ m₀ ─(1)─ m₁ ─┐
  d ─(−1)─ d₀ ─────────[2]─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 12 1 12 0 0 12
2.1 146097 4800 30 1 7 5 12 400 30.436875
2.2 −2 1 10 12 400
2.3 1 1 46 48 100
2.4 −1 1 1198 1200 4
2.5 1 1 4798 4800 1

Net als voor de Juliaanse kalender kunnen we een getrapte combinatie van kalenderniveaus gebruiken. Vergeleken met de Juliaanse kalender moeten we bij berekening 2 de schrikkelregels voor elke 100 jaar en elke 400 jaar er nog bij stoppen:

\begin{eqnarray*} 30m_1 + \dfloorratio{7m_1 + 5}{12} − 2\dfloorratio{m_1 + 10}{12} + \dfloorratio{m_1 + 46}{48} \\ − \dfloorratio{m_1 + 1198}{1200} + \dfloorratio{m_1 + 4798}{4800} \end{eqnarray*}

dus kalendertype 4 met

\begin{eqnarray*} q \| = \| 30 \\ g \| = \| 4800 \\ \{r_1,h_1,t_1,g_1\} \| = \| \{1,7,5,12\} \\ \{r_2,h_2,t_2,g_2\} \| = \| \{−2,1,10,12\} \\ \{r_3,h_3,t_3,g_3\} \| = \| \{1,1,46,48\} \\ \{r_4,h_4,t_4,g_4\} \| = \| \{−1,1,1198,1200\} \\ \{r_5,h_5,t_5,g_5\} \| = \| \{1,1,4798,4800\} \end{eqnarray*}

Het CJDN \( J_0 \) dat overeenkomt met \( \{j,m,d\} = \{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} m_0 \| = m − 1 \\ d_0 \| = d − 1 \\ m_1 \| = 12j + m_0 \\ s \| = 30m_1 + \dfloorratio{7m_1 + 5}{12} − 2\dfloorratio{m_1 + 10}{12} + \dfloorratio{m_1 + 46}{48} \notag \\ \| − \dfloorratio{m_1 + 1198}{1200} + \dfloorratio{m_1 + 4798}{4800} + d_0 \\ J \| = s + 1721060 \end{align}

Dit dikt in tot

\begin{align} m_1 \| = 12j + m − 1 \\ J \| = 30m_1 + \dfloorratio{7m_1 + 5}{12} − 2\dfloorratio{m_1 + 10}{12} + \dfloorratio{m_1 + 46}{48} \notag \\ \| − \dfloorratio{m_1 + 1198}{1200} + \dfloorratio{m_1 + 4798}{4800} + d + 1721059 \end{align}

Bijvoorbeeld, wat is het CJDN dat hoort bij Juliaanse datum 6 juli 2003? Dan is \( j = 2003 \), \( m = 7 \), \( d = 6 \), en dan

\begin{align*} m_0 \| = m − 1 = 6 \\ d_0 \| = d − 1 = 5 \\ m_1 \| = 12j + m_0 = 12×2003 + 6 = 24042 \\ s \| = 30m_1 + \dfloorratio{7m_1 + 5}{12} − 2\dfloorratio{m_1 + 10}{12} + \dfloorratio{m_1 + 46}{48} \\ \| − \dfloorratio{m_1 + 1198}{1200} + \dfloorratio{m_1 + 4798}{4800} + d_0 \\ \| = 30×24042 + \dfloorratio{7×24042 + 5}{12} − 2×\dfloorratio{24042 + 10}{12} + \dfloorratio{24042 + 46}{48} \\ \| − \dfloorratio{24042 + 1198}{1200} + \dfloorratio{24042 + 4798}{4800} + 5 \\ \| = 721260 + \dfloorratio{168299}{12} − 2×\dfloorratio{24052}{12} + \dfloorratio{24088}{48} \\ \| − \dfloorratio{25240}{1200} + \dfloorratio{28840}{4800} + 5 \\ \| = 721260 + 14024 − 2×2004 + 501 − 21 + 6 + 5 = 731767 \\ J \| = s + J_0 = 731767 + 1721060 = 2452827 \end{align*}

Of, op de ingedikte manier:

\begin{align*} m_1 \| = 12j + m − 1 = 12×2003 + 7 − 1 = 24042 \\ J \| = 30m_1 + \dfloorratio{7m_1 + 5}{12} − 2\dfloorratio{m_1 + 10}{12} + \dfloorratio{m_1 + 46}{48} \\ \| − \dfloorratio{m_1 + 1198}{1200} + \dfloorratio{m_1 + 4798}{4800} + d + 1721059 \\ \| = 30×24042 + \dfloorratio{7×24042 + 5}{12} − 2\dfloorratio{24042 + 10}{12} + \dfloorratio{24042 + 46}{48} \\ \| − \dfloorratio{24042 + 1198}{1220} + \dfloorratio{24042 + 4798}{4800} + 6 + 1721059 \\ \| = 721260 + \dfloorratio{168299}{12} − 2\dfloorratio{24052}{12} + \dfloorratio{24088}{48} \\ \| − \dfloorratio{25240}{1200} + \dfloorratio{28840}{4800} + 1721065 \\ \| = 721260 + 14024 − 2×2004 + 501 − 21 + 6 + 1721065 = 2452827 \end{align*}

Nog wat meer voorbeelden:

\({j}\) \({m}\) \({d}\) \({m_0}\) \({d_0}\) \({m_1}\) \({\dfloorratio{7m_1+5}{12}}\) \({\dfloorratio{m_1+10}{12}}\) \({\dfloorratio{m_1+46}{48}}\) \({\dfloorratio{m_1+1198}{1200}}\) \({\dfloorratio{m_1+4798}{4800}}\) \({s}\) \({J}\)
−1 12 31 11 30 −1 −1 0 0 0 0 −1 1721059
0 1 1 0 0 0 0 0 0 0 0 0 1721060
0 12 31 11 30 11 6 1 1 1 1 365 1721425
1 1 1 0 0 12 7 1 1 1 1 366 1721426
2003 2 28 1 27 24037 14022 2003 501 21 6 731639 2452699
2003 3 1 2 0 24038 14022 2004 501 21 6 731640 2452700
2003 7 6 6 5 24042 14024 2004 501 21 6 731767 2452827
2003 12 31 11 30 24047 14027 2004 501 21 6 731945 2453005
2004 1 1 0 0 24048 14028 2004 501 21 6 731946 2453006
2004 2 28 1 27 24049 14029 2004 501 21 6 732004 2453064
2004 2 29 1 28 24049 14029 2004 501 21 6 732005 2453065
2004 3 1 2 0 24050 14029 2005 502 21 6 732006 2453066

13.2.6. Van CJDN naar Gregoriaanse datum (3)

De berekeningen zijn schematisch als volgt:

  j ────────────┐
  m ─(−1)─ m₀ ─(1)─ m₁ ─┐
  d ─(−1)─ d₀ ─────────[2]─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 12 1 12 0 0 12
2.1 146097 4800 30 1 7 5 12 400 30.436875
2.2 −2 1 10 12 400
2.3 1 1 46 48 100
2.4 −1 1 1198 1200 4
2.5 1 1 4798 4800 1

Hiervoor doorlopen we dezelfde procedure als hierboven, maar in de omgekeerde richting. Eerst berekenen we het lopende dagnummer \( s \) door van de CJDN \( J \) van de gezochte datum de CJDN \( J_0 \) van het begin van jaar 0 af te trekken.

\begin{equation} s = J − J_0 = J − 1721060 \end{equation}

Berekening 2 levert het lopende maandnummer \( m_1 \) en het dagnummer \( d_0 \) sinds het begin van de maand op uit het lopende dagnummer \( s \).

We hebben

\begin{align} μ_1 \| = \dfloorratio{gs + g\dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_i γ_i r_i t_i} − 1}{f} \notag \\ \| = \dfloorratio{4800s + 4800×3 − (−1394) − 1}{146097} \notag \\ \| = \dfloorratio{4800s + 15793}{146097} \notag \\ δ_1 \| = s − 30μ_1 − \dfloorratio{7μ_1 + 5}{12} + 2\dfloorratio{μ_1 + 10}{12} − \dfloorratio{μ_1 + 46}{48} \notag \\ \| + \dfloorratio{μ_1 + 1198}{1200} − \dfloorratio{μ_1 + 4798}{4800} \\ ρ \| = 2\dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_{r_i \lt 0} r_i} − q − 1 − 2 \dparen{\sum_i \dfrac{r_ih_i}{g_i}} \notag \\ \| = 2×3 − (―3) − 30 − 2×0.436875 = −21.87375 \end{align}

Omdat \( ρ ≤ 0 \) mogen we de procedure met het vaste aantal stappen gebruiken. Dan

\begin{align} m_1 \| = μ_1 + \dfloorratio{δ_1}{33} \\ d_0 \| = s − 30m_1 − \dfloorratio{7m_1 + 5}{12} + 2\dfloorratio{m_1 + 10}{12} − \dfloorratio{m_1 + 46}{48} \notag \\ \| + \dfloorratio{m_1 + 1198}{1200} − \dfloorratio{m_1 + 4798}{4800} \end{align}

Berekening 1 gaat van lopend maandnummer \( m_1 \) naar jaarnummer \( j \) en maandnummer \( m_0 \) sinds het begin van het jaar. Dit is een kalenderniveau van type 1.

\begin{equation} \{ j, m_0 \} = \Div(m_1, 12) \end{equation}

En als laatste verschuiven we het maandnummer en dagnummer zodat ze beginnen bij 1 en niet 0.

\begin{align} m \| = m_0 + 1 \\ d \| = d_0 + 1 \end{align}

Bijvoorbeeld, welke datum in de Gregoriaanse kalender komt overeen met CJDN 2452827? Dan is \( J = 2452827 \) en dan

\begin{align*} s \| = J − 1721060 = 2452827 − 1721060 = 731767 \\ μ_1 \| = \dfloorratio{4800s + 15793}{146097} = \dfloorratio{4800×731767 + 15793}{46097} \\ \| = \dfloorratio{3512497393}{146097} = 24042 \\ δ_1 \| = s − 30μ_1 − \dfloorratio{7μ_1 + 5}{12} + 2\dfloorratio{μ_1 + 10}{12} − \dfloorratio{μ_1 + 46}{48} \\ \| + \dfloorratio{μ_1 + 1198}{1200} − \dfloorratio{μ_1 + 4798}{4800} \\ \| = 731767 − 30×24042 − \dfloorratio{7×24042 + 5}{12} + 2×\dfloorratio{24042 + 10}{12} \\ \| − \dfloorratio{24042 + 46}{48} + \dfloorratio{24042 + 1198}{1200} − \dfloorratio{24042 + 4798}{4800} \\ \| = 731767 − 721260 − \dfloorratio{168299}{12} + 2×\dfloorratio{24052}{12} \\ \| − \dfloorratio{24088}{48} + \dfloorratio{25240}{1200} − \dfloorratio{28840}{4800} \\ \| = 10507 − 14024 + 4008 − 501 + 21 − 6 = 5 \\ m_1 \| = μ_1 + \dfloorratio{δ_1}{33} = 24042 + \dfloorratio{5}{33} = 24042 + 0 = 24042 \\ d_0 \| = s − 30m_1 − \dfloorratio{7m_1 + 5}{12} + 2\dfloorratio{m_1 + 10}{12} − \dfloorratio{m_1 + 46}{48} \\ \| + \dfloorratio{m_1 + 1198}{1200} − \dfloorratio{m_1 + 4798}{4800} \\ \| = 5 \\ \{j, m_0\} \| = \Div(m_1, 12) = \Div(24042, 12) = \{ 2003, 6 \} \\ m \| = m_0 + 1 = 6 + 1 = 7 \\ d \| = d_0 + 1 = 5 + 1 = 6 \end{align*}

De datum is 6 juli 2003.

Nog wat meer voorbeelden:

\({J}\) \({s}\) \({μ_1}\) \({δ_1}\) \({m_1}\) \({d_0}\) \({j}\) \({m_0}\) \({m}\) \({d}\)
1721059 −1 0 −1 −1 30 −1 11 12 31
1721060 0 0 0 0 0 0 0 1 1
1721425 365 12 −1 11 30 0 11 12 31
1721426 366 12 0 12 0 1 0 1 1
2452699 731639 24038 −1 24037 27 2003 1 2 28
2452700 731640 24038 0 24038 0 2003 2 3 1
2452827 731767 24042 5 24042 5 2003 6 7 6
2453005 731945 24048 −1 24047 30 2003 11 12 31
2453006 731946 24048 0 24048 0 2004 0 1 1
2453064 732004 24050 −2 24049 27 2004 1 2 28
2453065 732005 24050 −1 24049 28 2004 1 2 29
2453066 732006 24050 0 24050 0 2004 2 3 1

In de berekening van \( μ_1 \) kan de teller heel groot worden. In een computerprogramma dat rekent met waarden van 32 bits breed zal de berekening van \( μ_1 \) fout gaan als \( |s| \) groter wordt dan pakweg 447000 (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 \( μ_1 \) te vervangen door

\begin{align} \{ω_1, δ_2\} \| = \Div(s, 487) \\ μ_1 \| = 16ω_1 + \dfloorratio{48ω_1 + 4800δ_2 + 15793}{146097} \end{align}

Bijvoorbeeld, als \( s = 730000 \), dan is

\[ μ_1 = \dfloorratio{4800×730000 + 15793}{146097} = \dfloorratio{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*} \{ω_1, δ_2\} \| = \Div(730000, 487) = \{1498, 474\} \\ μ_1 \| = 1498×16 + \dfloorratio{1498×48 + 4800×474 + 15793}{146097} \\ \| = 23968 + \dfloorratio{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) = 328'718 dagen. De omrekening van datum naar CJDN is voor de Milanković-kalender bijna hetzelfde als voor de Gregoriaanse kalender (zie hoofdstuk 13.2.1). De berekeningen zijn schematisch als volgt:

                         ┌── c₁ ──────────┐
  j ───────────┐ ┌─ a₁ ─(2)─ a₂ ─┐        │
               (1)               │        │
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        │        │
  d ─(−1)─ d₀ ─────────(3)─ d₁ ─(4)─ d₂ ─(5)─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 12 1 12 0 2 12
2 100 1 100 0 0 100
3 153 5 30 3 2 30.6
4 36525 100 365 25 0 365.25
5 328718 9 36524 2 6 36524+2/9

De stappen zijn nu als volgt, van de Gregoriaanse kalender naar het CJDN:

  1. Eerst verschuiven we maanden en dagen zodat de eerste beginnen met waarde 0. 1 januari komt dan overeen met \( m_0 = 0, d_0 = 0 \).

    \begin{align} m_0 \| = m − 1 \\ d_0 \| = d − 1 \end{align}

  2. Berekening 1 verschuift het maandnummer en jaarnummer zodat maart de eerste rekenmaand (maand \( m_1 = 0 \)) van het rekenjaar \( a_1 \) is in plaats van januari, net als voor de Juliaanse kalender (13.1.1):

    \begin{align} \{ α_1, m_1 \} \| = \Div(m_0 − 2, 12) \\ a_1 \| = j + α_1 \end{align}

  3. Berekening 2 rekent het rekeneeuwnummer \( c_1 \) en jaarnummer \( a_2 \) sinds het begin van de rekeneeuw uit uit het rekenjaarnummer \( a_1 \).

    \begin{equation} \{ c_1, a_2 \} = \Div(a_1, 100) \end{equation}

  4. Berekening 3 berekent het dagnummer \( d_1 \) sinds het begin van het rekenjaar uit het rekenmaandnummer \( m_1 \) en het dagnummer \( d_0 \) sinds het begin van de rekenmaand:

    \begin{equation} d_1 = \dfloorratio{153 m_1 + 2}{5} + d_0 = 30 m_1 + \dfloorratio{3 m_1 + 2}{5} + d_0 \end{equation}

  5. Berekening 4 rekent het dagnummer \( d_2 \) sinds het begin van de rekeneeuw uit uit het jaarnummer \( a_2 \) sinds het begin van de rekeneeuw en het dagnummer \( d_1 \) sinds het begin van het rekenjaar.

    \begin{equation} d_2 = \dfloorratio{36525 a_2}{100} + d_1 \end{equation}

  6. Berekening 5 rekent het lopende dagnummer \( s \) uit uit het rekeneeuwnummer \( c_1 \) en het dagnummer \( d_2 \) sinds het begin van de rekeneeuw.

    \begin{equation} s = \dfloorratio{328718 c_1 + 6}{9} + d_2 \end{equation}

  7. En dan tellen we er de CJDN van het begin van rekenjaar 0 (dus 1 maart van jaar 0) nog bij, en dat is 1721119:

    \begin{equation} J = s + J_0 = s + 1721119 \end{equation}

Samengevoegd en ingedikt geeft dat:

\begin{align} \{ α_1, m_1 \} \| = \Div(m − 3, 12) \\ \{ c_1, a_2 \} \| = \Div(j + α_1, 100) \\ J \| = \dfloorratio{328718 c_1 + 6}{9} + \dfloorratio{36525 a_2}{100} + \dfloorratio{153 m_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*} m_0 \| = m − 1 = 7 − 1 = 6 \\ d_0 \| = d − 1 = 6 − 1 = 5 \\ \{α_1, m_1\} \| = \Div(m_0 − 2, 12) = \Div(6 − 2, 12) = \Div(4, 12) = \{ 0, 4 \} \\ a_1 \| = j + α_1 = 2003 + 0 = 2003 \\ \{ c_1, a_2 \} \| = \Div(a_1, 100) = \Div(2003, 100) = \{ 20, 3 \} \\ d_1 \| = \dfloorratio{153m_1 + 2}{5} + d_0 = \dfloorratio{153×4 + 2}{5} + 5 = \dfloorratio{614}{5} + 5 = 122 + 5 = 127 \\ d_2 \| = \dfloorratio{36525a_2}{100} + d_1 = \dfloorratio{36525×3}{100} + 127 \\ \| = \dfloorratio{109575}{100} + 122 = 1095 + 127 = 1222 \\ s \| = \dfloorratio{328718c_1 + 6}{9} + d_2 = \dfloorratio{328718×20 + 6}{9} + 1222 \\ \| = \dfloorratio{6574366}{9} + 1222 = 730485 + 1222 = 731707 \\ J \| = s + 1721119 = 731707 + 1721119 = 2452826 \end{align*}

Nog wat meer voorbeelden:

\({j}\) \({m}\) \({d}\) \({m_0}\) \({d_0}\) \({α_1}\) \({m_1}\) \({a_1}\) \({c_1}\) \({a_2}\) \({d_1}\) \({d_2}\) \({s}\) \({J}\)
−1 12 31 11 30 0 9 −1 −1 99 305 36464 −60 1721059
0 1 1 0 0 −1 10 −1 −1 99 306 36465 −59 1721060
0 2 28 1 27 −1 11 −1 −1 99 364 36523 −1 1721118
0 2 29 1 28 −1 11 −1 −1 99 365 36524 0 1721119
0 3 1 2 0 0 0 0 0 0 0 0 0 1721119
1900 2 28 1 27 −1 11 1899 18 99 364 36523 693959 2415078
1900 3 1 2 0 0 0 1900 19 0 0 0 693960 2415079
1999 12 31 11 30 0 9 1999 19 99 305 36464 730424 2451543
2000 1 1 0 0 −1 10 1999 19 99 306 36465 730425 2451544
2000 2 28 1 27 −1 11 1999 19 99 364 36523 730483 2451602
2000 2 29 1 28 −1 11 1999 19 99 365 36524 730484 2451603
2000 3 1 2 0 0 0 2000 20 0 0 0 730485 2451604
2003 7 6 6 5 0 4 2003 20 3 127 1222 731707 2452826

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 \( c_1 \) en \( d_2 \) uit te rekenen. De berekeningen zijn schematisch zoals in het volgende diagram:

                         ┌── c₁ ──────────┐
  j ───────────┐ ┌─ a₁ ─(2)─ a₂ ─┐        │
               (1)               │        │
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        │        │
  d ─(−1)─ d₀ ─────────(3)─ d₁ ─(4)─ d₂ ─(5)─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 12 1 12 0 2 12
2 100 1 100 0 0 100
3 153 5 30 3 2 30.6
4 36525 100 365 25 0 365.25
5 328718 9 36524 2 6 36524+2/9

  1. Eerst trekken we het CJDN dat hoort bij lopende dagnummer 0 af van het CJDN om het lopende dagnummer te vinden:

    \begin{equation} s = J − J_0 = J − 1721119 \end{equation}

  2. Berekening 5 haalt uit lopende dagnummer \( s \) het rekeneeuwnummer \( c_1 \) en het dagnummer \( d_2 \) sinds het begin van de rekeneeuw:

    \begin{align} \{ c_1, ω_1 \} \| = \Div(9s + 2, 328718) \\ d_2 \| = \dfloorratio{ω_1}{9} \end{align}

  3. Berekening 4 haalt uit dagnummer \( d_2 \) sinds het begin van de rekeneeuw het jaartal \( a_2 \) sinds het begin van de rekeneew en het dagnummer \( d_1 \) sinds het begin van het rekenjaar.

    \begin{align} \{ a_2, ω_2 \} \| = \Div(100d_2 + 99, 36525) \\ d_1 \| = \dfloorratio{ω_2}{100} \end{align}

  4. Berekening 3 splitst het dagnummer \( d_1 \) sinds het begin van het rekenjaar in het maandnummer \( m_1 \) sinds het begin van het rekenjaar en het dagnummer \( d_0 \) sinds het begin van de rekenmaand.

    \begin{align} \{ m_1, ω_3 \} \| = \Div(5d_1 + 2, 153) \\ d_0 \| = \dfloorratio{ω_3}{5} \end{align}

  5. Berekening 2 voegt het rekeneeuwnummer \( c_1 \) en het rekenjaarnummer \( a_2 \) sinds het begin van de rekeneeuw samen tot het rekenjaarnummer \( a_1 \).

    \begin{equation} a_1 = 100c_1 + a_2 \end{equation}

  6. Berekening 1 verschuift het rekenmaandnummer \( m_1 \) en rekenjaarnummer \( a_1 \) zodat januari in plaats van maart de eerste maand van het jaar is.

    \begin{align} \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) \\ j \| = a_1 + α_1 \end{align}

  7. En dan verschuiven we het maandnummer en het dagnummer zodat de eersten nummer 1 hebben in plaats van 0.

    \begin{align} m \| = m_0 + 1 \\ d \| = d_0 + 1 \end{align}

Dit dikt een klein beetje in tot:

\begin{align} \{ c_1, ω_1 \} \| = \Div(9J − 15490069, 328718) \\ \{ a_2, ω_2 \} \| = \Div\dparen{100\dfloorratio{ω_1}{4} + 99, 36525} \\ \{ m_1, ω_3 \} \| = \Div\dparen{5\dfloorratio{ω_2}{100} + 2, 153} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) \\ j \| = 100c_1 + a_2 + α_1 \\ m \| = m_0 + 1 \\ d \| = \dfloorratio{ω_3}{5} + 1 \end{align}

Bijvoorbeeld, welke datum in de Milanković-kalender komt overeen met CJDN 2452826? Dan is \( J = 2452826 \) en dan

\begin{align*} s \| = J − 1721119 = 2452826 − 1721119 = 731707 \\ \{c_1, ω_1 \} \| = \Div(9s + 2, 328718) = \Div(9×731707 + 2, 328718) \\ \| = \Div(6585365, 328718) = \{ 20, 11005 \} \\ d_2 \| = \dfloorratio{ω_1}{9} = \dfloorratio{11005}{9} = 1222 \\ \{a_2, ω_2\} \| = \Div(100d_2 + 99, 36525) = \Div(100×1222 + 99, 36525) \\ \| = \Div(122299, 36525) = \{3, 12724\} \\ d_1 \| = \dfloorratio{ω_2}{100} = \dfloorratio{12724}{100} = 127 \\ \{m_1, ω_3 \} \| = \Div(5d_1 + 2, 153) = \Div(5×127 + 2, 153) \\ \| = \Div(637, 153) = \{4, 25\} \\ d_0 \| = \dfloorratio{ω_3}{5} = \dfloorratio{25}{5} = 5 \\ a_1 \| = 100c_1 + a_2 = 100×20 + 3 = 2003 \\ \{α_1, m_0\} \| = \Div(m_1 + 2, 12) = \Div(4 + 2, 12) = \Div(6, 12) = \{ 0, 6 \} \\ j \| = a_1 + α_1 = 2003 + 0 = 2003 \\ m \| = m_0 + 1 = 6 + 1 = 7 \\ d \| = d_0 + 1 = 5 + 1 = 6 \end{align*}

De datum is 6 juli 2003.

Of, op de ingedikte manier,

\begin{align*} \{ c_1, ω_1 \} \| = \Div(9J − 15490069, 328718) = \Div(9×2452826 − 15490069, 328718) \\ \| = \Div(6585365, 328718) = \{ 20, 11005 \} \\ \{ a_2, ω_2 \} \| = \Div\dparen{100\dfloorratio{ω_1}{4} + 99, 36525} = \Div\dparen{100\dfloorratio{4891}{4} + 99, 36525} \\ \| = \Div(100×1222 + 99, 36525) = \Div(122299, 36525) = \{3, 12724\} \\ \{ m_1, ω_3 \} \| = \Div\dparen{5\dfloorratio{ω_2}{100} + 2, 153} = \Div\dparen{5\dfloorratio{12724}{100} + 2, 153} \\ \| = \Div(5×127 + 2, 153) = \Div(637, 153) = \{4, 25\} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) = \Div(4 + 2, 12) = \Div(6, 12) = \{0, 6\} \\ j \| = 100c_1 + a_2 + α_1 = 100×20 + 3 + 0 = 2003 \\ m \| = m_0 + 1 = 6 + 1 = 7 \\ d \| = \dfloorratio{ω_3}{5} + 1 = \dfloorratio{25}{5} + 1 = 5 + 1 = 6 \end{align*}

Wat meer voorbeelden:

\({J}\) \({s}\) \({c_1}\) \({ω_1}\) \({d_2}\) \({a_2}\) \({ω_2}\) \({d_1}\) \({m_1}\) \({ω_3}\) \({d_0}\) \({a_1}\) \({α_1}\) \({m_0}\) \({j}\) \({m}\) \({d}\)
1721059 −60 −1 328180 36464 99 30524 305 9 150 30 −1 0 11 −1 12 31
1721060 −59 −1 328189 36465 99 30624 306 10 2 0 −1 1 0 0 1 1
1721118 −1 −1 328711 36523 99 36424 364 11 139 27 −1 1 1 0 2 28
1721119 0 0 2 0 0 99 0 0 2 0 0 0 2 0 3 1
1721119 0 0 2 0 0 99 0 0 2 0 0 0 2 0 3 1
2415078 693959 18 328709 36523 99 36424 364 11 139 27 1899 1 1 1900 2 28
2415079 693960 19 0 0 0 99 0 0 2 0 1900 0 2 1900 3 1
2451543 730424 19 328176 36464 99 30524 305 9 150 30 1999 0 11 1999 12 31
2451544 730425 19 328185 36465 99 30624 306 10 2 0 1999 1 0 2000 1 1
2451602 730483 19 328707 36523 99 36424 364 11 139 27 1999 1 1 2000 2 28
2451603 730484 19 328716 36524 99 36524 365 11 144 28 1999 1 1 2000 2 29
2451604 730485 20 7 0 0 99 0 0 2 0 2000 0 2 2000 3 1
2452826 731707 20 11005 1222 3 12724 127 4 25 5 2003 0 6 2003 7 6

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.

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.

De kalenderniveau's zijn schematisch als volgt:

  j ─────────────────────┐
  m ─(−1)─ m₀ ──┐        │
  d ─(−1)─ d₀ ─(1)─ d₁ ─(2)─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 30 1 30 0 0 30
2 365 1 365 0 0 365

  1. Eerst trekken we 1 af van het maandnummer en het dagnummer zodat die beginnen bij 0 in plaats van 1.

    \begin{align*} m_0 \| = m − 1 \\ d_0 \| = d − 1 \end{align*}

  2. Berekening 1 voegt het maandnummer \( m_0 \) sinds het begin van het jaar en het dagnummer \( d_0 \) sinds het begin van de maand samen tot het dagnummer \( d_1 \) sinds het begin van het jaar.

    \begin{equation} d_1 = 30 m_0 + d_0 \end{equation}

  3. Berekening 2 voegt het jaarnummer \( j \) en het dagnummer \( d_1 \) sinds het begin van het jaar samen tot het lopende dagnummer \( s \).

    \begin{equation} s = 365 j + d_1 \end{equation}

  4. En dan tellen we de CJDN van lopende dagnummer 0 er bij op. In de kalender volgens de era van Nabonassar was de eerste dag van het eerste jaar (1 Thoth van jaar 1) gelijk aan 26 februari −746 in de Juliaanse kalender, ofwel aan JD 1448638. Om dat te krijgen moeten we \( J_0 = 1448273 \) gebruiken.

    \begin{equation} J = s + J_0 = s + 1448273 \end{equation}

Dit dikt in tot

\begin{equation} J = 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*} m_0 \| = m − 1 = 5 − 1 = 4 \\ d_0 \| = d − 1 = 7 − 1 = 6 \\ d_1 \| = 30m_0 + d_0 = 30×4 + 6 = 126 \\ s \| = 365j + d_1 = 365×218 + 126 = 79696 \\ J \| = s + 1448273 = 79696 + 1448273 = 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 = 1527969 \end{align*}

dus hetzelfde antwoord als voorheen. Nog een paar voorbeelden:

\({j}\) \({m}\) \({d}\) \({m_0}\) \({d_0}\) \({d_1}\) \({s}\) \({J}\)
−1 13 5 12 4 364 −1 1448272
0 1 1 0 0 0 0 1448273
0 13 5 12 4 364 364 1448637
1 1 1 0 0 0 365 1448638
1 1 30 0 29 29 394 1448667
1 2 1 1 0 30 395 1448668
218 5 7 4 6 126 79696 1527969

13.4.2. Van CJDN naar Egyptische datum

In omgekeerde richting zijn de berekeningen ook eenvoudig.

De kalenderniveau's zijn schematisch als volgt:

  j ─────────────────────┐
  m ─(−1)─ m₀ ──┐        │
  d ─(−1)─ d₀ ─(1)─ d₁ ─(2)─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 30 1 30 0 0 30
2 365 1 365 0 0 365

  1. Eerst trekken we de CJDN \( J_0 \) van lopende dagnummer 0 er van af.

    \begin{equation} s = J − J_0 = s − 1448273 \end{equation}

  2. Berekening 2 splits het lopende dagnummer \( s \) in een jaarnummer \( j \) en het dagnummer \( d_1 \) sinds het begin van het jaar.

    \begin{equation} \{ j, d_1 \} = \Div(s, 365) \end{equation}

  3. Berekening 1 splits the dagnummer \( d_1 \) sinds het begin van het jaar in het maandnummer \( m_0 \) sinds het begin van het jaar en het dagnummer \( d_0 \) sinds het begin van de maand.

    \begin{equation} \{ m_0, d_0 \} = \Div(d_1, 30) \end{equation}

  4. En dan tellen we 1 op bij het maandnummer en het dagnummer zodat ze beginnen bij 1 in plaats van bij 0.

    \begin{align} m \| = m_0 + 1 \\ d \| = d_0 + 1 \end{align}

Welke datum in de Egyptische kalender komt overeen met CJDN 1527969? Dan is

\begin{align*} s \| = J − J_0 = 1527969 − 1448273 = 79696 \\ \{ j, d_1 \} \| = \Div(79696, 365) = \{ 218, 126 \} \\ \{ m_0, d_0 \} \| = \Div(126, 30) = \{4, 6\} \\ m \| = m_0 + 1 = 4 + 1 = 5 \\ d \| = d_0 + 1 = 6 + 1 = 7 \end{align*}

dus het is dag 7 van maand 5 van jaar 218. Nog een paar voorbeelden:

\({J}\) \({s}\) \({j}\) \({d_1}\) \({m_0}\) \({d_0}\) \({m}\) \({d}\)
1448272 −1 −1 364 12 4 13 5
1448273 0 0 0 0 0 1 1
1448637 364 0 364 12 4 13 5
1448638 365 1 0 0 0 1 1
1448667 394 1 29 0 29 1 30
1448668 395 1 30 1 0 2 1
1527969 79696 218 126 4 6 5 7

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. De berekeningen zijn schematisch:

  j ────────────┐
  m ─(−1)─ m₀ ─(1)─ m₁ ─┐
  d ─(−1)─ d₀ ─────────(2)─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 235 19 12 7 13 12.368421
2 6940 235 29 125 0 29.531915

  1. Eerst trekken we 1 af van het maandnummer \( m \) en het dagnummer \( d \) zodat ze beginnen met 0 in plaats van 1.

    \begin{align*} m_0 \| = m − 1 \\ d_0 \| = d − 1 \end{align*}

  2. Berekening 1 berekent uit het jaartal \( j \) en het maandnummer \( m_0 \) sinds het begin van het jaar het lopende maandnummer \( m_1 \).

    \begin{equation} m_1 = \dfloorratio{235j + 13}{19} + m_0 \end{equation}

  3. Berekening 2 berekent uit het lopende maandnummer \( m_1 \) en het dagnummer \( d_0 \) sinds het begin van de maand het lopende dagnummer \( s \).

    \begin{equation} s = \dfloorratio{6940m_1}{235} + d_0 \end{equation}

  4. En dan tellen we er nog de CJDN van dag 1 van maand 1 van jaar 0 bij op.

    \begin{equation} J = s + J_0 = s + 1607175 \end{equation}

Dit dikt in tot

\begin{equation} J = \dfloorratio{6940\dparen{\dfloorratio{235j + 13}{19} + m − 1}}{235} + d + 1607174 \end{equation}

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*} m_0 \| = m − 1 = 9 − 1 = 8 \\ d_0 \| = d − 1 = 27 − 1 = 26 \\ m_1 \| = \dfloorratio{235j + 13}{19} + m_0 = \dfloorratio{235×3 + 13}{19} + 8 = \dfloorratio{718}{19} + 8 = 37 + 8 = 45 \\ s \| = \dfloorratio{6940m_1}{235} + d_0 = \dfloorratio{6940×45}{235} + 26 = \dfloorratio{312300}{235} + 26 = 1328 + 26 = 1354 \\ J \| = s + J_0 = 1354 + 1607175 = 1608529 \end{align*}

Wat meer voorbeelden:

\({j}\) \({m}\) \({d}\) \({m_0}\) \({d_0}\) \({m_1}\) \({s}\) \({J}\)
0 1 1 0 0 0 0 1607175
1 1 1 0 0 13 383 1607558
3 9 27 8 26 45 1354 1608529
2315 3 1 2 0 28635 845646 2452821

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.

  j ────────────┐
  m ─(−1)─ m₀ ─(1)─ m₁ ─┐
  d ─(−1)─ d₀ ─────────(2)─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 235 19 12 7 13 12.368421
2 6940 235 29 125 0 29.531915

  1. Eerst trekken we de CJDN van dag 1 van maand 1 van jaar 0 af van de CJDN \(J\) van de gewenste dag om het lopende dagnummer \( s \) te vinden.

    \begin{equation} s = J − J_0 = J − 1607175 \end{equation}

  2. Berekening 2 leidt uit het lopende dagnummer \( s \) het lopende maandnummer \( m_1 \) en het dagnummer \( d_0 \) sinds het begin van de maand af.

    \begin{align} \{ m_1, ω_1 \} \| = \Div(235s + 234, 6940) \\ d_0 \| = \dfloorratio{ω_1}{235} \end{align}

  3. Berekening 1 leidt uit het lopende maandnummer \( m_1 \) het jaarnummer \( j \) en het maandnummer \( m_0 \) sinds het begin van het jaar af.

    \begin{align} \{ j, ω_2 \} \| = \Div(19m_1 + 5, 235) \\ m_0 \| = \dfloorratio{ω_2}{19} \end{align}

  4. En dan tellen we 1 op bij het maandnummer \( m_0 \) en dagnummer \( d_0 \) om ze te laten beginnen bij 1 in plaats van 0.

    \begin{align} m \| = m_0 + 1 \\ d \| = d_0 + 1 \end{align}

Dit kan worden ingedikt tot

\begin{align} \{ m_1, ω_1 \} \| = \Div(235J − 377685891, 6940) \\ \{ j, ω_2 \} \| = \Div(19m_1 + 5, 235) \\ m \| = \dfloorratio{ω_2}{19} + 1 \\ d \| = \dfloorratio{ω_1}{235} + 1 \end{align}

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

\begin{align*} s \| = J − J_0 = 1608529 − 1607175 = 1354 \\ \{ m_1, ω_1 \} \| = \Div(235s + 234, 6940) = \Div(235×1354 + 234, 6940) \\ \| = \Div(318424, 6940) = \{ 45, 6124 \} \\ d_0 \| = \dfloorratio{ω_1}{235} = \dfloorratio{6124}{235} = 26 \\ \{ j, ω_2 \} \| = \Div(19m_1 + 5, 235) = \Div(19×45 + 5, 235) = \Div(860, 235) = \{ 3, 155\} \\ m_0 \| = \dfloorratio{155}{19} = 8 \\ m \| = 8 + 1 = 9 \\ d \| = 26 + 1 = 27 \end{align*}

ofwel dag 27 van maand 9 van jaar 3.

Op de ingedikte manier:

\begin{align*} \{ m_1, ω_1 \} \| = \Div(235J − 377685891, 6940) = \Div(235×1608529 − 377685891, 6940) \\ \| = \Div(318424, 6940) = \{ 45, 6124\} \\ \{ j, ω_2 \} \| = \Div(19m_1 + 5, 235) = \Div(19×45 + 5, 235) \\ \| = \Div(860, 235) = \{ 3, 155 \} \\ m \| = \dfloorratio{ω_2}{19} + 1 = \dfloorratio{155}{19} + 1 = 8 + 1 = 9 \\ d \| = \dfloorratio{ω_1}{235} + 1 = \dfloorratio{6124}{235} + 1 = 26 + 1 = 27 \end{align*}

Wat meer voorbeelden:

\({J}\) \({s}\) \({m_1}\) \({ω_1}\) \({d_0}\) \({j}\) \({ω_2}\) \({m_0}\) \({m}\) \({d}\)
1607175 0 0 234 0 0 5 0 1 1
1607558 383 13 19 0 1 17 0 1 1
1608529 1354 45 6124 26 3 155 8 9 27
2452821 845646 28635 144 0 2315 45 2 3 1

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.

Als voorbeeld rekenen we de CJDN uit van de volgende data in de Joodse kalender:

\({j}\) maand \({m}\) \({d}\)
4524 kisleew 9 30
4527 siewan 3 1
4682 kisleew 9 12
4682 siewan 3 18
325709 adar Ⅱ 13 29

De berekeningen zijn schematisch als volgt:

  j ──────────[1]─ a₁ ──────┐
  m ─(−1)─ m₀ ─┴───│────────┤
                  [2]─ d₁ ─[3]─ d₂ ─┐
  d ─(−1)─ d₀ ─────────────────────[4]─ s ─(+J₀)─ J

  1. Eerst trekken we 1 af van het maandnummer \( m \) en het dagnummer \( d \) zodat ze beginnen met 0 in plaats van 1.

    \begin{align*} m_0 \| = m − 1 \\ d_0 \| = d − 1 \end{align*}

    Voor de voorbeelddata vinden we

    \({j}\) \({m}\) \({d}\) \({m_0}\) \({d_0}\)
    4524 9 30 8 29
    4527 3 1 2 0
    4682 9 12 8 11
    4682 3 18 2 17
    325709 13 29 12 28

  2. Berekening 1 zorgt ervoor dat rekenmaand \( m_0 = 0 \)(nisan) de eerste maand na de wisseling van het rekenjaarnummer is. Daar is extra moeite voor nodig omdat in de Joodse kalender het kalenderjaarnummer eentje toeneemt aan het begin van kalendermaand 7. Na kalendermaand 6 van jaar \( j − 1 \) volgt kalendermaand 7 van jaar \( j \), dan maanden 8 tot en met 12 of 13 van kalenderjaar \( j \), en dan maanden 1 tot en met 6 van datzelfde kalenderjaar \( j \). Daarna volgt maand 7 van kalenderjaar \( j + 1 \), enzovoorts, zoals aangegeven in de volgende tabel. Maand 13 staat tussen haakjes omdat niet elk jaar die maand heeft.

    \({m}\) \({m_0}\) \({∆j}\)
    6 5 −1
    7 6 0
    8 7 0
    9 8 0
    10 9 0
    11 10 0
    12 11 0
    (13) (12) 0
    1 0 0
    2 1 0
    3 2 0
    4 3 0
    5 4 0
    6 5 0
    7 6 +1

    Het is lastig rekenen met de plotselinge afname van het maandnummer halverwege het jaar, vooral ook omdat het op een ingewikkelde manier van het jaar afhangt of kalendermaand 1 volgt na kalendermaand 12 of pas na kalendermaand 13. Het is daarom beter om het begin van het rekenjaar te leggen aan het begin van kalendermaand \( m = 1 \), dus rekenmaand \( m_0 = 0 \). We verschuiven kalendermaanden 1 t/m 6 van kalenderjaar \( j − 1 \) naar rekenjaar \( a_1 = j \) waar ook de daaropvolgende kalendermaanden 7 t/m 12 of 13 bij horen. Dan valt Nieuwjaar (1 tisjrie) van kalenderjaar \( j \) in rekenjaar \( a_1 = j \). We krijgen dit voor elkaar met:

    \begin{align} α_1 \| = \dfloorratio{12 − m_0}{7} \\ a_1 \| = j + α_1 \end{align}

    Bijvoorbeeld, op de laatste dag van kalendermaand 13 van kalenderjaar 4682 in de Joodse kalender volgt de 1e dag van maand 1 van nog steeds jaar 4682 (niet 4683!). 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}\) \({m_0}\) \({d_0}\) \({α_1}\) \({a_1}\)
    4682 13 29 12 28 0 4682
    4682 1 1 0 0 1 4683
    4682 2 1 1 0 1 4683
    4682 3 1 2 0 1 4683
    4682 4 1 3 0 1 4683
    4682 5 1 4 0 1 4683
    4682 6 1 5 0 1 4683
    4682 6 29 5 28 1 4683
    4683 7 1 6 0 0 4683
    4683 8 1 7 0 0 4683
    4683 9 1 8 0 0 4683
    4683 10 1 9 0 0 4683
    4683 11 1 10 0 0 4683
    4683 12 1 11 0 0 4683
    4683 12 30 11 29 0 4683
    4683 1 1 0 0 1 4684

    Voor rekenmaand \( m_0 = 8 \) vinden we \( α_1 = \dfloor{(12 − m_0)/7} = \dfloor{4/7} = 0 \) dus \( a_1 = j \). Voor rekenmaand \( m_0 = 4 \) vinden we \( α_1 = \dfloor{(12 ― 4)/7} = 1 \) dus \( a_1 = j + 1 \). Zie bovenstaande tabel voor andere voorbeelden.

    Voor de voorbeelddata vinden we

    \({j}\) \({m}\) \({d}\) \({m_0}\) \({α_1}\) \({a_1}\)
    4524 9 30 8 0 4524
    4527 3 1 2 1 4528
    4682 9 12 8 0 4682
    4682 3 18 2 1 4683
    325709 13 29 12 0 325709

  3. Berekening 2 levert het lopende dagnummer \( d_1 \) van nieuwjaarsdag van jaar \( j \) wat ook nieuwjaarsdag van rekenjaar \( a_1 = j \) is. Dit is een ingewikkelde berekening die niet alleen afhangt van jaar \( j \) maar ook van het vorige en het volgende kalenderjaar.

    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 \( μ_1 \) van nieuwjaarsdag van kalenderjaar \( j \) is gelijk aan

    \begin{equation} μ_1 = \dfloorratio{235j − 234}{19} \label{eq:j2μ1} \end{equation}

    Voor het begin van het Joodse jaar A.M. 4682 (\( j = 4682 \)) vinden we

    \begin{align*} μ_1 \| = \dfloorratio{235j − 234}{19} = \dfloorratio{235×4682 − 234}{19} \\ \| = \dfloorratio{1100036}{19} = 57896 \end{align*}

    dus Nieuwjaar van A.M. 4682 is 57896 maanden na nieuwjaar van A.M. 1.

    Voor de voorbeelddata vinden we

    \({j}\) \({μ_1}\)
    −1 −25
    0 −13
    1 0
    2 12
    4524 55942
    4527 55979
    4682 57896
    325709 4028493

    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 \( j \) 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 weinig vindt, dan kun je op de manier van hoofdstuk 12.2 alternatieven vinden. Eén alternatief is

    \begin{equation} μ_1 = 12j + \dfloorratio{7j − 234}{19} \end{equation}

    waarvoor \( |j| \) niet groter mag zijn dan \( w/7 \). Een ander alternatief, voor \( w = 2^{31} = 2147483648 \), is

    \begin{align} \{ ω_1, α_2 \} \| = \Div(j, 11) \\ μ_1 \| = 136ω_1 + \dfloorratio{ω_1 + 235α_2 − 234}{19} \end{align}

    waarvoor \( |j| \) elke waarde mag hebben tot \( w \).

    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 \( δ_1 \) 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 \( μ_1 \) is dan gelijk aan

    \begin{equation} δ_1 = \dfrac{765433μ_1 + 5604}{25920} \label{eq:μ} \end{equation}

    Het lopende dagnummer \( δ_2 \) van de kalenderdag waarop die nieuwe maan valt is dan

    \begin{equation} δ_2 = \dfloor{δ_1} = \dfloorratio{765433μ_1 + 5604}{25920} \end{equation}

    We kijken weer naar nieuwjaar van het Joodse jaar A.M. 4682. We vonden eerder dat \( μ_1 = 57896 \). Daarmee is

    \begin{align*} δ_1 \| = \dfrac{765433μ_1 + 5604}{25920} = \dfrac{765433×57896 + 5604}{25920} \\ \| = \frac{44315514572}{25920} = 1709703 + \frac{12812}{25920} \\ δ_2 \| = \dfloorratio{765433μ_1 + 5604}{25920} = \dfloorratio{765433×57896 + 5604}{25920} \\ \| = \dfloorratio{44315514572}{25920} = 1709703 \end{align*}

    Merk op dat het grootste tussenresultaat 44'315'514'572 veel groter is dan wat in een geheugenlocatie van 32 bits past.

    Voor de voorbeelddata vinden we

    \({j}\) \({μ_1}\) \({δ_2}\)
    4524 55942 1652000
    4527 55979 1653093
    4682 57896 1709703
    325709 4028493 118963791

    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 \( μ_1 \) niet groter zijn dan \( w/765433 \), in plaats van niet groter dan \( w \). Voor \( w = 2^{31} \) is dat \( w/765433 ≈ 2805 \) maanden, wat overeenkomt met ongeveer 226 jaren, veel te weinig voor praktisch gebruik. Op de manier van hoofdstuk 12.2 vinden we het volgende alternatief:

    \begin{align} \{ω_2, μ_2\} \| = \Div(μ_1, 1095) \\ δ_2 \| = 32336ω_2 + \dfloorratio{15ω_2 + 765433μ_2 + 5604}{25920} \end{align}

    Voor hetzelfde geval als in het vorige voorbeeld vinden we

    \begin{align*} \{ω_2, μ_2\} \| = \Div(μ_1, 1095) = \Div(57896, 1095) = \{52, 956\} \\ δ_2 \| = 32336ω_2 + \dfloorratio{15ω_2 + 765433μ_2 + 5604}{25920} \\ \| = 32336×52 + \dfloorratio{15×52 + 765433×956 + 5604}{25920} \\ \| = 1681472 + \dfloorratio{731760332}{25920} = 1681472 + 28231 = 1709703 \end{align*}

    dus hetzelfde antwoord als voorheen, maar nu is het grootste tussenresultaat 731'760'332 wat ruim kleiner is dan \( w \) = 2'147'483'648.

    Voor de voorbeelddata vinden we

    \({j}\) \({μ_1}\) \({ω_2}\) \({μ_2}\) \({δ_2}\)
    4524 55942 51 97 1652000
    4527 55979 51 134 1653093
    4682 57896 52 956 1709703
    325709 4028493 3678 1083 118963791

    Nu passen we waar nodig het voorlopige lopende dagnummer \( δ_2 \) aan voor vier mogelijke vertragingen.

    1. De eerste vertraging treedt op als de middelbare conjunctie valt op of na het middaguur en vóór het einde van de kalenderdag (dus voor 6 uur 's avonds). In dat geval wordt nieuwjaar 1 dag vertraagd, wordt het huidige jaar 1 dag korter en het voorgaande jaar 1 dag langer.

      De tijd van de dag volgt uit \( \dmod{δ_1}{1} \), die gelijk is aan 0 bij het begin van de kalenderdag (om 6 uur 's avonds), en gelijk is aan 3/4 op het midden van de dag. Dus als \( \dmod{δ_1}{1} ≥ 3/4 \), dan valt nieuwjaar één dag later. Als \( \dmod{δ_1}{1} ≥ 3/4 \) dan is \( \dmod{δ_1}{1} + 1/4 ≥ 1 \) dus \( \dfloor{δ_1 + \frac{1}{4}} = δ_2 + 1 \), dus het lopende dagnummer \( δ_3 \) van de eerste dag van de maand, inclusief de eerste vertraging, is

      \begin{equation} δ_3 = \dfloor{δ_1 + \frac{1}{4}} = \dfloorratio{765433μ_1 + 12084}{25920} \label{eq:υ_1} \end{equation}

      Voor A.M. 4682 vinden we

      \begin{align*} δ_3 \| = \dfloorratio{765433μ_1 + 12084}{25920} = \dfloorratio{765433×57896 + 12084}{25920} \\ \| = \dfloorratio{44315521052}{25920} = 1709703 = δ_2 \end{align*}

      dus voor dat jaar heeft de eerste vertraging geen invloed.

      Als je werkt in een rekenomgeving waarin hele getallen niet groter mogen worden dan een bepaald getal \( w \), dan gelden hier dezelfde beperkingen als in het vorige voorbeeld. Je kunt dan ook dezelfde alternatieven gebruiken als in het vorige voorbeeld, als je daarin 5604 vervangt door 12084.

      De tweede vertraging treedt op als de middelbare conjunctie (na behandeling van de eerste vertraging) valt op een zondag, woensdag of vrijdag. In dat geval wordt nieuwjaar 1 dag vertraagd, wordt het huidige jaar 1 dag korter en het voorgaande jaar 1 dag langer.

    2. \( δ_2 = δ_3 = 0 \) komt overeen met CJDN 347998 en dat was een maandag, want \( \dmod{347998}{7} = 0 \) en 0 komt overeen met maandag. De tweede vertraging treedt op als

      \begin{equation} δ_4 = \dmod{δ_3}{7} \end{equation}

      gelijk is aan 2, 4 of 6.

      We zoeken naar een formule die 0 oplevert als \( δ_4 \) gelijk is aan 0, 1, 3 of 5, en die 1 oplevert als \( δ_4 \) gelijk is aan 2, 4 of 6. Omdat we alleen waarden 0 en 1 als uitkomst willen ligt iets zoals \( \dmod{·}{2} \) voor de hand. Dat we alleen hele getallen willen hebben duidt op iets van de vorm \( \dmod{⌊...δ_4...⌋}{2} \). De simpelste formule die zou kunnen werken is dan \( \dmod{⌊kδ_4⌋}{2}\) voor een geschikte factor \( k \). Enig zoekwerk levert op dat we de gewenste uitkomsten krijgen als \( 5/6 \lt k \lt 1 \). Enkele breuken met kleine noemers die geschikt zijn voor \( k \) zijn 6/7, 7/8, 8/9, 9/10, 10/11, 11/12. De breuk met noemer 7 heeft de kleinste noemer en heeft als voordeel dat die ook de goede waarde oplevert als je \( \dmod{⌊kδ_3⌋}{2} \) uitrekent in plaats van \( \dmod{⌊k\dmod{δ_3}{7}⌋}{2} \): dat scheelt weer een modulus-berekening. Daarmee is het lopende dagnummer \( δ_5 \) van de eerste dag van de maand, inclusief de eerste twee vertragingen, gelijk aan

      \begin{equation} δ_5 = δ_3 + \dmod{\dfloorratio{6δ_3}{7}}{2} \label{eq:υ_2} \end{equation}

      Als je werkt in een rekenomgeving waarin hele getallen niet groter mogen worden dan een betaald getal \( w \), dan mag \( δ_3 \) niet groter worden dan \( w/6 \). Voor 32-bitsgetallen komt dat overeen met ongeveer 979914 jaar. Als dat te weinig is, dan kun je alsnog \( \dmod{⌊k\dmod{δ_3}{7}⌋}{2} \) gebruiken:

      \begin{equation} δ_5 = δ_3 + \dmod{\dfloorratio{6\dmod{δ_3}{7}}{7}}{2} \end{equation}

    3. De derde vertraging is nodig als een jaar (na behandeling van de eerste twee vertragingen) een lengte zou krijgen van 356 dagen, wat onacceptabel lang wordt gevonden. Door een vertraging van 2 dagen toe te passen wordt die lengte dan 354 dagen, wat wel acceptabel is. Het voorgaande jaar (dat 353 of 383 dagen lang is) wordt daarmee 2 dagen langer (dus 355 of 385 dagen).

      De lengte \( L_2(j) \) van kalenderjaar \( j \) (met inachtneming van de eerste twee vertragingen) is gelijk aan

      \begin{equation} L_2(j) = δ_5(j + 1) − δ_5(j) \end{equation}

      dus nieuwjaar van jaar \( j \) wordt 2 dagen vertraagd als \( L_2(j) = 356 \). Dit krijgen we voor elkaar met formule

      \begin{equation} δ_6 = 2\dmod{\dfloorratio{L_2 + 19}{15}}{2} \end{equation}

      \({L_2}\) \({δ_6}\)
      353 0
      354 0
      355 0
      356 2
      382 0
      383 0
      384 0
      385 0

    4. De vierde vertraging is nodig als het vorige jaar (na behandeling van de eerste twee vertragingen) een lengte zou krijgen van 382 dagen, wat onacceptabel kort wordt gevonden. Door het begin van het huidige jaar 1 dag uit te stellen wordt het vorige jaar 383 dagen lang, wat wel acceptabel is. Het huidige jaar (dat 355 dagen lang was) wordt daarmee 1 dag korter (dus 354 dagen).

      Dus nieuwjaar van jaar \( j \) wordt 1 dag vertraagd als \( L_2(j − 1) = 382 \). Dit krijgen we voor elkaar met formule

      \begin{equation} δ_7 = \dmod{\dfloorratio{L_2(j − 1) + 7}{15}}{2} \end{equation}

      \({L_2}\) \({δ_7}\)
      353 0
      354 0
      355 0
      356 0
      382 1
      383 0
      384 0
      385 0

      dus het lopende dagnummer \( d_1 \) van Nieuwjaar, met inachtneming van alle vier de vertragingen is

      \begin{align} μ_1(j) \| = \dfloorratio{235j − 234}{19} \\ δ_3(j) \| = \dfloorratio{765433μ_1(j) + 12084}{25920} \\ δ_5(j) \| = δ_3(j) + \dmod{\dfloorratio{6δ_3(j)}{7}}{2} \\ L_2(j) \| = δ_5(j + 1) − δ_5(j) \\ d_1(j) \| = δ_5(j) + 2\dmod{\dfloorratio{L_2(j) + 19}{15}}{2} + \dmod{\dfloorratio{L_2(j − 1) + 7}{15}}{2} \notag \\ \| = δ_5(j) + 2\dmod{\dfloorratio{δ_5(j + 1) − δ_5(j) + 19}{15}}{2} \notag \\ \| + \dmod{\dfloorratio{δ_5(j) − δ_5(j − 1) + 7}{15}}{2} \end{align}

      Merk op dat voor de berekening van \( d_1 \) van jaar \( j \) de waarden van \( δ_5(j − 1) \), \( δ_5(j) \) en \( δ_5(j + 1) \) nodig zijn.

    We weten nu het lopende dagnummer \( d_1 \) van nieuwjaar (1 tisjrie) van het kalenderjaar \( j \), wat ook nieuwjaar van rekenjaar \( a_1 = j \) is.

    De lengte \( L \) van jaar \( j \) is dan

    \begin{equation} L = d_1(j + 1) − d_1(j) \end{equation}

    Voor de berekening van \( L \) voor jaar \( j \) heb je \( δ_5 \) nodig voor de 4 jaren \( j − 1 \) tot en met \( j + 2 \).

    Er zijn geen jaren waarvoor \( L_2(j) = 356 \) en tegelijkertijd \( L_2(j − 1) = 382 \), dus de derde en vierde vertraging worden nooit tegelijkertijd toegepast.

    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 \( j = 4682 \) vonden we eerder dat \( δ_2 = 1709703 \). Uit formule \eqref{eq:υ_1} volgt dat \( δ_3 = 1709703 = δ_2 \), dus de eerste vertraging heeft geen effect op dat jaar. Uit formule \eqref{eq:υ_2} volgt dat

    \begin{align*} δ_5 \| = δ_3 + \dmod{\dfloorratio{6δ_3}{7}}{2} \\ \| = 1709703 + \dmod{\dfloorratio{6×1709703}{7}}{2} \\ \| = 1709703 + \dmod{\dfloorratio{10258218}{7}}{2} \\ \| = 1709703 + \dmod{1465459}{2} = 1709703 + 1 = 1709704 \end{align*}

    dus de tweede vertraging heeft wel effect. De lengte van jaar \( j = 4682 \) na de eerste twee vertragingen is \( L_2(4682) = δ_5(4683) − δ_5(4682) = 1710087 − 1709704 = 383 \) dagen. Het jaar met \( j = 4683 \) 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.

    Wat meer voorbeelden:

    \({j}\) \({δ_2}\) \({δ_3}\) \({δ_5}\) \({L_2}\) \({δ_6}\) \({δ_7}\) \({d_1}\) \({L}\) v
    −1 −739 −738 −737 353 0 0 −737 353 1,2
    0 −384 −384 −384 384 0 0 −384 384
    1 0 0 0 355 0 0 0 355
    2 354 354 355 355 0 0 355 355 2
    4523 1651646 1651646 1651646 354 0 0 1651646 354
    4524 1652000 1652000 1652000 355 0 0 1652000 355
    4525 1652355 1652355 1652355 385 0 0 1652355 385
    4526 1652738 1652739 1652740 353 0 0 1652740 353 1,2
    4527 1653093 1653093 1653093 354 0 0 1653093 354
    4528 1653447 1653447 1653447 385 0 0 1653447 385
    4681 1709349 1709349 1709349 355 0 0 1709349 355
    4682 1709703 1709703 1709704 383 0 0 1709704 385 2
    4683 1710087 1710087 1710087 356 2 0 1710089 354 3
    4684 1710441 1710442 1710443 353 0 0 1710443 353 1,2
    5517 2014695 2014695 2014696 355 0 0 2014696 355 2
    5518 2015049 2015050 2015051 382 0 0 2015051 383 1,2
    5519 2015433 2015433 2015433 355 0 1 2015434 354 4
    5520 2015788 2015788 2015788 355 0 0 2015788 355
    325708 118963437 118963437 118963437 355 0 0 118963437 355
    325709 118963791 118963792 118963792 385 0 0 118963792 385 1
    325710 118964175 118964176 118964177 354 0 0 118964177 354 1,2
    325711 118964530 118964530 118964531 353 0 0 118964531 353 2

    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×765'433/25920 = 35'975'351/5184 dagen lang, dus elke periode van 5184 cycli omvat een geheel aantal dagen, namelijk 35'975'351. Dit aantal dagen is geen veelvoud van 7, dus de kalender herhaalt zich pas weer na 7×35'975'351 = 251'827'457 dagen = 35'975'351 weken = 689'472 jaren = 8'527'680 maanden.

    De verdeling van de lengtes van de kalenderjaren in die periode van 689'472 jaar staan in de volgende tabel, met daarbij genoemd hoeveel van die jaren die lengte hebben als je verschillende mogelijke vertragingen meetelt.

    \({L}\) \({δ_2}\) \({δ_3}\) \({δ_5}\) \({δ_6}\) \({d_1}\)
    353 78'738 69'222 69'222
    354 275'583 275'583 140'946 163'785 167'497
    355 159'873 159'873 192'933 202'449 198'737
    356 22'839
    382 3712 3712
    383 25'984 25'984 116'288 102'965 106'677
    384 228'032 228'032 36'288 36'288 36'288
    385 97'728 111'051 111'051

    De volgende tabel toont van hoeveel jaren uit de grote periode van 689'472 het nieuwjaar wordt beïnvloed door de vertragingen genoemd in de kolom met titel "v".

    v
     #       
        % 
    268'937 39.0
    1 172'368 25.0
    2 295'488 42.9
    3 22'839 3.3
    4 3712 0.5
    1+2 73'872 10.7
    rest 0 0

    Nieuwjaar kan tegelijkertijd vertraagd worden door de eerste en tweede vertragingen, maar niet door een andere combinatie van meer dan één vertraging.

    De volgende tabel toont hoeveel jaren er kunnen zijn tussen twee opeenvolgende gevallen van een bepaalde combinatie van vertragingen. Bijvoorbeeld, de tijd tussen twee nieuwjaren die vertraagd werden door alleen de 2e vertraging varieert tussen 1 en 7 jaar met een gemiddelde van 2,33 jaar.

    v min max gemiddeld
       - 
    1 7 2.56
    1 1 16 4.00
    2 1 7 2.33
    3 7 71 30.19
    4 78 345 185.73
    1+2 3 53 9.33

    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 40'000 keer voor in de grote periode van 689'472 jaar.

    353 354 355 383 384 385
    353 0 16'404 16'404 0 0 36'414
    354 13'776 0 54'468 53'354 0 45'899
    355 9516 54'491 16'381 53'323 36'288 28'738
    383 0 40'000 66'677 0 0 0
    384 29'965 0 13'323 0 0 0
    385 22'965 56'602 31'484 0 0 0

  4. Berekening 3 levert het lopende dagnummer \( d_2 \) van de eerste dag van rekenmaand \( m_0 \) uit dat maandnummer en uit en het lopende dagnummer \( d_1 \) van nieuwjaar.

    De maandlengtes zijn als volgt, in jaren met verschillende lengtes:

    Naam 353 354 355 383 384 385
    niesan 30 30 30 30 30 30
    ijar 29 29 29 29 29 29
    siewan 30 30 30 30 30 30
    tammoez 29 29 29 29 29 29
    aaw 30 30 30 30 30 30
    elloel 29 29 29 29 29 29
    tisjrie 30 30 30 30 30 30
    chesjwan 29 29 30 29 29 30
    kisleew 29 30 30 29 30 30
    teweet 29 29 29 29 29 29
    sjewat 30 30 30 30 30 30
    adar Ⅰ 30 30 30
    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 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} δ_8 = \dfloorratio{384m_0 + 7}{13} \end{equation}

    waarbij \( m_0 \) het rekenmaandnummer is en \( δ_8 \) het dagnummer van de eerste dag van die maand is sinds de eerste dag van maand 1. Let op: in een jaar van 12 maanden geven wij maand adar het rekenmaandnummer \( m_0 = 11 \) maar in een jaar van 13 maanden geven wij adar (die dan adar Ⅱ genoemd wordt) het rekenmaandnummer \( m_0 = 12 \).

    \({m_0}\) \({δ_8}\) \({∆δ_8}\)
    0 0 30
    1 30 29
    2 59 30
    3 89 29
    4 118 30
    5 148 29
    6 177 30
    7 207 29
    8 236 30
    9 266 29
    10 295 30
    11 325 30
    12 355 29

    Deze formule kan ook gebruikt worden voor de maandlengtes in een jaar van 354 dagen, als de lengte van het jaar de 12e maand (\( m_0 = 11 \)) 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 rekenmaand 8 een dag korter worden. In een jaar met 355 of 385 dagen moet rekenmaand 7 een dag langer worden. De correcties \( δ_9 \) voor maand 7 en \( δ_{10} \) voor maand 8 als functie van de jaarlengte \( L \) zijn

    \({L}\) \({δ_9}\) \({δ_{10}}\)
    353 0 −1
    354 0 0
    355 1 0
    383 0 −1
    384 0 0
    385 1 0

    We vinden de volgende formules voor deze correcties:

    \begin{align} δ_9 \| = \dmod{\dfloorratio{L + 1}{2}}{3} \\ δ_{10} \| = −\dmod{\dfloorratio{385 − L}{2}}{3} \end{align}

    De \( δ_9 \)-correctie is van toepassing op het begin van rekenmaanden 8 t/m 12, en de \( δ_{10} \)-correctie op het begin van rekenmaanden 9 t/m 12. In de volgende tabel geeft \( ω_2 \) aan (met waarde 1) op welke maanden de \( δ_9 \)-correctie van toepassing is, en \( ω_3 \) voor de \( δ_{10 }\)-correctie.

    \({m_0}\) \({ω_2}\) \({ω_3}\)
    0 0 0
    1 0 0
    2 0 0
    3 0 0
    4 0 0
    5 0 0
    6 0 0
    7 0 0
    8 1 0
    9 1 1
    10 1 1
    11 1 1
    12 1 1

    Dat krijgen we met formules

    \begin{align} ω_2 \| = \dfloorratio{m_0 + 4}{12} \\ ω_3 \| = \dfloorratio{m_0 + 3}{12} \end{align}

    Daarmee wordt de formule om van kalendermaandnummer \( m_0 \) te gaan naar het dagnummer \( δ_{11} \) van de eerste dag van die maand sinds de eerste dag van maand nisan \( m_0 = 0 \):

    \begin{align} δ_{11} \| = δ_8 + ω_2 δ_9 + ω_3 δ_{10} \notag \\ \| = \dfloorratio{384m_0 + 7}{13} + \dmod{\dfloorratio{L + 1}{2}}{3} \dfloorratio{m_0 + 4}{12} − \dmod{\dfloorratio{385 − L}{2}}{3} \dfloorratio{m_0 + 3}{12} \end{align}

    Voor maand kislev (\( m_0 = 8 \)) van rekenjaar 4682 (die \( L = 385 \) heeft) vinden we

    \begin{align*} δ_8 \| = \dfloorratio{384m_0 + 7 }{13} = \dfloorratio{384×8 + 7}{13} = \dfloorratio{3079}{13} = 236 \\ δ_9 \| = \dmod{\dfloorratio{L + 1}{2}}{3} = \dmod{\dfloorratio{386}{2}}{3} = \dmod{193}{3} = 1 \\ δ_{10} \| = −\dmod{\dfloorratio{385 − L}{2}}{3} = −\dmod{\dfloorratio{385 − 385}{2}}{3} = 0 \\ ω_2 \| = \dfloorratio{m_0 + 4}{12} = \dfloorratio{8 + 4}{12} = \dfloorratio{12}{12} = 1 \\ ω_3 \| = \dfloorratio{m_0 + 3}{12} = \dfloorratio{8 + 3}{12} = \dfloorratio{11}{12} = 0 \\ δ_{11} \| = δ_8 + ω_2 δ_9 + ω_3 δ_{10} = 236 + 1×1 − 0×0 = 237 \end{align*}

    Voor de voorbeelddata vinden we

    \({j}\) \({m}\) \({L}\) \({δ_8}\) \({δ_9}\) \({δ_{10}}\) \({ω_2}\) \({ω_3}\) \({δ_{11}}\)
    4524 9 355 236 1 0 1 0 237
    4527 3 354 59 0 0 0 0 59
    4682 9 385 236 1 0 1 0 237
    4682 3 385 59 1 0 0 0 59
    325709 13 385 355 1 0 1 1 356

    De kalendermaanden 1 t/m 6 (rekenmaanden 0 t/m 5) hebben samen 177 dagen in elk jaar, dus 1 nisan (rekenmaand 0) van rekenjaar \( a_1 \) valt altijd 177 dagen voor 1 tisjrie (rekenmaand 6) van datzelfde rekenjaar (niet kalenderjaar), dus het lopende dagnummer \( δ_{12} \) van 1 nisan van rekenjaar \( a_1 \) is

    \begin{equation} δ_{12} = d_1(a_1) − 177 \end{equation}

    Daarmee is het lopende dagnummer \( d_2 \) van de eerste dag van rekenmaand \( m_0 \) van rekenjaar \( a_1 \), gemeten sinds 1 tisjrie van kalenderjaar 1

    \begin{equation} d_2 = δ_{12} + δ_{11} = d_1(a_1) − 177 + δ_{11} \end{equation}

    Voor maand kislev van kalenderjaar \( j = 4682 \) vinden we dat \( a_1 = j = 4682 \) dus

    \[ d_2 = d_1(4682) − 177 + δ_{11} = 1709704 − 177 + 237 = 1709764 \]

    Voor de voorbeelddata vinden we

    \({j}\) \({a_1}\) \({m}\) \({d}\) \({d_1}\) \({δ_{11}}\) \({δ_{12}}\) \({d_2}\)
    4524 4524 9 30 1652000 237 1651823 1652060
    4527 4528 3 1 1653447 59 1653270 1653329
    4682 4682 9 12 1709704 237 1709527 1709764
    4682 4683 3 18 1710089 59 1709912 1709971
    325709 325709 13 29 118963792 356 118963615 118963971

  5. Berekening 3 levert het lopende dagnummer \( s \) van de gewenste dag uit het lopende dagnummer \( d_2 \) van de eerste dag van kalendermaand \( m \) van kalenderjaar \( j \) en het rekendagnummer \( d_0 \) sinds de eerste dag van die maand:

    \begin{equation} s = d_2 + d_0 \end{equation}

    Voor 12 kislev 4682 vinden we

    \[ s = 1709764 + 11 = 1709775 \]

    Voor de voorbeelddata vinden we

    \({j}\) \({m}\) \({d}\) \({d_0}\) \({d_2}\) \({s}\)
    4524 9 30 29 1652060 1652089
    4527 3 1 0 1653329 1653329
    4682 9 12 11 1709764 1709775
    4682 3 18 17 1709971 1709988
    325709 13 29 28 118963971 118963999

  6. De epoche van de kalender is 1 tisjrie van het jaar A.M. 1 en komt overeen met CJDN 347'998 = \( J_0 \). Daarmee wordt het CJDN \( J \) van de gewenste datum

    \begin{equation} J = s + J_0 = s + 347998 \end{equation}

    Voor 12 kislev 4682 vinden we

    \[ J = 1709775 + 347998 = 2057773 \]

    dus de CJDN die overeenkomt met 12 kislev 4682 is 2'057'773.

    Voor de voorbeelddata vinden we

    \({j}\) \({m}\) \({d}\) \({s}\) \({J}\)
    4524 9 30 1652089 2000087
    4527 3 1 1653329 2001327
    4682 9 12 1709775 2057773
    4682 3 18 1709988 2057986
    325709 13 29 118963999 119311997

De voorgaande berekeningen dikken in tot

\begin{align} a_1 \| = j + \dfloorratio{13 − m}{7} \\ δ_3(a_1) \| = \dfloorratio{765433\dfloorratio{235a_1 − 234}{19} + 12084}{25920} \\ δ_5(a_1) \| = δ_3(a_1) + \dmod{\dfloorratio{6δ_3(a_1)}{7}}{2} \\ L_2(a_1) \| = δ_5(a_1 + 1) − δ_5(a_1) \\ d_1 \| = δ_5(a_1) + 2\dmod{\dfloorratio{L_2(a_1) + 19}{15}}{2} + \dmod{\dfloorratio{L_2(a_1 − 1) + 7}{15}}{2} \\ L \| = d_1(a_1 + 1) − d_1(a_1) \\ J \| = d_1(a_1) + \dfloorratio{384m + 7 − 384}{13} + \dmod{\dfloorratio{L + 1}{2}}{3} \dfloorratio{m + 3}{12} \notag \\ \| − \dmod{\dfloorratio{385 − L}{2}}{3} \dfloorratio{m + 2}{12} + d + 347820 \end{align}

Voor 12 kislev 4682 (\( j = 4682, m = 9, d = 12\)) vinden we

\begin{align*} a_1 \| = j + \dfloorratio{13 − m}{7} = 4682 + \dfloorratio{13 − 9}{7} = 4682 + \dfloorratio{4}{7} = 4682 \\ δ_3(a_1) \| = \dfloorratio{765433\dfloorratio{235a_1 − 234}{19} + 12084}{25920} = \dfloorratio{765433\dfloorratio{235×4682 − 234}{19} + 12084}{25920} \\ \| = \dfloorratio{765433\dfloorratio{1100036}{19} + 12084}{25920} = \dfloorratio{765433×57896 + 12084}{25920} \\ \| = \dfloorratio{44315521052}{25920} = 1709703 \\ δ_3(a_1 − 1) \| = δ_3(4681) = 1709349s \\ δ_3(a_1 + 1) \| = δ_3(4683) = 1710087 \\ δ_3(a_1 + 2) \| = δ_3(4684) = 1710442 \\ δ_5(a_1) \| = δ_3(a_1) + \dmod{\dfloorratio{6δ_3(a_1)}{7}}{2} = 1709703 + \dmod{\dfloorratio{6×1709703}{7}}{2} \\ \| = 1709703 + \dmod{\dfloorratio{10258218}{7}}{2} = 1709703 + \dmod{1465459}{2} \\ \| = 1709703 + 1 = 1709704 \\ δ_5(a_1 − 1) \| = δ_5(4681) = 1709349 \\ δ_5(a_1 + 1) \| = δ_5(4683) = 1710087 \\ δ_5(a_1 + 2) \| = δ_5(4684) = 1710443 \\ L_2(a_1) \| = δ_5(a_1 + 1) − δ_5(a_1) = 1710087 − 1709704 = 383 \\ L_2(a_1 − 1) \| = L_2(4681) = 355 \\ L_2(a_1 + 1) \| = L_2(4683) = 356 \\ d_1(a_1) \| = δ_5(a_1) + 2\dmod{\dfloorratio{L_2(a_1) + 19}{15}}{2} + \dmod{\dfloorratio{L_2(a_1 − 1) + 7}{15}}{2} \\ \| = 1709704 + 2\dmod{\dfloorratio{383 + 19}{15}}{2} + \dmod{\dfloorratio{355 + 7}{15}}{2} \\ \| = 1709704 + 2\dmod{\dfloorratio{402}{15}}{2} + \dmod{\dfloorratio{362}{15}}{2} \\ \| = 1709704 + 2\dmod{26}{2} + \dmod{24}{2} = 1709704 \\ d_1(a1 + 1) \| = d_1(4683) = 1710089 \\ L \| = d_1(a_1 + 1) − d_1(a_1) = 1710089 − 1709704 = 385 \\ J \| = d_1(a_1) + \dfloorratio{384m + 7 − 384}{13} + \dmod{\dfloorratio{L + 1}{2}}{3} \dfloorratio{m + 3}{12} \\ \| − \dmod{\dfloorratio{385 − L}{2}}{3} \dfloorratio{m + 2}{12} + d + 347820 \\ \| = 1709704 + \dfloorratio{384×9 + 7 − 384}{13} + \dmod{\dfloorratio{385 + 1}{2}}{3} \dfloorratio{9 + 3}{12} \\ \| − \dmod{\dfloorratio{385 − 385}{2}}{3} \dfloorratio{9 + 2}{12} + 12 + 347820 \\ \| = 1709704 + \dfloorratio{3079}{13} + \dmod{\dfloorratio{386}{2}}{3} \dfloorratio{12}{12} \notag − \dmod{\dfloorratio{0}{2}}{3} \dfloorratio{11}{12} + 347832 \\ \| = 1709704 + 236 + \dmod{193}{3}×1 − \dmod{0}{3}×0 + 347832 \\ \| = 2057772 + 1 − 0 = 2057773 \end{align*}

13.6.2. Van CJDN naar Joodse datum

Nu gaan we de andere kant op. De kalender is zo ingewikkeld dat we niet simpelweg de berekeningen van datum naar CJDN kunnen omkeren.

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

    \begin{equation} s = J − J_0 = J − 347998 \end{equation}

    Als voorbeeld rekenen we de volgende CJDNs om naar kalenderdatum in de Joodse kalender: 2'000'087, 2'001'327, 2'057'773, 2'057'986, 119'311'997. Voor \( J = 2057773 \) vinden we \( s = 2057773 − 347998 = 1709775 \). Al met al vinden we

    \({J}\) \({s}\)
    2000087 1652089
    2001327 1653506
    2057773 1709775
    2057986 1710165
    119311997 118964176

  2. Om te bepalen in welke maand in welk jaar de dag met een bepaald lopende dagnummer hoort moeten we de invloed van alle vertragingen meenemen, maar de invloed van de tweede, 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 tweede, 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 \( μ_2 \) voor lopende dagnummer \( s \) uitrekenen alsof de tweede, derde en vierde vertragingen niet bestaan. We moeten er dan wel rekening mee houden dat er 177 dagen verschil zit tussen het nulpunt van \( s \) en het nulpunt van de \( μ_1 \) waarop die formule gebaseerd is. En met de inverse van formule \eqref{eq:j2μ1} kunnen we dan het voorlopige rekenjaarnummer \( α_3 \) en rekenmaandnummer \( μ_3 \) in het rekenjaar vinden:

    \begin{align} μ_2 \| = \dfloorratio{25920(s + 177) + 25920 − 12084 − 1}{765433} = \dfloorratio{25920s + 4601675}{765433} \notag \\ \| = 6 + \dfloorratio{25920s + 9077}{765433} \label{eq:y_1p} \\ \{α_3,ω_3\} \| = \Div(19μ_2 + 252, 235) \\ μ_3 \| = \dfloorratio{ω_3}{19} \end{align}

    Voor \( J = 2057773 \) vonden we eerder \( s = 1709775 \), en dan nu

    \begin{align*} μ_2 \| = 6 + \dfloorratio{25920s + 9077}{765433} = 6 + \dfloorratio{25920×1709775 + 9077}{765433} \\ \| = 6 + \dfloorratio{44317377077}{765433} = 57904 \\ \{ α_3, ω_3 \} \| = \Div(19μ_2 + 252, 235) = \Div(19×57904 + 252, 235) \\ \| = \Div(1100428, 235) = \{ 4682, 158 \} \\ μ_3 \| = \dfloorratio{ω_3}{19} = \dfloorratio{158}{19} = 8 \end{align*}

    Merk op dat het grootste tussenresultaat 44'317'377'077 veel groter is dan past in een 32-bits-geheugenlocatie in een computer.

    Wat meer voorbeelden:

    \({J}\) \({s}\) \({μ_2}\) \({α_3}\) \({ω_3}\) \({μ_3}\)
    2000087 1652089 55951 4524 181 9
    2001327 1653329 55992 4528 20 1
    2057773 1709775 57904 4682 158 8
    2057986 1709988 57911 4683 56 2
    119311997 118963999 4028506 325710 16 0

    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} \( |s| \) 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} \{ω_4, δ_{13}\} \| = \Div(s, 1447) \\ μ_2 \| = 6 + 49ω_4 + \dfloorratio{23ω_4 + 25920δ_{13} + 9077}{765433} \end{align}

    waarvoor \( |s| \) elke waarde mag hebben tot \( w \), wat overeenkomt met ongeveer 5.9 miljoen jaar.

    Voor \( s = 1709775 \) vinden we

    \begin{align*} \{ω_3, δ_{13}\} \| = \Div(s, 1447) = \left\{ \dfloorratio{s}{1447}, \dmod{s}{1447} \right\} \\ \| = \left\{ \dfloorratio{1709775}{1447}, \dmod{1709775}{1447} \right\} = \{ 1181, 868 \} \\ μ_2 \| = 6 + 49ω_4 + \dfloorratio{23ω_4 + 25920δ_{13} + 9077}{765433} \\ \| = 6 + 49×1181 + \dfloorratio{23×1181 + 25920×868 + 9077}{765433} \\ \| = 57875 + \dfloorratio{22534800}{765433} = 57875 + 29 = 57904 \end{align*}

    net als hierboven. Nu is het grootste tussenresultaat 22'534'800, kleiner dan \( w \).

    Voor alle voorbeeld-CJDNs vinden we

    \({J}\) \({s}\) \({ω_4}\) \({δ_{13}}\) \({μ_2}\)
    2000087 1652089 1141 1062 55951
    2001327 1653329 1142 855 55992
    2057773 1709775 1181 868 57904
    2057986 1709988 1181 1081 57911
    119311997 118963999 82214 341 4028506

    Als we het lopende dagnummer \( d_2 \) (van 13.6.1) van de eerste dag van rekenmaand \( μ_2 \) van rekenjaar \( α_3 \) uitrekenen met alle toepasselijke vertragingen erbij, en dan het voorlopige dagnummer-in-de-maand \( s − d_2 \) 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 dan is het echte lopende maandnummer gelijk aan \( μ_2 − 1 \). Er zijn 5'963'491 zulke dagen in elke grote kalendercyclus van 8'527'680 maanden, dus niet elke maand heeft zulke dagen. Het aantal maanden in de grote kalendercyclus waarvoor de eerste twee dagen \( s \lt d_2 \) opleveren is 1'006'441, dus ongeveer 11,8% van alle maanden. En het aantal maanden waarvoor geen van de dagen \( s \lt d_2 \) opleveren is 4'767'513, dus ongeveer 55,9% van alle maanden. En 32.3% van de maanden levert één dag met \( s \lt d_2 \). Het grootste aantal maanden achter elkaar die allemaal geen dagen met \( s \lt d_2 \) hebben is 25.

    De dagen waarvoor dit dagnummer niet kleiner is dan 0 en niet groter dan 28 horen zeker in maand \( μ_2 \), 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 \( s − d_2(μ_2 + 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 (\( μ_2 + 1 \)). Er zijn 163'258 zulke dagen in elke grote kalendercyclus, dus ongeveer een op de 52 maanden heeft een dag waarvoor \( μ_2 \) eentje te klein is. Voor 97,6% van de dagen is \( μ_2 \) al goed.

    Helaas is er geen eenduidig verband tussen het dagnummer ten opzichte van maand \( μ_2 \) en het dagnummer ten opzichte van maand \( μ_2 + 1 \), dus moeten we beide dagnummers uitrekenen om te bepalen in welke maand de gewenste dag valt.

    We kunnen de inverse van formule \eqref{eq:j2μ1} gebruiken om het voorlopige kalenderjaarnummer \( y \) en voorlopige rekenmaandnummer \( z \) sinds de eerste maand van het kalenderjaar te berekenen uit het lopende maandnummer \( x \):

    \begin{align} \{y, ω\} \| = \Div(19x + 19 − (−234) − 1, 235) = \Div(19x + 252, 235) \label{eq:μ12j} \\ z \| = \dfloorratio{ω}{19} \end{align}

    De minimale berekening is als volgt:

    1. Bereken het voorlopige kalenderjaarnummer \( α_3 \) en het voorlopige rekenmaandnummer \( μ_3 \):

      \begin{align} \{ α_3, ω_3 \} \| = \Div(19μ_2 + 252, 235) \\ μ_3 \| = \dfloorratio{ω_3}{19} \end{align}

      Bereken dan het lopende dagnummer \( d_2(α_3, μ_3) \) voor de eerste dag van die rekenmaand in dat kalenderjaar, zoals beschreven in hoofdstuk 13.6.1, en dan het voorlopige rekendagnummer \( δ_{14} \) sinds de eerste dag van die maand:

      \begin{equation} δ_{14} = s − d_2(α_3, μ_3) \end{equation}

      Als \( 0 ≤ δ_{14} ≤ 28 \) dan is de gezochte rekendatum \( \{ a_1, m_0, d_0 \} \) gelijk aan \( \{ α_3, μ_3, δ_{14} \} \).

    2. Als \( δ_{14} = 29 \), bereken dan het tweede kandidaat-lopende-maandnummer \( μ_5 \):

      \begin{equation} μ_5 = μ_2 + 1 \end{equation}

      Bereken daaruit het voorlopige kalenderjaarnummer \( α_4 \), het voorlopige rekenmaandnummer \( μ_6 \), en het voorlopige rekendagnummer \( δ_{15} \):

      \begin{align} \{α_4, ω_4\} \| = \Div(19μ_5 + 252, 235) \\ μ_6 \| = \dfloorratio{ω_4}{19} \\ δ_{15} \| = s − d_2(α_4, μ_6) \end{align}

      Als \( δ_{15} \lt 0 \) dan is de gezochte rekendatum \( \{ a_1, m_0, d_0 \} \) gelijk aan \( \{ α_3, μ_3, δ_{14} \} \). En anders is de gezochte rekendatum \( \{ a_1, m_0, d_0 \} \) gelijk aan \( \{ α_4, μ_6, δ_{15} \} \).

    3. Als \( δ_{14} \lt 0 \) dan is het juiste lopende rekenmaandnummer \( μ_7 = μ_2 − 1 \). Bereken daaruit het het kalenderjaarnummer \( a_1 \), het rekenmaandnummer \( m_0 \), en het rekendagnummer \( d_0 \):

      \begin{align} \{a_1, ω_5\} \| = \Div(19μ_7 + 252, 235) \\ m_0 \| = \dfloorratio{ω_5}{19} \\ d_0 \| = s − d_2(a_1, m_0) \end{align}

    Voor \( J = 2057773 \) vonden we eerder \( s = 1709775, μ_2 = 57904 \). Dan is

    \begin{align*} \{ α_3, ω_3 \} \| = \Div(19μ_2 + 252, 235) = \Div(19×57904 + 252, 235) \\ \| = \Div(1100428, 235) = \{ 4682, 158 \} \\ μ_3 \| = \dfloorratio{ω_3}{19} = \dfloorratio{158}{19} = 158\19 = 8 \end{align*}

    Dan rekenen we \( d_2(α_3, μ_3) = d_2(4682, 8) \) uit zoals beschreven in Hoofdstuk 13.6.1. We vinden \( d_2(4682, 8) = 1709764 \). Daarmee

    \[ δ_{14} = s − d_2(α_3, μ_3) = 1709775 − 1709764 = 11 \]

    Die \( δ_{14} \) is niet negatief en niet groter dan 28, dus we hebben de gezochte rekendatum al gevonden: \( \{ a_1, m_0, d_0 \} \) is gelijk aan \( \{ α_3, μ_3, δ_{14} \} = \{ 4682, 8, 11 \}\).

    Voor alle voorbeeld-CJDNs vinden we

    \({J}\) \({s}\) \({μ_2}\) \({α_3}\) \({μ_3}\) \({d_2}\) \({δ_{14}}\) \({μ_7}\) \({a_1}\) \({m_0}\) \({d_2}\) \({d_0}\)
    2000087 1652089 55951 4524 9 1652090 −1 55950 4524 8 1652060 29
    2001327 1653329 55992 4528 1 1653300 29 55993 4528 2 1653329 0
    2057773 1709775 57904 4682 8 1709764 11 4682 8 11
    2057986 1709988 57911 4683 2 1709971 17 4683 2 17
    119311997 118963999 4028506 325710 0 118964000 −1 4028505 325709 12 118963971 28

    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.

    1. Het eerste kandidaat-lopende-maandnummer \( μ_3 \) is

      \begin{equation} μ_3 = μ_2 + 1 \end{equation}

      Bereken daaruit het voorlopige kalenderjaarnummer \( α_3 \) en het voorlopige rekenmaandnummer \( μ_4 \):

      \begin{align} \{α_3, ω_3\} \| = \Div(19μ_3 + 252, 235) \\ μ_4 \| = \dfloorratio{ω_3}{19} \end{align}

      Bereken dan het lopende dagnummer \( d_2(α_3, μ_4) \) voor de eerste dag van die kalenderjaar en rekenmaand, zoals beschreven in hoofdstuk 13.6.1, en dan het voorlopige rekendagnummer \( δ_{14} \) sinds de eerste dag van die maand:

      \begin{equation} δ_{14} = s − d_2(α_3, μ_4) \end{equation}

    2. Het tweede kandidaat-lopende-maandnummer \( μ_5 \) is

      \begin{equation} μ_5 = μ_3 + \dfloorratio{δ_{14}}{64} \end{equation}

      (De deler 64 in bovenstaande deling moet groter zijn dan 32 omdat \( δ_{14} \) alle waarden tussen −32 en 0 kan hebben en we willen dat \( μ_5 = μ_3 − 1 \) als \( δ_{14} \lt 0 \). We kiezen 64 omdat dat de eerste macht van 2 groter dan 32 is, en misschien daarmee de deling ietsje sneller wordt.)

      Bereken daaruit het voorlopige kalenderjaarnummer \( α_4 \), het voorlopige rekenmaandnummer \( μ_6 \), en het voorlopige rekendagnummer \( δ_{15} \):

      \begin{align} \{α_4, ω_4\} \| = \Div(19μ_5 + 252, 235) \\ μ_6 \| = \dfloorratio{ω_4}{19} \\ δ_{15} \| = s − d_2(α_4, μ_6) \end{align}

    3. Het uiteindelijke lopende maandnummer \( μ_7 \) is

      \begin{equation} μ_7 = μ_5 + \dfloorratio{δ_{15}}{64} \end{equation}

      Bereken daaruit het kalenderjaarnummer \( a_1 \), het rekenmaandnummer \( m_0 \), en het rekendagnummer \( d_0 \):

      \begin{align} \{a_1, ω_5\} \| = \Div(19μ_7 + 252, 235) \\ m_0 \| = \dfloorratio{ω_5}{19} \\ d_0 \| = s − d_2(a_1, m_0) \end{align}

    Voor \( J = 2057773 \) vonden we eerder \( μ_2 = 57904 \). Dan is

    \begin{align*} μ_3 \| = μ_2 + 1 = 57904 + 1 = 57905 \\ \{ α_3, ω_3 \} \| = \Div(19×57905 + 252, 235) = \Div(1100447, 235) \\ \| = \{ 4682, 177 \} \\ μ_4 \| = \dfloorratio{ω_3}{19} = \dfloorratio{177}{19} = 9 \end{align*}

    Dan kunnen we \( d_2(α_3, μ_4) = d_2(4682, 9) \) uitrekenen zoals beschreven in Hoofdstuk 13.6.1, en vinden \( d_2(4682, 9) = 1709794 \). Daarmee is \( δ_{14} = s − d_2(4682, 9) = 1709775 − 1709794 = −19 \). Dan

    \[ μ_5 = μ_3 + \dfloorratio{δ_{14}}{64} = 57905 + \dfloorratio{−19}{64} = 57904 \]

    Daarmee kunnen we \( α_4, μ_6, d_2(α_4, μ_6), δ_{15} \) uitrekenen zoals \( α_3, μ_4, d_2(α_3, μ_4), δ_{14} \) hierboven. We vinden \( α_4 = 4682, μ_6 = 8, δ_{15} = 11 \). Dan

    \[ μ_7 = μ_5 + \dfloorratio{δ_{15}}{64} = 57904 + \dfloorratio{11}{64} = 57904 \]

    dus \( μ_7 = μ_5 \) en daarmee veranderen de getallen niet meer en vinden we uiteindelijk \( a_1 = 4682, m_0 = 8, d_0 = 11 \).

    Voor alle voorbeeld-CJDNs vinden we

    \({J}\) \({s}\) \({μ_2}\) \({μ_3}\) \({α_3}\) \({μ_4}\) \({d_2}\) \({δ_{14}}\) \({μ_5}\) \({α_4}\) \({μ_6}\) \({d_2}\) \({δ_{15}}\) \({μ_7}\) \({a_1}\) \({m_0}\) \({d_2}\) \({d_0}\)
    2000087 1652089 55951 55952 4524 10 1652119 −30 55951 4524 9 1652090 −1 55950 4524 8 1652060 29
    2001327 1653329 55992 55993 4528 2 1653329 0 55993 4528 2 1653329 0 55993 4528 2 1653329 0
    2057773 1709775 57904 57905 4682 9 1709794 −19 57904 4682 8 1709764 11 57904 4682 8 1709764 11
    2057986 1709988 57911 57912 4683 3 1710001 −13 57911 4683 2 1709971 17 57911 4683 2 1709971 17
    119311997 118963999 4028506 4028507 325710 1 118964030 −31 4028506 325710 0 118964000 −1 4028505 325709 12 118963971 28

  3. Berekening 1 levert het kalenderjaar \( j \) uit het rekenjaar \( a_1 \) en rekenmaand \( m_0 \). Rekenmaanden 0 t/m 5 van rekenjaar \( a_1 \) horen bij kalenderjaar \( j = a_1 − 1 \), en rekenmaanden 6 t/m 12 horen bij kalenderjaar \( j = a_1 \). Dat krijgen we voor elkaar met

    \begin{equation} j = a_1 + \dfloorratio{m_0 − 6}{7} \end{equation}

    \({m_0}\) \({∆j}\)
    0 −1
    1 −1
    2 −1
    3 −1
    4 −1
    5 −1
    6 0
    7 0
    8 0
    9 0
    10 0
    11 0
    12 0

    Voor \( J = 2057773 \) hadden we \( a_1 = 4682 \) en \( m_0 = 8 \) dus

    \[ j = a_1 + \dfloorratio{m_0 − 6}{7} = 4682 + \dfloorratio{8 − 6}{7} = 4682 + \dfloorratio{2}{7} = 4682 \]

    Voor alle voorbeeld-CJDNs vinden we

    \({J}\) \({a_1}\) \({m_0}\) \({d_0}\) \({j}\)
    2000087 4524 8 29 4524
    2001327 4528 2 0 4527
    2057773 4682 8 11 4682
    2057986 4683 2 17 4682
    119311997 325709 12 28 325709

  4. En dan tellen we 1 bij de rekenmaand en rekendag op om de kalendermaand en kalenderdag te vinden.

    \begin{align} m \| = m_0 + 1 \\ d \| = d_0 + 1 \end{align}

    Voor \( J = 2057773 \) hadden we \( m_0 = 8 \) en \( d_0 = 11 \) dus

    \begin{align*} m \| = m_0 + 1 = 8 + 1 = 9 \\ d \| = d_0 + 1 = 11 + 1 = 12 \end{align*}

    dus \( J = 2057773 \) komt overeen met dag 12 van maand 9 van jaar 4682.

    Voor alle voorbeeld-CJDNs vinden we

    \({J}\) \({a_1}\) \({m_0}\) \({d_0}\) \({j}\) \({m}\) \({d}\)
    2000087 4524 8 29 4524 9 30
    2001327 4528 2 0 4527 3 1
    2057773 4682 8 11 4682 9 12
    2057986 4683 2 17 4682 3 18
    119311997 325709 12 28 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 altijd kort is dan zou het totale aantal lange maanden gelijk zijn aan een veelvoud van 19, en als de 13e maand altijd 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, dus kan de lengte van één of meer maanden niet in elk jaar hetzelfde zijn.

We willen het kleinste aantal verschillende maandlengtes gebruiken, dus alleen maanden van 29 of 30 dagen.

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.

Er moeten 125 lange maanden (van 30 dagen) zijn en 110 korte maanden (van 29 dagen) in elke periode van 19 jaar = 235 maanden. Als \( n \) van de eerste 11 maanden van elk jaar lang zijn dan levert dat \( 19n \) lange maanden op in de periode van 19 jaar, en dan moeten \( 125 − 19n \) van de 26 12e en 13e maanden lang zijn, dus \( 125 − 19n \) moet tussen 0 en 26 (inclusief) zijn, en dat betekent dat \( n = 6 \) moet zijn, want \( n = 5 \) levert 30 (te groot) en \( n = 7 \) levert −8 (te klein).

\( n = 6 \) levert 11 lange 12e en 13e maanden op. Die 11 lange maanden kunnen niet allemaal 13e maand zijn want er zijn maar 7 13e maanden, dus moeten sommige 12e maanden lang zijn.

Een lange maand mag kort worden als die aan het eind van het jaar zit, maar niet als er nog een maand volgt in hetzelfde jaar, dus als sommige 12e maanden lang zijn dan mogen er alleen korte 12e maanden zijn als die de laatste maand van het jaar zijn, dus als het jaar 12 maanden heeft. Dus we kunnen de volgende soorten jaren hebben:

maand 12 maand 13 jaarlengte
kort geen 354
lang geen 355
lang kort 384
lang lang 385

Er moeten 7 lange jaren (van 13 maanden) en 12 korte jaren (van 12 maanden) zijn in elke 19 jaar. Als die lange en korte jaren alletwee zo kort mogelijk zijn (dus 354 en 384 dagen) dan levert dat 7×384 + 12×354 = 6936 dagen op, dus dan moeten er nog 4 dagen bij. Dat betekent dat 4 jaren één dag langer moeten worden, dus 355 of 385 dagen. Dat betekent dat er tenminste drie verschillende jaarlengtes nodig zijn, en dat kan niet met een kalenderniveau van type 2 of 3, dus hebben we een kalenderniveau van type 4 nodig.

We koppelen de lunisolaire kalender aan de de moderne (Gregoriaanse) kalender aan de hand van de volgende overwegingen:

  1. Het kalenderjaar in de lunisolaire kalender moet ongeveer hetzelfde zijn als het kalenderjaar in de moderne (Gregoriaanse) kalender.

  2. Aangezien het hier om een lunisolaire kalender gaat is het de bedoeling dat elke maand begint bij nieuwe maan, dus we willen de kalenders koppelen in een jaar waarop er een nieuwe maan is/was aan het begin van dat jaar in de moderne kalender.

  3. De Cyclus van Meton omvat 19 jaar, en we kunnen kiezen welk van die 19 jaren we gebruiken om de maankalender te koppelen aan de moderne kalender. Daarmee hebben we ongeveer een maand speling in waar het begin van het maanjaar gemiddeld ligt ten opzichte van het begin van het jaar in de moderne kalender. We kiezen de koppeling zodat het begin van het maanjaar gemiddeld zo dicht mogelijk ligt bij het begin van de winter op het noordelijk halfrond (21 december).

  4. De Cyclus van Meton volgt de maanstanden niet precies, dus in de loop van de tijd zal onze lunisolaire kalender onvermijdelijk steeds meer uit de pas gaan lopen met de maanstanden, dus het jaar waarin we de koppeling maken moet niet ver van nu zijn.

Ik heb gezocht naar het moderne kalenderjaar tussen 1900 en 2100 waarin de maanstand van de middelbare Maan aan het begin van het jaar (0 uur UTC aan het begin van 1 januari) zo dicht mogelijk bij nieuwe maan was, en dat blijkt het jaar 2033 te zijn. Dus we stellen 1 januari 2033 gelijk aan de eerste dag van de eerste maand van het jaar 2033 in de lunisolaire kalender.

13.7.1. Van maankalender naar CJDN

De berekeningen zijn schematisch:

  j ────────────────────┐
  m ─(−1)─ m₀ ──┐       │
  d ─(−1)─ d₀ ─(1)─ d₁─(2)─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 384 13 29 7 7 29.538462
2.1 6940 19 354 30 7 2 19 1 365.26316
2.2 1 4 18 19 1

  1. Eerst trekken we 1 af van het maandnummer \( m \) en het dagnummer \( d \) zodat ze beginnen met 0 in plaats van 1.

    \begin{align*} m_0 \| = m − 1 \\ d_0 \| = d − 1 \end{align*}

    Als voorbeeld rekenen we de CJDN uit van de eerste dag van jaar 2033 in de maankalender, dus \( \{ j, m, d \} = \{ 2033, 1, 1 \}\). We vinden

    \begin{align*} m_0 \| = m − 1 = 1 − 1 = 0 \\ d_0 \| = d − 1 = 1 − 1 = 0 \end{align*}

  2. Berekening 1 levert dagnummer \( d_1 \) sinds de eerste dag van het jaar uit het rekenmaandnummer \( m_0 \) en het rekendagnummer \( d_0 \):

    \begin{align} δ_1 \| = \dfloorratio{384m_0 + 7}{13} \\ d_1 \| = δ_1 + d_0 \end{align}

    Dit levert op dat maand 12 lang is (met 30 dagen) en maand 13 kort (met 29 dagen) en dat 6 van de eerste 11 maanden altijd lange maanden zijn.

    Bijvoorbeeld, als \( m_0 = 4 \), dan vinden we

    \[ δ_1 = \dfloorratio{384×4 + 7}{13} = \dfloorratio{1543}{13} = 118 \]

    dus de eerste dag van de vijfde maand (\( m_0 = 4 \)) is de 118e dag sinds de eerste dag van het jaar.

    Voor de eerste dag van de eerste 14 maanden vinden we de volgende resultaten (met \( L \) de lengte van de maand):

    \({m}\) \({m_0}\) \({δ_1}\) \({L}\)
    1 0 0 30
    2 1 30 29
    3 2 59 30
    4 3 89 29
    5 4 118 30
    6 5 148 29
    7 6 177 30
    8 7 207 29
    9 8 236 30
    10 9 266 29
    11 10 295 30
    12 11 325 30
    13 12 355 29
    14 13 384

  3. Berekening 2 geeft het lopende dagnummer \( s \) uit het jaar \( j \) en het dagnummer \( d_1 \) sinds de eerste dag van het jaar.

    \begin{align} δ_2 \| = 354j + 30\dfloorratio{7j + 2}{19} + \dfloorratio{4j + 18}{19} \\ s \| = d_1 + δ_2 \end{align}

    De volgende tabel toont de lopende dagnummers voor 20 jaren, en de lengte \( L \) voor de eerste 19 daarvan. Dat patroon van jaarlengtes herhaalt zich elke 19 jaar. Er zijn 8 jaren van 354 dagen lang, 4 jaren van 355 dagen lang, en 7 jaren van 384 dagen lang, samen 6940 dagen in 19 jaar.

    \({j}\) \({δ_2}\) \({L}\)
    0 0 355
    1 355 354
    2 709 384
    3 1093 354
    4 1447 355
    5 1802 384
    6 2186 354
    7 2540 384
    8 2924 354
    9 3278 355
    10 3633 384
    11 4017 354
    12 4371 354
    13 4725 384
    14 5109 355
    15 5464 384
    16 5848 354
    17 6202 354
    18 6556 384
    19 6940

    In ons voorbeeld is \( j = 2033, d_1 = 0 \) dus

    \begin{align*} δ_2 \| = 354j + 30\dfloorratio{7j + 2}{19} + \dfloorratio{4j + 18}{19} \\ \| = 354×2033 + 30\dfloorratio{7×2033 + 2}{19} + \dfloorratio{4×2033 + 18}{19} \\ \| = 719682 + 30\dfloorratio{14233}{19} + \dfloorratio{8150}{19} \\ \| = 719682 + 30×749 + 428 = 742580 \\ s \| = d_1 + δ_2 = 742580 \end{align*}

  4. En dan tellen we er nog de CJDN \( J_0 \) van dag 1 van maand 1 van jaar 0 bij op. We koppelen de twee kalenders op de eerste dag van jaar 2033. In de moderne kalender komt die dag overeen met CJDN 2463599. In de maankalender vonden we hierboven dat voor de eerste dag van jaar 2033 geldt \( s = 742580 \). Daaruit volgt dat \( J_0 = 2463599 − 742580 = 1721019 \).

    \begin{equation} J = s + J_0 = s + 1721019 \end{equation}

    Voor ons voorbeeld geldt

    \[ J = s + J_0 = 742580 + 1721019 = 2463599 \]

    dus de CJDN die hoort bij de eerste dag van jaar 2033 in deze maankalender is 2463599, en dat komt overeen met de eerste dag van jaar 2033 in de moderne (Gregoriaanse) kalender.

Voorgaande berekeningen dikken in tot

\begin{equation} J = 354j + 30\dfloorratio{7j + 2}{19} + \dfloorratio{4j + 18}{19} + \dfloorratio{384m − 377}{13} + d + 1721018 \end{equation}

Voor ons voorbeeld (met \( j = 2033, m = 1, d = 1 \)) vinden we

\begin{align*} J \| = 354×2033 + 30\dfloorratio{7×2033 + 2}{19} + \dfloorratio{4×2033 + 18}{19} \\ \| + \dfloorratio{384×1 − 377}{13} + 1 + 1721018 \\ \| = 719682 + 30\dfloorratio{14233}{19} + \dfloorratio{8150}{19} + \dfloorratio{7}{13} + 1721019 \\ \| = 2440701 + 30×749 + 428 + 0 = 2463599 \end{align*}

dus dag 1 van maand 1 van jaar 2033 in de maankalender komt overeen met CJDN 2463599, die overeenkomt met 1 januari 2033 in de moderne (Gregoriaanse) kalender.

13.7.2. Van CJDN naar maankalender

De berekeningen zijn schematisch:

  j ────────────────────┐
  m ─(−1)─ m₀ ──┐       │
  d ─(−1)─ d₀ ─(1)─ d₁─(2)─ s ─(+J₀)─ J

De samenvatting van de kalenderniveau's is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 384 13 29 7 7 29.538462
2.2 6940 19 354 30 7 2 19 1 365.26316
2.3 1 4 18 19 1

De berekeningen zijn als volgt:

  1. Eerst trekken we de CJDN \( J_0 \) van dag 1 van maand 1 van jaar 0 af van de CJDN van de gewenste datum om het lopende dagnummer \( s \) te vinden:

    \begin{equation} s = J − J_0 = J − 1721019 \end{equation}

    Als voorbeeld rekenen we de datum uit die overeenkomt met CJDN 2459695. Dan

    \[ s = J − J_0 = 2459695 − 1721019 = 738676 \]

  2. Berekening 2 haalt uit het lopende dagnummer \( s \) het jaarnummer \( j \) en het rekendagnummer \( d_1 \) sinds de eerste dag van het jaar:

    \begin{align} ω_1 \| = gs + g\dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_i γ_ir_it_i} − 1 \notag \\ \| = 19s + 19×31 − (1×30×2 + 1×1×18) = 19 s + 511 \\ α_1 \| = \dfloorratio{ω_1}{6940} \\ δ_1 \| = s − qα_1 − \dparen{\sum_i r_i \dfloorratio{h_iα_1 + t_i}{g_i}} \notag \\ \| = s − 354α_1 − 30 \dfloorratio{7α_1 + 2}{19} − \dfloorratio{4α_1 + 18}{19} \\ j \| = α_1 + \dfloorratio{δ_2}{q + \sum_{r_i \gt 0} r_1} = α_1 + \dfloorratio{δ_1}{385} \notag \\ d_1 \| = s − 354j − 30 \dfloorratio{7j + 2}{19} − \dfloorratio{4j + 18}{19} \end{align}

    Voor ons voorbeeld vinden we

    \begin{align*} \\ ω_1 \| = 19s + 511 = 19×738676 + 511 = 14035355 \\ α_1 \| = \dfloorratio{ω_1}{6940} = \dfloorratio{14035355}{6940} = 2022 \\ δ_1 \| = s − 354α_1 − 30 \dfloorratio{7α_1 + 2}{19} − \dfloorratio{4α_1 + 18}{19} \\ \| = 738676 − 354×2022 − 30 \dfloorratio{7×2022 + 2}{19} − \dfloorratio{4×2022 + 18}{19} \\ \| = 738676 − 715788 − 30 \dfloorratio{14156}{19} − \dfloorratio{8106}{19} \\ \| = 22888 − 30×745 − 426 = 112 \\ j \| = α_1 + \dfloorratio{δ_1}{385} = 2022 + \dfloorratio{112}{385} = 2022 \\ d_1 \| = s − 354j − 30 \dfloorratio{7j + 2}{19} − \dfloorratio{4j + 18}{19} = 112 \end{align*}

  3. Berekening 1 berekent uit het rekendagnummer \( d_1 \) sinds de eerste dag van het jaar het rekenmaandnummer \( m_0 \) en het rekendagnummer \( d_0 \) sinds de eerste dag van de maand.

    \begin{align} \{ m_0, ω_2 \} \| = \Div(gd_1 + g − t − 1, f) = \Div(13d_1 + 13 − 7 − 1, 384) \notag \\ \| = \Div(13d_1 + 5, 384) \\ d_0 \| = \dfloorratio{ω_2}{g} = \dfloorratio{ω_2}{13} \end{align}

    Voor ons voorbeeld vinden we

    \begin{align*} \{ m_0, ω_2 \} \| = \Div(13d_1 + 5, 384) = \Div(13×112 + 5, 384) \\ \| = \Div(1461, 384) = \{ 3, 309 \} \\ d_0 \| = \dfloorratio{ω_2}{13} = \dfloorratio{309}{13} = 23 \end{align*}

  4. En dan tellen we 1 op bij de rekemaand \( m_0 \) en rekendag \( d_0 \) om de kalendermaand \( m \) en kalenderdag \( d \) te vinden.

    \begin{align} m \| = m_0 + 1 \\ d \| = d_0 + 1 \end{align}

    Voor ons voorbeeld vinden we

    \begin{align} m \| = m_0 + 1 = 3 + 1 = 4 \\ d \| = d_0 + 1 = 23 + 1 = 24 \end{align}

    dus de gezochte datum is dag 24 van maand 4 van jaar 2022.

Bovenstaande formules dikken een klein beetje in, tot

\begin{align} s \| = J − 1721019 \\ α_1 \| = \dfloorratio{19s + 511}{6940} \\ δ_1 \| = s − 354α_1 − 30 \dfloorratio{7α_1 + 2}{19} − \dfloorratio{4α_1 + 18}{19} \\ j \| = α_1 + \dfloorratio{δ_1}{385} \notag \\ d_1 \| = s − 354j − 30 \dfloorratio{7j + 2}{19} − \dfloorratio{4j + 18}{19} \\ \{ m, ω_2 \} \| = \Div(13d_1 + 389, 384) \\ d \| = \dfloorratio{ω_2}{13} + 1 \end{align}

Voor ons voorbeeld vinden we

\begin{align*} s \| = J − 1721019 = 2459695 − 1721019 = 738676 \\ α_1 \| = \dfloorratio{19s + 511}{6940} = \dfloorratio{19×738676 + 511}{6940} = \dfloorratio{14035355}{6940} = 2022 \\ δ_1 \| = s − 354α_1 − 30 \dfloorratio{7α_1 + 2}{19} − \dfloorratio{4α_1 + 18}{19} \\ \| = 738676 − 354×2022 − 30 \dfloorratio{7×2022 + 2}{19} − \dfloorratio{4×2022 + 18}{19} \\ \| = 738676 − 715788 − 30 \dfloorratio{14156}{19} − \dfloorratio{8106}{19} \\ \| = 22888 − 30×745 − 426 = 112 \\ j \| = α_1 + \dfloorratio{δ_1}{385} = 2022 + \dfloorratio{112}{385} = 2022 \\ d_1 \| = s − 354j − 30 \dfloorratio{7j + 2}{19} − \dfloorratio{4j + 18}{19} = 112 \\ \{ m, ω_2 \} \| = \Div(13d_1 + 389, 384) = \Div(13×112 + 389, 384) = \Div(1845, 384) = \{ 4, 309 \} \\ d \| = \dfloorratio{ω_2}{13} + 1 = \dfloorratio{309}{13} + 1 = 23 + 1 = 24 \end{align*}

dus de gezochte datum is dag 24 van maand 4 van jaar 2022, net als hierboven.

Hier zijn voor enkele jaren de data (jaar-maand-dag) in de moderne (Gregoriaanse) kalender die overeenkomen met nieuwjaar in de maankalender.

\({j}\) D
2019 2018-12-08 8
2020 2019-12-27 27
2021 2020-12-15 15
2022 2022-01-03 34
2023 2022-12-23 23
2024 2023-12-13 13
2025 2024-12-31 31
2026 2025-12-20 20
2027 2026-12-09 9
2028 2027-12-28 28
2029 2028-12-17 17
2030 2030-01-05 5
2031 2030-12-25 25
2032 2031-12-14 14
2033 2033-01-01 32
2034 2033-12-22 22
2035 2034-12-11 11
2036 2035-12-30 30
2037 2036-12-18 18
2038 2037-12-08 8

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 1 meldt die manieren en hun schrikkeljaarverdeling en geeft de bijbehorende \( r \) (zoals in formule \eqref{eq:r}).

Tabel 1: 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 = \dfloorratio{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 1 948 438.75), en de burgerlijke telling "c" volgens welke de kalender begon bij zonsondergang van donderdag 15 juli 622 (ongeveer CJD 1 948 439.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 2 455 774 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 2 455 774 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 2 455 774 maar in de Islamitische kalender al de volgende dag (dus 1 Ramaḍān).

Type \({r}\) \({J_0}\)
Ia 15 1 948 439
Ic 15 1 948 440
IIa 14 1 948 439
IIc 14 1 948 440
IIIa 11 1 948 439
IIIc 11 1 948 440
IVa 9 1 948 439
IVc 9 1 948 440

\begin{align} x_2 \| = j − 1 \\ x_1 \| = m − 1 \\ z_1 \| = d − 1 \\ c_1 \| = \dfloorratio{325x_1 + 5}{11} \\ y_1 \| = c_1 + z_1 \\ z_2 \| = y_1 \\ c_2 \| = \dfloorratio{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 \| = 1\ 948 \440 \\ x_2 \| = 1432 − 1 = 1431 \\ x_1 \| = 8 − 1 = 7 \\ z_1 \| = 29 − 1 = 28 \\ c_1 \| = \dfloorratio{325×7 + 5}{11} = \dfloorratio{2280}{11} = 207 \\ y_1 \| = 207 + 28 = 235 \\ z_2 \| = 235 \\ c_2 \| = \dfloorratio{10631×1431 + 14}{30} = \dfloorratio{15\ 212\ 975}{30} = 507\ 099 \\ y_2 \| = 507\ 099 + 235 = 507\ 334 \\ J \| = 507\ 334 + 1\ 948\ 440 = 2\ 455\ 774 \end{align*}

Dit kan worden ingedikt tot

\begin{equation} J = \dfloorratio{10631j − 10631 + r}{30} + \dfloorratio{325m − 320}{11} + d − 1 + J_0 \end{equation}

ofwel

Ia \({J = \dfloorratio{10631j − 10616}{30} + \dfloorratio{325m − 320}{11} + d + 1\ 948\ 438}\)
Ic \({J = \dfloorratio{10631j − 10616}{30} + \dfloorratio{325m − 320}{11} + d + 1\ 948\ 439}\)
IIa \({J = \dfloorratio{10631j − 10617}{30} + \dfloorratio{325m − 320}{11} + d + 1\ 948\ 438}\)
IIc \({J = \dfloorratio{10631j − 10617}{30} + \dfloorratio{325m − 320}{11} + d + 1\ 948\ 439}\)
IIIa \({J = \dfloorratio{10631j − 10620}{30} + \dfloorratio{325m − 320}{11} + d + 1\ 948\ 438}\)
IIIc \({J = \dfloorratio{10631j − 10620}{30} + \dfloorratio{325m − 320}{11} + d + 1\ 948\ 439}\)
IVa \({J = \dfloorratio{10631j − 10622}{30} + \dfloorratio{325m − 320}{11} + d + 1\ 948\ 438}\)
IVc \({J = \dfloorratio{10631j − 10622}{30} + \dfloorratio{325m − 320}{11} + d + 1\ 948\ 439}\)

Voor dezelfde Islamitische datum als hiervoor vinden we dan

\begin{align*} J \| = \dfloorratio{10631×1432 − 10617}{30} + \dfloorratio{325×8 − 320}{11} + 29 + 1\ 948\ 439 \\ \| = \dfloorratio{15\ 212\ 975}{30} + \dfloorratio{2280}{11} + 29 + 1\ 948\ 439 \\ \| = 507\ 099 + 207 + 29 + 1\ 948\ 439 = 2\ 455\ 774 \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 \| = \dfloorratio{r_2}{30} \\ y_1 \| = z_2 \\ \{x_1, r_1\} \| = \Div(11y_1 + 5, 325) \\ z_1 \| = \dfloorratio{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 2 455 774? Dan is \( J = 2 455 774 \), \( r = 14 \), \( J_0 = 1 948 440 \), en dan

\begin{align*} y_2 \| = 2\ 455\ 774 − 1\ 948\ 440 = 507\ 334 \\ \{x_2, r_2\} \| = \Div(30×507\ 334 + 15, 10631) = \Div(15\ 220\ 035, 10631) = \{1431, 7074\} \\ z_2 \| = \dfloorratio{7074}{30} = 235 \\ y_1 \| = 235 \\ \{x_1, r_1\} \| = \Div(11×235 + 5, 325) = \Div(2590, 325) = \{7, 315\} \\ z_1 \| = \dfloorratio{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\dfloorratio{r_2}{30} + 5, 325 \right) \\ j \| = x_2 + 1 \\ m \| = x_1 + 1 \\ d \| = \dfloorratio{r_1}{11} + 1 \end{align}

Bijvoorbeeld, welke Islamitische datum (in kalendertype IIc) komt overeen me CJDN 2 455 774? Dan is \( J = 2\ 455\ 774 \), \( r = 14 \), \( J_0 = 1\ 948\ 440 \), en dan

\begin{align*} \{x_2, r_2\} \| = \Div(30×(2\ 455\ 774 − 1\ 948\ 440) + 29 − 14, 10631) \\ \| = \Div(15\ 220\ 035, 10631) = \{1431, 7074\} \\ \{x_1, r_1\} \| = \Div\left( 11×\dfloorratio{7074}{30} + 5, 325 \right) \\ \| = \Div(11×235 + 5, 325) = \Div(2590, 325) = \{7, 315\} \\ j \| = 1431 + 1 = 1432 \\ m \| = 7 + 1 = 8 \\ d \| = \dfloorratio{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⌉_{365} \\ h_m \| = \dfloorratio{H}{20} + 1 \\ h_d \| = ⌊H⌉_{20} \end{align}

Een voorbeeld: Welke Haab-datum komt overeen met 15 december 1965 = CJDN 2 439 110? Dan is \( J = 2\ 439\ 110 \) en

\begin{align*} H \| = ⌊J + 65⌉_{365} = ⌊2\ 439\ 175⌉_{365} = 245 \\ h_m \| = \dfloorratio{245}{20} + 1 = 13 \\ h_d \| = ⌊245⌉_{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⌉_{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 (2 439 110), want \( 2\ 439\ 110 = 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 = 2\ 439\ 126 \) (die overeenkomt met 31 december 1965), met behulp van formule \eqref{eq:laatste}. We vinden

\begin{align*} J \| = J_0 − ⌊J_0 − 180⌉_{365} \\ \| = 2\ 439\ 126 − ⌊2\ 438\ 946⌉_{365} \\ \| = 2\ 439\ 126 − 16 = 2\ 439\ 110 \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⌉_{13} + 1 \label{eq:trecena2} \\ t_v \| = ⌊J + 16⌉_{20} + 1 \label{eq:venteina2} \end{align}

Wat is de Tzolkin-datum die overeenkomt met CJDN 2 439 110? Dan is

\begin{align*} t_t \| = ⌊2\ 439\ 110 + 5⌉_{13} + 1 = 3 + 1 = 4 \\ t_v \| = ⌊2\ 439\ 110 + 16⌉_{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 = 2\ 439\ 110 \) want \( 2\ 439\ 110 = 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 2 439 126) is \( J = 2\ 439\ 126 − ⌊2\ 439\ 126 − 50⌉_{260} = 2\ 439\ 126 − 16 = 2\ 439\ 110 \).

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⌉_{260} \end{equation}

Voor CJDN 2 439 110 (met \( \{t_t,t_v\} = \{4,7\} \)) vinden we \( T = ⌊40×4 + 221×7 − 1⌉_{260} = ⌊1706⌉_{260} = 146 \), dus de laatste dag daarvoor die \( \{1,1\} \) had was CJDN \( J = 2\ 439\ 110 − 146 = 2\ 438\ 964 \), en dat klopt, want \( t_t = ⌊J + 5⌉_{13} + 1 = ⌊2\ 438\ 969⌉_{13} + 1 = 1 \) en \( t_v = ⌊J + 16⌉_{20} + 1 = ⌊2438980⌉_{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 = 2\ 439\ 110 \) waar we mee begonnen, want \( 2\ 439\ 110 = 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 = 584\ 283 \) (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 = 2\ 439\ 110 \)? Dan is

\begin{align*} y \| = J − J_0 = 2\ 439\ 110 − 584\ 283 = 1\ 854\ 827 \\ \{l_5, r_5\} \| = \Div(1\ 854\ 827, 144\ 000) = \{12, 126\ 827\} \\ \{l_4, r_4\} \| = \Div(126\ 827, 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))) + 584\ 283 = 2\ 439\ 110 \).

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

\({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 = \dfloorratio{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 447\ 392 \), 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 = \dfloorratio{4800y_2 + 15793}{146\ 097} \end{equation}

Dan is \( g = 4800 \), \( t = 15793 \), \( f = 146\ 097 \). 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\dfloorratio{y_2}{146\ 097} + \dfloorratio{4800⌊y_2⌉_{146\ 097} + 15793}{146\ 097} \]

We vinden

\begin{align*} \dfloorratio{y_2}{146\ 097} \| = \dfloorratio{730\ 000}{146\ 097} = 4 \\ ⌊y_2⌉_{146097} \| = y_2 − 146\ 097\dfloorratio{y_2}{146\ 097} = 145\ 612 \\ x_2 \| = 4800×4 + \dfloorratio{4800×145\ 612 + 15793}{146\ 097} \\ \| = 19200 + \dfloorratio{698\ 953\ 393}{146\ 097} = 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×146\ 097 + 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 3 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 1 469 872 6313 × 1012 3 1 461 4 386 2
CJDN → Juliaans (2) 48 682 44 × 106 192 × 1015 1 122 489 526 × 1012 109 1 461 68 776 3
CJDNGregoriaans (1) 4 8192 536 × 106 2305 × 1015 22 1 469 872 6313 × 1012 3 146 097 438 294 2
CJDNGregoriaans (2) 400 81 5 × 106 23 × 1015 0 14 698 63 × 1012 799 146 097 58 293 502 4
CJDNGregoriaans (3) 4800 6 447392 1.9 × 1015 0 1 224 5 × 1012 15793 146 097 701 135 296 4
CJDN → Babylonisch (1) 235 139 9 × 106 39 × 1015 0 25 019 10 × 1012 234 6 940 1 624 194 3
CJDN → Babylonisch (2) 19 1724 113 × 106 485 × 1015 4 309 446 1329 × 1012 546 6 940 125 466 3
CJDN → Islamitisch 30 1092 71 × 106 307 × 1015 3 195 983 841 × 1012 15 10 631 308 314 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: 2024-05-29