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 ... 2.3. Delen ... 3. Geldigheid ... 4. De Gregoriaanse kalender ... 4.1. Van Gregoriaanse datum naar CJDN ... 4.2. Van CJDN naar Gregoriaanse datum ... 5. De Milanković-kalender ... 5.1. Van Milanković-datum naar CJDN ... 5.2. Van CJDN naar Milanković-datum ... 6. De Herschel-kalender ... 6.1. Van Herschel-datum naar CJDN ... 6.2. Van CJDN naar Herschel-datum ... 7. De Juliaanse kalender ... 7.1. Van Juliaanse datum naar CJDN ... 7.2. Van CJDN naar Juliaanse datum ... 8. De Islamitische kalender ... 8.1. Van Islamitische datum naar CJDN ... 8.2. Van CJDN naar Islamitische datum ... 9. De Babylonische kalender ... 9.1. Van Babylonische datum naar CJDN ... 9.2. Van CJDN naar Babylonische datum ... 10. De Joodse kalender ... 10.1. Van Joodse datum naar CJDN ... 10.2. Van CJDN naar Joodse datum ... 11. De Egyptische Kalender ... 11.1. Van Egyptische datum naar CJDN ... 11.2. Van CJDN naar Egyptische datum ... 12. De Mayakalender ... 12.1. Van Mayakalender naar CJDN ... 12.1.1. Van de Haab naar CJDN ... 12.1.2. Van de Tzolkin naar CJDN ... 12.1.3. Van Tzolkin en Haab naar CJDN ... 12.1.4. Van de Lange Telling naar CJDN ... 12.2. Van CJDN naar Mayakalender ... 12.2.1. Van CJDN nar de Haab ... 12.2.2. Van CJDN naar de Tzolkin ... 12.2.3. Van CJDN naar de Lange Telling ... 13. Een zongebonden maankalender met veel vaste maandlengtes ... 13.1. Van maankalender naar CJDN ... 13.2. Van CJDN naar maankalender ... 14. De Chinese Kalender ... 14.1. Het jaar van de aap ... 14.2. HYSN ... 15. Afleiding van de algemene algoritmen ... 15.1. Notatie ... 15.2. Grote Tussenresultaten ... 15.2.1. Inleiding ... 15.2.2. Samenvatting ... 15.2.3. Ware limieten ... 15.2.4. Afleiding van de formules ... 15.3. Simpele kalender ... 15.3.1. Van maand en dagnummer in de maand naar lopende dagnummer ... 15.3.2. Maandlengte ... 15.3.3. Maandpatroon verschuiven ... 15.3.4. Van lopende dagnummer naar maand en dagnummer in de maand ... 15.4. Met alleen hele getallen ... 15.5. Erg ongelijke maanden ... 15.6. Veel soorten ongelijke maanden ... 15.7. Heel erg ongelijke maanden ... 15.8. Maandlengtes zonder intern patroon ... 15.9. Combinaties van rechte lijnen ... 15.9.1. Vlakke combinatie ... 15.9.2. Getrapte combinatie ... 15.10. Gelijktijdige cycli ... 15.10.1. Van doorlopend dagnummer naar datum ... 15.10.2. Van datum naar doorlopend dagnummer ... 15.10.3. Meer dan twee cycli ... 15.10.4. Naar één oplossing ... 15.10.4.1. De laatste op of voor ... 15.10.4.2. De eerste op of na ... 15.10.4.3. de laatste voor ... 15.10.4.4. De eerste na ... 15.11. Samenvatting ... 16. Afleiding voor specifieke kalenders ... 16.1. De Juliaanse kalender ... 16.1.1. Van Juliaanse datum naar CJDN (1) ... 16.1.2. Van CJDN naar Juliaanse datum (1) ... 16.1.3. Van Juliaanse datum naar CJDN (2) ... 16.1.4. Van CJDN naar Juliaanse datum (2) ... 16.2. De Gregoriaanse kalender ... 16.2.1. Van Gregoriaanse datum naar CJDN (1) ... 16.2.2. Van CJDN naar Gregoriaanse datum (1) ... 16.2.3. Van Gregoriaanse datum naar CJDN (2) ... 16.2.4. Van CJDN naar Gregoriaanse Datum (2) ... 16.2.5. Van Gregoriaanse datum naar CJDN (3) ... 16.2.6. Van CJDN naar Gregoriaanse datum (3) ... 16.3. De Milanković-kalender ... 16.3.1. Van Milanković-datum naar CJDN ... 16.3.2. Van CJDN naar Milanković-datum ... 16.4. De Herschel-kalender ... 16.4.1. Van Herschel-datum naar CJDN ... 16.4.2. Van CJDN naar Herschel-datum ... 16.5. De Egyptische kalender ... 16.5.1. Van Egyptische datum naar CJDN ... 16.5.2. Van CJDN naar Egyptische datum ... 16.6. De Babylonische kalender ... 16.6.1. Van Babylonische datum naar CJDN ... 16.6.2. Van CJDN naar Babylonische Datum ... 16.7. De Joodse kalender ... 16.7.1. Van Joodse Datum naar CJDN ... 16.7.2. Van CJDN naar Joodse datum ... 16.8. Een zongebonden maankalender met veel vaste maandlengtes ... 16.8.1. Van maankalender naar CJDN ... 16.8.2. Van CJDN naar maankalender ... 16.9. De Islamitische kalender ... 16.9.1. Van Islamitische datum naar CJDN ... 16.9.2. Van CJDN naar Islamitische datum ... 16.10. De Mayakalender ... 16.10.1. Tussen CJDN en Mayakalender ... 16.10.2. Between CJDN and Maya Calendar ... 16.10.3. De Haab ... 16.10.3.1. Van CJDN naar Haab ... 16.10.3.2. Van CJDN naar Haab ... 16.10.4. De Tzolkin ... 16.10.4.1. Van CJDN naar Tzolkin ... 16.10.4.2. Van Tzolkin naar CJDN ... 16.10.5. Tzolkin en Haab ... 16.10.6. De Lange Telling ... 16.10.6.1. Van Lange Telling naar CJDN ... 16.10.6.2. Van CJDN naar Lange Telling

\(\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\dround#1{\left[ #1 \right]} \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 15) 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 Gebroken 12:00 UTC = JD
JDN Juliaanse Dagnummer Heel 12:00 UTC = ⌊JD
CJD Chronologische Juliaanse Datum Gebroken 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. "Gebroken" 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 "gebroken" 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).

Voorbeeld Wanneer
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 \( \dfloor{x} \)) of naar boven naar het dichtstbijzijnde hele getal (\( \dceil{x} \)). De standaard-afrondfuncties op rekenmachines ronden meestal af naar het dichtstbijzijnde hele getal (dat noteren wij hier als \( \dround{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) \)). Onderstaande tabel toont deze verschillende soorten afronding voor een aantal getallen.

\({x}\) \({\dfloor{x}}\) \({\dround{x}}\) \({\dceil{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 = \dmod{y}{x} = y − x\dfloorratio{y}{x} \\ y \| = q x + r = \dfloorratio{y}{x} x + \dmod{y}{x} \end{align}

De notaties \( y \bmod x \) en \( \dmod{y}{x} \)betekenen: de niet-negatieve rest die overblijft bij deling van \( y \) door \( x \). Die eerste is een standaardnotatie, maar die tweede heb ik verzonnen.

We vinden

\begin{equation} \frac{y}{x} = \dfloorratio{y}{x} + \dfrac{\dmod{y}{x}}{x} \end{equation}

en als \( x = 1 \) dan

\begin{equation} y = \dfloor{y} + \dmod{y}{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 = \dmod{t_1 + y}{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.

2.3. Delen

De notatie \( \Div(x, y) \) bekent: deel \( x \) door \( y \) en geef het quotiënt \( q \) en de rest \( r \) van de deling terug, waarbij de rest niet-negatief en qua grootte kleiner is dan \( y \), dus \( 0 ≤ r \lt \dabs{y} \):

\begin{align} \{ q, r \} \| = \Div(x, y) \\ x \| = q y + r \\ q \| = \dfloorratio{x}{y} \\ r \| = \dmod{x}{y} \end{align}

3. Geldigheid

Onderstaande kalenderformules zijn wiskundig exact, maar als je ze gebruikt in een computerprogramma dat rekent met getallen die een vaste geheugenruimte innemen (zoals 32-bitsgetallen of 64-bitsgetallen) dan is de tijdperiode waarvoor die formules in zo'n computerprogramma de juiste resultaten geven beperkt. Met 32-bitsgetallen kun je hooguit \( W = 2^{32} = 4294967296 \) verschillende dagnummers onderscheiden, wat overeenkomt met pakweg 11,8 miljoen jaar. Dat is ruim genoeg voor praktisch gebruik, maar er is een probleem waardoor veel kalenders die limiet niet halen.

Veel van de kalenderberekeningen zijn van de vorm

\begin{equation} y = \dfloorratio{f x + t}{g} \end{equation}

met hele getallen \( f \gt 1 \) en \( g \gt 0 \). Daarvoor is het tussenresultaat \( f x + t \) bijna altijd groter dan \( x \) en ook dan het eindresultaat \( y \). Dat tussenresultaat moet in de \( W \) unieke waarden passen, wat betekent dat \( x \) hooguit \( W/f \) unieke waarden kan hebben, wat (veel) kleiner is dan \( W \). Er is hieronder een kalender waarvoor een van de berekeningen \( f = 765433 \) heeft. Dan kan \( x \) als je 32-bitsgetallen gebruikt maar \( 2^{32}/765433 = 5611 \) unieke waarden hebben. Het gaat daar om maanden, en 5611 maanden is ongeveer 450 jaar, dus met 32-bitsgetallen kan die kalender dan maar 450 jaar aan, als je die formule programmeert precies zoals hierboven geschreven. Dat is veel te weinig voor praktisch gebruik.

In zo'n geval kun je twee dingen doen:

  1. Reken met een omweg die meer rekenstappen neemt maar wel wiskundig gelijkwaardig is aan de simpele formule en die (zo mogelijk) het bereik uitbreidt tot de 11,8 miljoen jaar die het hoogst haalbare is voor berekeningen met 32-bitsgetallen.

  2. Reken met 64-bitsgetallen in plaats van 32-bitsgetallen. Ook voor 64-bitsgetallen geldt dat met bovenstaande formule \( x \) maar \( W/f \) unieke waarden kan hebben, maar voor een 64-bitsgetal is \( W \) groter dan voor een 32-bitsgetal met een factor \( 2^{32} \) dus ongeveer 4 miljard. Voor die moeilijke kalender waarvoor je met 32-bitsgetallen maar een periode van 450 jaar aankan kun je met 64-bitsgetallen ongeveer 450×4 miljard dus pakweg 1800 miljard jaar aan, en dat is ruim 100 maal langer dan de huidige leeftijd van het Heelal. In de praktijk is er met 64-bitsgetallen dus geen limiet. En het rekenen met de simpele formules met 64-bitsgetallen kan ook nog minder rekentijd nemen dan het rekenen met een omweg met 32-bitsgetallen.

Hieronder geef ik voor elke kalender een schatting van de periode waarvoor die met 32-bitsgetallen bruikbaar is. (Voor mijn rekenomgeving is die periode exact, maar heel misschien is die voor de jouwe anders.) Als die periode minder dan 7,5 miljoen dagen omvat (ongeveer 20'500 jaar) dan geef ik omwegformules die het bereik zoveel mogelijk vergroten. Hoofdstuk 16 geeft omwegformules voor alle kalenders waarvoor ze het bereik vergroten.

4. De Gregoriaanse kalender

De Gregoriaanse kalender is de opvolger van de Juliaanse kalender. De Gregoriaanse kalender is in verschillende landen op verschillende dagen ingevoerd. De eerste landen deden dat op 15 oktober 1582 (in de Gregoriaanse kalender), die overeenkomt met CJDN 2299161.

Als je rekent met 32-bitsgetallen dan werken onderstaande algoritmen voor datums vanaf Gregoriaans jaar −1'469'899 tot en met Gregoriaans jaar 1'469'901. Zie hoofdstuk 16.2 voor meer details en alternatieve algoritmen, inclusief een manier om het bruikbare bereik van onderstaande algoritmen te vergroten tot het voor 32-bitsgetallen maximum van ongeveer 11 miljoen jaar.

4.1. Van Gregoriaanse datum naar CJDN

Een algoritme om van een Gregoriaanse datum (kalenderjaar \( a \), kalendermaand \( m \), kalenderdag \( d \)) om te rekenen naar CJDN \( J \) is:

\begin{align} \{ a_1, m_1 \} \| = \Div(m − 3, 12) \\ \{ c_1, a_2 \} \| = \Div(a + a_1, 100) \\ J \| = \dfloorratio{146097 c_1}{4} + \dfloorratio{36525 a_2}{100} \notag \\ \| + \dfloorratio{153 m_1 + 2}{5} + d + 1721119 \end{align}

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

\begin{align*} \{ a_1, m_1 \} \| = \Div(m − 3, 12) = \Div(9 − 3, 12) = \Div(6, 12) = \{ 0, 6 \} \\ \{ c_1, a_2 \} \| = \Div(a + a_1, 100) = \Div(2010 + 0, 100) = \{ 20, 10 \} \\ 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×10}{100} \\ \| + \dfloorratio{153×6 + 2}{5} + 7 + 1721119 \\ \| = \dfloorratio{2921940}{4} + \dfloorratio{365250}{100} \\ \| + \dfloorratio{920}{5} + 7 + 1721119 \\ \| = 730485 + 3652 + 184 + 7 + 1721119 = 2455447 \end{align*}

En hier zijn de berekeningen voor nog een paar data:

\({a}\) \({m}\) \({d}\) \({a_1}\) \({m_1}\) \({c_1}\) \({a_2}\) \({•c_1}\) \({•a_2}\) \({•m_1}\) \({J}\)
−1000 12 15 0 9 −10 0 −365243 0 153 1356044
−1 12 31 0 9 −1 99 −36525 36159 275 1721059
0 1 1 −1 10 −1 99 −36525 36159 306 1721060
0 2 29 −1 11 −1 99 −36525 36159 337 1721119
0 3 1 0 0 0 0 0 0 0 1721120
2000 2 29 −1 11 19 99 693960 36159 337 2451604
2000 3 1 0 0 20 0 730485 0 0 2451605
2001 2 28 −1 11 20 0 730485 0 337 2451969
2001 3 1 0 0 20 1 730485 365 0 2451970
2010 9 7 0 6 20 10 730485 3652 184 2455447
2100 2 28 −1 11 20 99 730485 36159 337 2488128
2100 3 1 0 0 21 0 767009 0 0 2488129

4.2. Van CJDN naar Gregoriaanse datum

Het algoritme om van een CJDN \( J \) om te rekenen naar een Gregoriaanse datum (kalenderjaar \( a \), kalendermaand \( m \), kalenderdag \( d \)) is:

\begin{align} \{ c_1, ε_1 \} \| = \Div(4 J − 6884477, 146097) \\ \{ a_1, ε_2 \} \| = \Div\dparen{100 \dfloorratio{ε_1}{4} + 99, 36525} \\ \{ m_1, ε_3 \} \| = \Div\dparen{5 \dfloorratio{ε_2}{100} + 2, 153} \\ \{ a_2, m_2 \} \| = \Div(m_1 + 2, 12) \\ a \| = 100 c_1 + a_1 + a_2 \\ m \| = m_2 + 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*} \{ c_1, ε_1 \} \| = \Div(4 J − 6884477, 146097) \\ \| = \Div(4×2452827 − 6884477, 146097) \\ \| = \Div(2926831, 146097) = \{ 20, 4891 \} \\ \{ a_1, ε_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 \} \\ \{ a_2, m_2 \} \| = \Div(m_1 + 2, 12) = \Div(4 + 2, 12) = \Div(6, 12) = \{ 0, 6 \} \\ a \| = 100 c_1 + a_1 + a_2 = 100×20 + 3 + 0 = 2003 \\ m \| = m_2 + 1 = 6 + 1 = 7 \\ d \| = \dfloorratio{ε_3}{5} + 1 = \dfloorratio{25}{5} + 1 = 6 \end{align*}

De datum is 6 juli 2003.

Hier zijn de berekeningen voor dezelfde data als voorheen.

\({J}\) \({c_1}\) \({ε_1}\) \({a_1}\) \({ε_2}\) \({m_1}\) \({ε_3}\) \({a_2}\) \({m_2}\) \({a}\) \({m}\) \({d}\)
2451604 19 146096 99 36524 11 144 1 1 2000 2 29
2451605 20 3 0 99 0 2 0 2 2000 3 1
2451969 20 1459 0 36499 11 139 1 1 2001 2 28
2451970 20 1463 1 74 0 2 0 2 2001 3 1
2452827 20 4891 3 12724 4 25 0 6 2003 7 6
2488128 20 146095 99 36424 11 139 1 1 2100 2 28
2488129 21 2 0 99 0 2 0 2 2100 3 1

5. De Milanković-kalender

Voor berekeningen met 32-bitsgetallen zijn onderstaande formules bruikbaar voor Milanković-jaren −653'199 tot en met 653'289.

Zie hoofdstuk 16.3 voor de afleiding van onderstaande formules, en voor hoe je het bruikbare bereik van de formules kunt uitbreiden tot (voor 32-bitsgetallen) de maximale 11,8 miljoen jaar.

5.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 \( a \), kalendermaand \( m \), kalenderdag \( d \)) om te rekenen naar het CJDN \( J \) is:

\begin{align} \{ a_1, m_1 \} \| = \Div(m ― 3, 12) \\ \{ c_1, a_2 \} \| = \Div(a + a_1, 100) \\ J \| = \dfloorratio{328718 c_1 + 6}{9} + \dfloorratio{36525 a_2}{100} \notag \\ \| + \dfloorratio{153 m_1 + 2}{5} + d + 1721119 \end{align}

Bijvoorbeeld, welke CJDN komt overeen met datum 6 juli 2003 in de Milanković-kalender? Dan is \( a = 2003 \), \( m = 7 \), \( d = 6 \) en dan

\begin{align*} \{ a_1, m_1 \} \| = \Div(m ― 3, 12) = \Div(7 ― 3, 12) = \{ 0, 4 \} \\ \{ c_1, a_2 \} \| = \Div(a + a_1, 100) = \Div(2003 + 0, 100) = \{ 20, 3 \} \\ J \| = \dfloorratio{328718 c_1 + 6}{9} + \dfloorratio{36525 a_2}{100} \\ \| + \dfloorratio{153 m_1 + 2}{5} + d + 1721119 \\ \| = \dfloorratio{328718×20 + 6}{9} + \dfloorratio{36525×3}{100} \\ \| + \dfloorratio{153×4 + 2}{5} + 6 + 1721119 \\ \| = \dfloorratio{6574366}{9} + \dfloorratio{109575}{100} \\ \| + \dfloorratio{614}{5} + 6 + 1721119 \\ \| = 730485 + 1095 + 122 + 6 + 1721119 = 2452827 \end{align*}

dus die datum komt overeen met CJDN 2452827.

Hier zijn nog wat voorbeelden:

\({a}\) \({m}\) \({d}\) \({a_1}\) \({m_1}\) \({c_1}\) \({a_2}\) \({•c_1}\) \({•a_2}\) \({•m_1}\) \({J}\)
−1000 12 15 0 9 −10 0 −365242 0 275 1356167
−1 12 31 0 9 −1 99 −36524 36159 275 1721060
0 1 1 −1 10 −1 99 −36524 36159 306 1721061
0 2 28 −1 11 −1 99 −36524 36159 337 1721119
0 3 1 0 0 0 0 0 0 0 1721120
2000 2 29 −1 11 19 99 693960 36159 337 2451604
2000 3 1 0 0 20 0 730485 0 0 2451605
2001 2 28 −1 11 20 0 730485 0 337 2451969
2001 3 1 0 0 20 1 730485 365 0 2451970
2003 7 6 0 4 20 3 730485 1095 122 2452827
2010 9 7 0 6 20 10 730485 3652 184 2455447
2100 2 28 −1 11 20 99 730485 36159 337 2488128
2100 3 1 0 0 21 0 767009 0 0 2488129

5.2. Van CJDN naar Milanković-datum

Een algoritme om CJDN \( J \) om te rekenen naar jaar \( a \), maand \( m \), dag \( d \) in de Milanković-kalender is:

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

\({J}\) \({c_1}\) \({ε_1}\) \({a_1}\) \({ε_2}\) \({m_1}\) \({ε_3}\) \({a_2}\) \({m_0}\) \({a}\) \({m}\) \({d}\)
1356167 −10 2605 0 28999 9 70 0 11 −1000 12 15
1721060 −1 328180 99 30524 9 150 0 11 −1 12 31
1721061 −1 328189 99 30624 10 2 1 0 0 1 1
1721119 −1 328711 99 36424 11 139 1 1 0 2 28
1721120 0 2 0 99 0 2 0 2 0 3 1
2451604 19 328716 99 36524 11 144 1 1 2000 2 29
2451605 20 7 0 99 0 2 0 2 2000 3 1
2451969 20 3283 0 36499 11 139 1 1 2001 2 28
2451970 20 3292 1 74 0 2 0 2 2001 3 1
2452827 20 11005 3 12724 4 25 0 6 2003 7 6
2455447 20 34585 10 19049 6 34 0 8 2010 9 7
2488128 20 328714 99 36424 11 139 1 1 2100 2 28
2488129 21 5 0 99 0 2 0 2 2100 3 1

6. De Herschel-kalender

De Engelse geleerde John Herschel (1792 - 1871) heeft een aanpassing van de Gregoriaanse kalender voorgesteld om die wat beter de gemiddelde lengte van het zonnejaar te laten volgen. Zijn idee was om de regels voor schrikkeljaren uit te breiden met de regel dat een jaar toch geen schrikkeljaar is (en februari dus 28 dagen bevat) als het jaartal deelbaar is door 4000. Daarmee zijn de regels voor schrikkeljaren:

  1. alleen als het jaartal deelbaar is door 4

  2. maar toch niet als het jaartal deelbaar is door 100

  3. maar toch wel als het jaartal deelbaar is door 400

  4. maar toch niet als het jaartal deelbaar is door 4000.

Voor berekeningen met 32-bitsgetallen zijn onderstaande formules bruikbaar voor Herschel-jaren −587'599 tot en met 587'960.

Zie hoofdstuk 16.4 voor de afleiding van de volgende formules, en voor hoe je het bruikbare bereik van die formules kunt vergroten tot het maximum (voor 32-bitsgetallen) van 11,8 miljoen jaar.

6.1. Van Herschel-datum naar CJDN

De berekeningen zijn als volgt, van jaar \( a \), maand \( m \), en dag \( d \) in de Herschel-kalender naar CJDN \( J \):

\begin{align} \{ α_1, m_1 \} \| = \Div(m − 3, 12) \\ \{ c_1, a_2 \} \| = \Div(a + α_1, 100) \\ \{ c_2, c_3 \} \| = \Div(c_1, 4) \\ J \| = \dfloorratio{1460969 c_2 + 9}{10} + \dfloorratio{146097 c_3}{4} + \dfloorratio{36525 a_2}{100} \notag \\ \| + \dfloorratio{153 m_1 + 2}{5} + d + 1721119 \end{align}

Bijvoorbeeld, welke CJDN komt overeen met datum 11 augustus 2022 in de Hershel-kalender? Dan is \( a = 2022 \), \( m = 8 \), \( d = 11 \), en dan

\begin{align*} \{ α_1, m_1 \} \| = \Div(m − 3, 12) = \Div(8 ― 3, 12) = \Div(5, 12) = \{ 0, 5 \} \\ \{ c_1, a_2 \} \| = \Div(a + α_1, 100) = \Div(2022 + 0, 100) \\ \| = \Div(2022, 100) = \{ 20, 22 \} \\ \{ c_2, c_3 \} \| = \Div(c_1, 4) = \Div(20, 4) = \{ 5, 0 \} \\ J \| = \dfloorratio{1460969 c_2 + 9}{10} + \dfloorratio{146097 c_3}{4} + \dfloorratio{36525 a_2}{100} \\ \| + \dfloorratio{153 m_1 + 2}{5} + d + 1721120 \\ \| = \dfloorratio{1460969×5 + 9}{10} + \dfloorratio{146097×0}{4} + \dfloorratio{36525×22}{100} \\ \| + \dfloorratio{153×5 + 2}{5} + 11 + 1721120 \\ \| + \dfloorratio{153 m_1 + 2}{5} + d + 1721120 \\ \| = \dfloorratio{7304854}{10} + 0 + \dfloorratio{803550}{100} \\ \| + \dfloorratio{767}{5} + 11 + 1721120 \\ \| = 730485 + 0 + 8035 + 153 + 11 + 1721119 = 2459803 \end{align*}

Nog wat meer voorbeelden:

\({a}\) \({m}\) \({d}\) \({α_1}\) \({m_1}\) \({c_1}\) \({a_2}\) \({c_2}\) \({c_3}\) \({•c_2}\) \({•c_3}\) \({•a_2}\) \({•m_1}\) \({J}\)
2022 7 22 0 4 20 22 5 0 730485 0 8035 122 2459783
1000 1 1 −1 10 9 99 2 1 292194 36524 36159 306 2086303
2000 2 29 −1 11 19 99 4 3 584388 109572 36159 337 2451604
2000 3 1 0 0 20 0 5 0 730485 0 0 0 2451605
2022 8 11 0 5 20 22 5 0 730485 0 8035 153 2459803
3600 2 29 −1 11 35 99 8 3 1168776 109572 36159 337 3035992
3600 3 1 0 0 36 0 9 0 1314873 0 0 0 3035993
4000 2 28 −1 11 39 99 9 3 1314873 109572 36159 337 3182088
4000 3 1 0 0 40 0 10 0 1460969 0 0 0 3182089
5800000 1 1 −1 10 57999 99 14499 3 2118258954 109572 36159 306 2120126111

6.2. Van CJDN naar Herschel-datum

In de omgekeerde richting gaan de berekeningen als volgt:

\begin{align} \{ c_2, ε_1 \} \| = \Div(10 J − 17211200, 1460969) \\ \{ c_3, ε_2 \} \| = \Div\dparen{4 \dfloorratio{ε_1}{10} + 3, 146097} \\ \{ a_2, ε_3 \} \| = \Div\dparen{100 \dfloorratio{ε_2}{4} + 99, 36525} \\ \{ m_1, ε_4 \} \| = \Div\dparen{5 \dfloorratio{ε_3}{100} + 2, 153} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) \\ a \| = 400 c_2 + 100 c_3 + a_2 + α_1 \\ m \| = m_0 + 1 \\ d \| = \dfloorratio{ε_4}{5} + 1 \end{align}

Bijvoorbeeld, wat is de Herschel-datum die hoort bij CJDN 2459803? Dan is \( J = 2459803 \) en dan

\begin{align*} \{ c_2, ε_1 \} \| = \Div(10 J − 17211200, 1460969) = \Div(10×2459803 − 17211200, 1460969) \\ \| = \Div(7386830, 1460969) = \{ 5, 81985 \} \\ \{ c_3, ε_2 \} \| = \Div\dparen{4 \dfloorratio{ε_1}{10} + 3, 146097} = \Div\dparen{4 \dfloorratio{81985}{10} + 3, 146097} \\ \| = \Div(4×8198 + 3, 146097) = \Div(32795, 146097) = \{ 0, 32795 \} \\ \{ a_2, ε_3 \} \| = \Div\dparen{100 \dfloorratio{ε_2}{4} + 99, 36525} = \Div\dparen{100 \dfloorratio{32795}{4} + 99, 36525} \\ \| = \Div(100×8198 + 99, 36525) = \Div(819899, 36525) = \{ 22, 16349 \} \\ \{ m_1, ε_4 \} \| = \Div\dparen{5 \dfloorratio{ε_3}{100} + 2, 153} = \Div\dparen{5 \dfloorratio{16349}{100} + 2, 153} \\ \| = \Div(5×163 + 2, 153) = \Div(817, 153) = \{ 5, 52 \} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) = \Div(5 + 2, 12) = \Div(7, 12) = \{ 0, 7 \} \\ a \| = 400 c_2 + 100 c_3 + a_2 + α_1 = 400×5 + 100×0 + 22 + 0 = 2022 \\ m \| = m_0 + 1 = 7 + 1 = 8 \\ d \| = \dfloorratio{ε_4}{5} + 1 = \dfloorratio{52}{5} + 1 = 10 + 1 = 11 \end{align*}

dus de datum is dag 11 in maand 8 in jaar 2022.

Nog wat meer voorbeelden:

\({J}\) \({c_2}\) \({ε_1}\) \({c_3}\) \({ε_2}\) \({a_2}\) \({ε_3}\) \({m_1}\) \({ε_4}\) \({α_1}\) \({m_0}\) \({a}\) \({m}\) \({d}\)
2459783 5 81785 0 32715 22 14349 4 105 0 6 2022 7 22
2086303 2 729892 1 145862 99 30624 10 2 1 0 1000 1 1
2451604 4 1460964 3 146096 99 36524 11 144 1 1 2000 2 29
2451605 5 5 0 3 0 99 0 2 0 2 2000 3 1
2459803 5 81985 0 32795 22 16349 5 52 0 7 2022 8 11
3035992 8 1460968 3 146096 99 36524 11 144 1 1 3600 2 29
3035993 9 9 0 3 0 99 0 2 0 2 3600 3 1
3182088 9 1460959 3 146092 99 36424 11 139 1 1 4000 2 28
3182089 10 0 0 3 0 99 0 2 0 2 4000 3 1
2120126111 14499 1460379 3 145860 99 30624 10 2 1 0 5800000 1 1

7. De Juliaanse kalender

Voor berekeningen met 32-bitsgetallen zijn onderstaande formules bruikbaar voor Juliaanse jaren −1'469'871 tot en met 1'469'871.

Zie hoofdstuk 16.1.1 voor de afleiding van dit algoritme, en voor hoe je het bruikbare bereik van de formules kunt uitbreiden tot (voor 32-bitsgetallen) de maximale 11,8 miljoen jaar.

7.1. Van Juliaanse datum naar CJDN

Het algoritme om van een Juliaanse datum (kalenderjaar \( a \), kalendermaand \( m \), kalenderdag \( d \)) om te rekenen naar het CJDN \( J \) is:

\begin{align} \{ α_1, m_1 \} \| = \Div(m ― 3, 12) \\ J \| = \dfloorratio{1461(a + α_1)}{4} + \dfloorratio{153 m_1 + 2}{5} + d + 1721117 \end{align}

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

\begin{align*} \{ α_1, m_1 \} \| = \Div(m ― 3, 12) = \Div(9 − 3, 12) = \Div(6, 12) = \{ 0, 6 \} \\ J \| = \dfloorratio{1461(a + α_1)}{4} + \dfloorratio{153 m_1 + 2}{5} + d + 1721117 \\ \| = \dfloorratio{1461×(2010 + 0)}{4} + \dfloorratio{153×6 + 2}{5} + 7 + 1721117 \\ \| = \dfloorratio{2936610}{4} + \dfloorratio{920}{5} + 7 + 1721117 \\ \| = 734152 + 184 + 7 + 1721117 = 2455460 \end{align*}

En hier zijn de berekeningen voor nog een paar data:

\({a}\) \({m}\) \({d}\) \({α_1}\) \({m_1}\) \({•a}\) \({•m_1}\) \({J}\)
2000 2 29 −1 11 730134 337 2451617
2000 3 1 0 0 730500 0 2451618
2000 12 1 0 9 730500 275 2451893
2001 2 28 −1 11 730500 337 2451982
2001 3 1 0 0 730865 0 2451983
2010 9 7 0 6 734152 184 2455460
2100 2 28 −1 11 766659 337 2488141
2100 2 29 −1 11 766659 337 2488142
2100 3 1 0 0 767025 0 2488143

7.2. Van CJDN naar Juliaanse datum

Het algoritme om een CJDN \( J \) om te rekenen naar een Juliaanse datum (kalenderjaar \( a \), kalendermaand \( m \), kalenderdag \( d \)) is:

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

Welke Juliaanse datum komt overeen met CJDN 2455460? Dan is \( J = 2455460 \) en dan

\begin{align*} \{ a_1, ε_1 \} \| = \Div(4 J − 6884469, 1461) = \Div(4×2455460 − 6884469, 1461) \\ \| = \Div(2937371, 1461) = \{ 2010, 761 \} \\ \{ m_1, ε_2 \} \| = \Div\dparen{5 \dfloorratio{ε_1}{4} + 2, 153} = \Div\dparen{5 \dfloorratio{761}{4} + 2, 153} \\ \| = \Div(5×190 + 2, 153) = \Div(952, 153) = \{ 6, 34 \} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) = \Div(6 + 2, 12) = \Div(8, 12) = \{ 0, 8 \} \\ a \| = a_1 + α_1 = 2010 + 0 = 2010 \\ m \| = m_0 + 1 = 8 + 1 = 9 \\ d \| = \dfloorratio{ε_2}{5} + 1 = \dfloorratio{34}{5} + 1 = 6 + 1 = 7 \end{align*}

De datum is 7 september 2010.

Hier zijn de berekeningen voor dezelfde data als voorheen.

\({J}\) \({a_1}\) \({ε_1}\) \({m_1}\) \({ε_2}\) \({α_1}\) \({m_0}\) \({a}\) \({m}\) \({d}\)
2451617 1999 1460 11 144 1 1 2000 2 29
2451618 2000 3 0 2 0 2 2000 3 1
2451893 2000 1103 9 0 0 11 2000 12 1
2451982 2000 1459 11 139 1 1 2001 2 28
2451983 2001 2 0 2 0 2 2001 3 1
2455460 2010 761 6 34 0 8 2010 9 7
2488141 2099 1456 11 139 1 1 2100 2 28
2488142 2099 1460 11 144 1 1 2100 2 29
2488143 2100 3 0 2 0 2 2100 3 1

8. De Islamitische kalender

Voor berekeningen met 32-bitsgetallen zijn onderstaande formules bruikbaar van Islamitisch jaar −202'000 tot en met 202'001.

Zie hoofdstuk 16.9 voor de afleiding van dit algoritme, en voor hoe je het bruikbare bereik van de formules kunt uitbreiden tot (voor 32-bitsgetallen) de maximale 11,8 miljoen jaar.

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. Het verschil tussen de religieuze en administratieve kalenders zou meestal hooguit 1 dag moeten zijn.

Het CJDN kan als volgt uit het jaarnummer \( a \), 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{10631 a − 10617}{30} + \dfloorratio{325 m − 320}{11} + d + 1948439 \end{equation}

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

\begin{align*} J \| = \dfloorratio{10631 a − 10617}{30} + \dfloorratio{325 m − 320}{11} + d + 1948439 \\ \| = \dfloorratio{10631×1432 − 10617}{30} + \dfloorratio{325×8 − 320}{11} + 29 + 1948439 \\ \| = \dfloorratio{15212975}{30} + \dfloorratio{2280}{11} + 29 + 1948439 \\ \| = 507099 + 207 + 29 + 1948439 = 2455774 \end{align*}

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 \( a = 1 \), \( m = 1 \), \( d = 1 \), dus

\begin{align*} J \| = \dfloorratio{10631 a − 10617}{30} + \dfloorratio{325 m − 320}{11} + d + 1948439 \\ \| = \dfloorratio{14}{30} + \dfloorratio{5}{11} + 1 + 1948449 \\ \| = 0 + 0 + 1 + 1948439 = 1948440 \end{align*}

hetgeen overeenkomt met 16 juli 622 in de Juliaanse kalender.

Wat meer voorbeelden:

\({a}\) \({m}\) \({d}\) \({•a}\) \({•m}\) \({J}\)
−1 12 30 −709 325 1948085
0 1 1 −354 0 1948086
0 12 29 −354 325 1948439
1 1 1 0 0 1948440
999 12 29 353658 325 2302451
1000 1 1 354012 0 2302452
1432 8 29 507099 207 2455774

8.2. Van CJDN naar Islamitische datum

De volgende formules berekenen het jaartal \( a \), maandnummer \( m \), en dagnummer \( d \) in de meestgebruikte administratieve Islamitische kalender uit het CJDN \( J \):

\begin{align} \{ a, ε_1 \} \| = \Div(30 J − 58442554, 10631) \\ \{ m, ε_2 \} \| = \Div\dparen{11\dfloorratio{ε_1}{30} + 330, 325} \\ d \| = \dfloorratio{ε_2}{11} + 1 \end{align}

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

\begin{align*} \{ a, ε_1 \} \| = \Div(30 J − 58442554, 10631) \\ \| = \Div(30×2455774 − 58442554, 10631) \\ \| = \Div(15230666, 10631) = \{ 1432, 7074 \} \\ \{ m, ε_2 \} \| = \Div\dparen{11\dfloorratio{ε_1}{30} + 330, 325} = \Div\dparen{11\dfloorratio{7074}{30} + 330, 325} \\ \| = \Div(11×235 + 330, 325) = \Div(2915, 325) = \{ 8, 315 \} \\ d \| = \dfloorratio{ε_2}{11} + 1 = \dfloorratio{315}{11} + 1 = 28 + 1 = 29 \end{align*}

dus \( a = 1432 \), \( m = 8 \), \( d = 29 \) ofwel 29 Sha`ban 1432.

Wat meer voorbeelden:

\({J}\) \({a}\) \({ε_1}\) \({m}\) \({ε_2}\) \({d}\)
1948085 −1 10627 12 324 30
1948086 0 26 1 5 1
1948439 0 10616 12 313 29
1948440 1 15 1 5 1
2302451 999 10607 12 313 29
2302452 1000 6 1 5 1
2455774 1432 7074 8 315 29

9. De Babylonische kalender

Voor berekeningen met 32-bitsgetallen zijn onderstaande formules bruikbaar van Babylonisch jaar −25'018 tot en met 25'017.

Zie hoofdstuk 16.6 voor de afleiding van dit algoritme, en voor hoe je het bruikbare bereik van de formules kunt uitbreiden tot (voor 32-bitsgetallen) de maximale 11,8 miljoen jaar.

9.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 \( a \) 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{equation} J = \dfloorratio{6940\dparen{\dfloorratio{235 a + 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 \( a = 3 \), \( m = 9 \), \( d = 27 \), dus

\begin{align*} J \| = \dfloorratio{6940\dparen{\dfloorratio{235 a + 13}{19} + m − 1}}{235} + d + 1607174 \\ \| = \dfloorratio{6940\dparen{\dfloorratio{235×3 + 13}{19} + 9 − 1}}{235} + 27 + 1607174 \\ \| = \dfloorratio{6940\dparen{\dfloorratio{718}{19} + 9 − 1}}{235} + 27 + 1607174 \\ \| = \dfloorratio{6940×(37 + 9 − 1)}{235} + 27 + 1607174 \\ \| = \dfloorratio{6940×45}{235} + 27 + 1607174 \\ \| = \dfloorratio{312300}{235} + 27 + 1607174 \\ \| = 1328 + 27 + 1607174 = 1608529 \end{align*}

Wat meer voorbeelden:

\({a}\) \({m}\) \({d}\) \({•a}\) \({•m}\) \({J}\)
1 1 1 13 383 1607558
1 1 30 13 383 1607587
1 2 1 13 413 1607588
1 2 29 13 413 1607616
1 3 1 13 442 1607617
2 1 1 25 738 1607913
2 1 29 25 738 1607941
2 2 1 25 767 1607942
3 9 27 37 1328 1608529
999 13 30 12356 365250 1972454
1000 1 1 12369 365280 1972455

9.2. Van CJDN naar Babylonische datum

Van CJDN \( J \) gaan we als volgt naar Babylonische jaar \( a \), maand \( m \), en dag \( d \):

\begin{align} \{ m_1, ε_1 \} \| = \Div(235 J − 377685891, 6940) \\ \{ a, ε_2 \} \| = \Div(19 m_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 \( 1608558 \)? Dan is \( J = 1608529 \), dus

\begin{align*} \{ m_1, ε_1 \} \| = \Div(235 J − 377685891, 6940) \\ \| = \Div(235×1608529 − 377685891, 6940) \\ \| = \Div(318424, 6940) = \{ 45, 6124 \} \\ \{ a, ε_2 \} \| = \Div(19 m_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*}

ofwel dag 27 van maand 9 van jaar 3.

Wat meer voorbeelden:

\({J}\) \({m_1}\) \({ε_1}\) \({a}\) \({ε_2}\) \({m}\) \({d}\)
1607558 13 19 1 17 1 1
1607587 13 6834 1 17 1 30
1607588 14 129 1 36 2 1
1607616 14 6709 1 36 2 29
1607617 15 4 1 55 3 1
1607913 25 164 2 10 1 1
1607941 25 6744 2 10 1 29
1607942 26 39 2 29 2 1
1608529 45 6124 3 155 9 27
1972454 12368 6879 999 232 13 30
1972455 12369 174 1000 16 1 1

10. De Joodse kalender

Voor berekeningen met 32-bitsgetallen zijn onderstaande formules zonder aanpassing slechts bruikbaar voor joodse jaren −223 tot en met 226 (tussen ergens in juliaans jaar −3985 en ergens in juliaans jaar −3534). Buiten dat interval zul je foute resultaten vinden, en de moderne tijd valt buiten dat interval. Daarom wordt hieronder waar nodig een omweg genoemd waarmee berekeningen met 32-bitsgetallen de juiste uitkomsten geven voor bijna 12 miljoen jaar rond nu. Voor berekeningen met 64-bitsgetallen is die omweg in de praktijk niet nodig.

Zie hoofdstuk 16.7 voor de afleiding van dit algoritme.

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

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 \( a \), kalendermaand \( m \) (van 1 tot 12 of 13) en kalenderdag \( d \) (van 1 tot 29 of 30) naar CJDN is als volgt.

Voor berekeningen met 32-bitsgetallen is een omweg nodig voor \( δ_3 \) en \( δ_5 \), zie verderop.

\begin{align} m_1 \| = m − 7 \\ a_1 \| = a − \dfloorratio{m_1}{10} \\ δ_3(a_1) \| = \dfloorratio{765433 \dfloorratio{235 a_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(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} \\ L \| = d_1(a_1 + 1) − d_1(a_1) \\ d_2 \| = d_1(a_1) + \dfloorratio{384 m_1 + 10}{13} + \dmod{\dfloorratio{L + 1}{2}}{3} \dfloorratio{m_1 + 10}{12} \notag \\ \| − \dmod{\dfloorratio{385 − L}{2}}{3} \dfloorratio{m_1 + 9}{12} \\ J \| = d_2 + d + 347997 \end{align}

Bovenstaande formules zijn deels een samenvatting: Om \( L \) uit te rekenen heb je \( d_1(a_1 )\) en \( d_1(a_1 + 1) \) nodig, en om die uit te rekenen heb je \( L_2(a_1 − 1) \), \( L_2(a_1) \) en \( L_2(a_1 + 1) \) nodig, en om die uit te rekenen heb je \( δ_5(a_1 − 1) \), \( δ_5(a_1) \), \( δ_5(a_1 + 1) \) en \( δ_5(a_1 + 2) \), en voor elke \( δ_5 \) de bijbehorende \( δ_3 \).

De berekening van \( d_2 \) zou samengevoegd kunnen worden met die van \( J \), maar het is handig om \( d_2 \) apart te kunnen berekenen omdat dat nodig is voor kalenderberekeningen de andere kant op, van CJDN naar datum.

Voor 12 kislev 4682 (\( a = 4682, m = 9, d = 12 \)) vinden we

\begin{align*} m_1 \| = m − 7 = 9 − 7 = 2 \\ a_1 \| = a − \dfloorratio{m_1}{10} = 4682 − \dfloorratio{2}{10} = 4682 \\ δ_3(a_1) \| = δ_3(4682) = \dfloorratio{765433 \dfloorratio{235 a_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) = 1709349 \\ δ_3(a_1 + 1) \| = δ_3(4683) = 1710087 \\ δ_3(a_1 + 2) \| = δ_3(4684) = 1710442 \\ δ_5(a_1) \| = δ_5(4682) = δ_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} = 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) \| = L_2(4682) = δ_5(a_1 + 1) − δ_5(a_1) \\ \| = δ_5(4683) − δ_5(4682) = 1710087 − 1709704 = 383 \\ L_2(a_1 − 1) \| = L_2(4681) = δ_5(4682) − δ_5(4681) = 1709704 − 1709349 = 355 \\ L_2(a_1 + 1) \| = L_2(4683) = δ_5(4684) − δ_5(4683) = 1710443 − 1710087 = 356 \\ d_1(a_1) \| = d_1(4682) = δ_5(a_1) + 2\dmod{\dfloorratio{L_2(a_1) + 19}{15}}{2} + \dmod{\dfloorratio{L_2(a_1 − 1) + 7}{15}}{2} \\ \| = δ_5(4682) + 2\dmod{\dfloorratio{L_2(4682) + 19}{15}}{2} + \dmod{\dfloorratio{L_2(4681) + 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(a_1 + 1) \| = d_1(4683) = δ_5(4683) + 2\dmod{\dfloorratio{L_2(4683) + 19}{15}}{2} + \dmod{\dfloorratio{L_2(4682) + 7}{15}}{2} \\ \| = 1710087 + 2\dmod{\dfloorratio{356 + 19}{15}}{2} + \dmod{\dfloorratio{383 + 7}{15}}{2} \\ \| = 1710087 + 2\dmod{\dfloorratio{375}{15}}{2} + \dmod{\dfloorratio{390}{15}}{2} \\ \| = 1710087 + 2×\dmod{25}{2} + \dmod{26}{2} \\ \| = 1710087 + 2×1 + 0 = 1710089 \\ L \| = d_1(a_1 + 1) − d_1(a_1) = d_1(4683) − d_1(4682) = 1710089 − 1709704 = 385 \\ d_2 \| = d_1(a_1) + \dfloorratio{384 m_1 + 10}{13} + \dmod{\dfloorratio{L + 1}{2}}{3} \dfloorratio{m_1 + 10}{12} \\ \| − \dmod{\dfloorratio{385 − L}{2}}{3} \dfloorratio{m_1 + 9}{12} \\ \| = d_1(4682) + \dfloorratio{384×2 + 10}{13} + \dmod{\dfloorratio{385 + 1}{2}}{3} \dfloorratio{2 + 10}{12} \\ \| − \dmod{\dfloorratio{385 − 385}{2}}{3} \dfloorratio{2 + 9}{12} \\ \| = 1709704 + \dfloorratio{778}{13} + \dmod{\dfloorratio{386}{2}}{3} \dfloorratio{12}{12} − \dmod{\dfloorratio{0}{2}}{3} \dfloorratio{11}{12} \\ \| = 1709704 + 59 + \dmod{193}{3}×1 − 0×0 \\ \| = 1709704 + 59 + 1×1 − 0×0 = 1709764 \\ J \| = d_2 + d + 347997 = 1709764 + 12 + 347997 = 2057773 \end{align*}

Voor berekeningen met 32-bitsgetallen zijn omwegen nodig voor \( δ_3 \) en \( δ_5 \) omdat anders tussenresultaten zo groot worden dat het geen 32-bitsgetallen kunnen zijn. Zonder die omwegen krijg je alleen juiste resultaten voor een periode van ongeveer 450 jaar lang rond het joodse jaar 1, ongeveer het juliaanse jaar −3759.

Gebruik voor \( δ_3 \)

\begin{align} m_2 \| = \dfloorratio{235 a_1 − 234}{19} \\ \{ ω_4, μ_2 \} \| = \Div(m_2, 25920) \\ δ_3 \| = 29 m_2 + 13753 ω_4 + \dfloorratio{13753 μ_2 + 12084}{25920} \end{align}

in plaats van

\begin{equation} δ_3 = \dfloorratio{765433 \dfloorratio{235 a_1 − 234}{19} + 12084}{25920} \end{equation}

en gebruik voor \( δ_5 \)

\begin{equation} δ_5 = δ_3 + \dmod{\dfloorratio{6\dmod{δ_3}{7}}{7}}{2} \end{equation}

in plaats van

\begin{equation} δ_5 = δ_3 + \dmod{\dfloorratio{6 δ_3}{7}}{2} \end{equation}

Als je met 32-bitsgetallen de originele formules gebruikt dan vindt je niet de juiste CJDN omdat sommige tussenresultaten dan te groot zijn voor 32-bitsgetallen. Dan zijn de onwegen nodig. Voor \( a_1 = 4682 \) vinden we met de originele formule voor \( δ_3 \)

\begin{align*} δ_3 \| = \dfloorratio{765433 \dfloorratio{235 a_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 \end{align*}

Het grootste tussenresultaat is gelijk aan 44'315'521'052 en dat is veel te groot om een 32-bitsgetal te zijn. Met de omwegformules vinden we

\begin{align*} m_2 \| = \dfloorratio{235 a_1 − 234}{19} = \dfloorratio{235×4682 − 234}{19} \\ \| = \dfloorratio{1100036}{19} = 57896 \\ \{ ω_4, μ_2 \} \| = \Div(m_2, 25920) = \Div(57896, 25920) = \{ 2, 6056 \} \\ δ_3 \| = 29 m_2 + 13753 ω_4 + \dfloorratio{13753 μ_2 + 12084}{25920} \\ \| = 29×57896 + 13753×2 + \dfloorratio{13753×6056 + 12084}{25920} \\ \| = 1678984 + 27506 + \dfloorratio{83300252}{25920} = 1678984 + 27506 + 3213 = 1709703 \end{align*}

en dat is hetzelfde resultaat als voorheen, maar nu is het grootste tussenresultaat gelijk aan 83'300'252 en dat is klein genoeg voor een 32-bitsgetal.

Met \( δ_3 = 456789012 \) vinden we met de originele formule voor \( δ_5 \)

\begin{align*} δ_5 \| = δ_3 + \dmod{\dfloorratio{6 δ_3}{7}}{2} = 456789012 + \dmod{\dfloorratio{6×456789012}{7}}{2} \\ \| = 456789012 + \dmod{\dfloorratio{2740734072}{7}}{2} = 456789012 + \dmod{391533438}{2} \\ \| = 456789012 + 0 = 456789012 \end{align*}

met als grootste tussenresultaat 2'740'734'072 wat te groot is voor een 32-bitsgetal. Met de omweg vinden we

\begin{align*} δ_5 \| = δ_3 + \dmod{\dfloorratio{6\dmod{δ_3}{7}}{7}}{2} = 456789012 + \dmod{\dfloorratio{6\dmod{456789012}{7}}{7}}{2} \\ \| = 456789012 + \dmod{\dfloorratio{6×1}{7}}{2} = 456789012 + \dmod{\dfloorratio{6}{7}}{2} \\ \| = 456789012 + \dmod{0}{2} = 456789012 \end{align*}

dus hetzelfde resultaat als hierboven maar nu is het grootste tussenresultaat gelijk aan 456'789'012 en dat is klein genoeg voor een 32-bitsgetal.

10.2. Van CJDN naar Joodse datum

Van CJDN \( J \) gaan we als volgt naar Joods jaar \( j \), maand \( m \) en dag \( d \).

Voor berekeningen met 32-bitsgetallen is een omweg nodig. Zie verderop.

\begin{align} s \| = J − 347998 \\ μ_3 \| = \dfloorratio{25920 s + 779268}{765433} \\ \{ α_3, ε_3 \} \| = \Div(19 μ_3 + 366, 235) \\ μ_4 \| = \dfloorratio{ε_3}{19} − 6 \\ δ_{14} \| = s − d_2(α_3, μ_4) \\ μ_5 \| = μ_3 + \dfloorratio{δ_{14}}{64} \\ \{ α_4, ε_4 \} \| = \Div(19 μ_5 + 366, 235) \\ μ_6 \| = \dfloorratio{ε_4}{19} − 6 \\ δ_{15} \| = s − d_2(α_4, μ_6) \\ μ_7 \| = μ_5 + \dfloorratio{δ_{15}}{64} \\ \{ a_1, ε_5 \} \| = \Div(19 μ_7 + 366, 235) \\ m_1 \| = \dfloorratio{ε_5}{19} − 6 \\ d_0 \| = s − d_2(a_1, m_0) \\ a \| = a_1 + \dfloorratio{m_1}{10} \\ m \| = m_1 + 7 \\ d \| = d_0 + 1 \end{align}

waarbij \( d_2 \) berekend wordt zoals in het vorige hoofdstuk (formule \eqref{eq:jewishd2}).

Voor CJDN 2057773 vinden we

\begin{align*} s \| = J − 347998 = 2057773 − 347998 = 1709775 \\ μ_3 \| = \dfloorratio{25920 s + 779268}{765433} = \dfloorratio{25920×1709775 + 779628}{765433} \\ \| = \dfloorratio{44318147628}{765433} = 57899 \\ \{ α_3, ε_3 \} \| = \Div(19 μ_3 + 366, 235) = \Div(19×57899 + 366, 235) \\ \| = \Div(1100447, 235) = \{ 4682, 177 \} \\ μ_4 \| = \dfloorratio{ε_3}{19} − 6 = \dfloorratio{177}{19} − 6 = 9 − 6 = 3 \\ δ_{14} \| = s − d_2(α_3, μ_4) = 1709775 − d_2(4682, 3) = 1709775 − 1709794 = −19 \\ μ_5 \| = μ_3 + \dfloorratio{δ_{14}}{64} = 57899 + \dfloorratio{−19}{64} = 57899 − 1 = 57898 \\ \{ α_4, ε_4 \} \| = \Div(19 μ_5 + 366, 235) = \Div(19×57898 + 366, 235) \\ \| = \Div(1100428, 235) = \{ 4682, 158 \} \\ μ_6 \| = \dfloorratio{ε_4}{19} − 6 = \dfloorratio{158}{19} − 6 = 8 − 6 = 2 \\ δ_{15} \| = s − d_2(α_4, μ_6) = 1709775 − d_2(4682, 2) = 1709775 − 1709764 = 11 \\ μ_7 \| = μ_5 + \dfloorratio{δ_{15}}{64} = 57898 + \dfloorratio{11}{64} = 57898 + 0 = 57898 \\ \{ a_1, ε_5 \} \| = \Div(19 μ_7 + 366, 235) = \Div(19×57898 + 366, 235) = \{ 4682, 158 \} \\ m_1 \| = \dfloorratio{ε_5}{19} − 6 = \dfloorratio{158}{19} − 6 = 2 \\ d_0 \| = s − d_2(a_1, m_0) = 1709775 − d_2(4682, 2) = 11 \\ a \| = a_1 + \dfloorratio{m_1}{10} = 4682 + \dfloorratio{2}{10} = 4682 + 0 = 4682 \\ m \| = m_1 + 7 = 2 + 7 = 9 \\ d \| = d_0 + 1 = 11 + 1 = 12 \end{align*}

dus de datum is dag 12 van kalendermaand 9 (kisleew) van jaar 4682.

Als je 32-bitsgetallen gebruikt dan heb je een omweg nodig voor de berekening van \( μ_3 \) want anders worden sommige tussenresultaten te groot om een 32-bitsgetal te zijn. Zonder die omweg krijg je alleen de juiste antwoorden voor een periode van ongeveer 450 jaar rond het joodse jaar 1, wat ongeveer overeenkomt met het juliaanse jaar −3759.

Gebruik voor \( μ_3 \)

\begin{align} \{ ω_1, ε_1 \} \| = \Div(s, 33783) \\ μ_3 \| = 1144 ω_1 + \dfloorratio{8 ω_1 + 25920 ε_1 + 13835}{765433} + 1 \end{align}

in plaats van

\begin{equation} μ_3 = \dfloorratio{25920 s + 779268}{765433} \end{equation}

Voor \( s = 1709775 \) vinden we op de oude manier

\begin{align*} μ_3 \| = \dfloorratio{25920 s + 779268}{765433} = \dfloorratio{25920×1709775 + 779268}{765433} \\ \| = \dfloorratio{44318147268}{765433} = 57899 \end{align*}

Het grootste tussenresultaat is 44'318'147'268 wat ruim te groot is om een 32-bitsgetal te zijn. Als je dit met 32-bitsgetallen uitrekent dan krijg je een antwoord dat een 32-bitsgetal is en dat kan niet gelijk zijn aan het juiste resultaat.

Met de omweg vinden we

\begin{align*} \{ ω_1, ε_1 \} \| = \Div(s, 33783) = \Div(1709775, 33783) = \{ 50, 20625 \} \\ μ_3 \| = 1144 ω_1 + \dfloorratio{8 ω_1 + 25920 ε_1 + 13835}{765433} + 1 \\ \| = 1144×50 + \dfloorratio{8×50 + 25920×20625 + 13835}{765433} + 1 \\ \| = 57200 + \dfloorratio{534614235}{765433} + 1 \\ \| = 57200 + 698 + 1 = 57899 \end{align*}

dus hetzelfde antwoord als hierboven, maar nu is het grootste tussenresultaat 534'614'235 wat ruim klein genoeg is om een 32-bitsgetal te zijn.

11. De Egyptische Kalender

Voor berekeningen met 32-bitsgetallen zijn onderstaande formules te gebruiken van egyptisch jaar −5'883'516 tot en met 5'879'547.

Zie hoofdstuk 16.5 voor de afleiding van dit algoritme.

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.

11.1. Van Egyptische datum naar CJDN

Het algoritme om van een Egyptische datum (kalenderjaar \( a \), kalendermaand \( m \), kalenderdag \( d \)) om te rekenen naar het CJDN \( J \) is:

\begin{equation} J = 365 a + 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 \| = 365 a + 30 m + d + 1448242 \\ \| = 365×218 + 30×5 + 7 + 1448242 \\ \| = 79570 + 150 + 7 + 1448242 = 1527969 \end{align*}

dus het antwoord is CJDN 1527969.

11.2. Van CJDN naar Egyptische datum

In omgekeerde richting zijn de berekeningen ook eenvoudig.

\begin{align} \{ a, d_1 \} \| = \Div(J − 1448273, 365) \\ \{ m_0, d_0 \} \| = \Div(d_1, 30) \\ 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*} \{ a, d_1 \} \| = \Div(J − 1448273, 365) = \Div(1527969 − 1448273, 365) \\ \| = \Div(79696, 365) = \{ 218, 126 \} \\ \{ m_0, d_0 \} \| = \Div(d_1, 30) = \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.

12. De Mayakalender

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

12.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 − \dmod{J_0 − H + 65}{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 \| = h_d + 20 (h_m − 1) = 5 + 20×(13 − 1) = 245 \\ J \| = J_0 − \dmod{J_0 − H + 65}{365} = 2439126 − \dmod{2439126 − 245 + 65}{365} \\ \| = 2439126 − \dmod{2438946}{365} = 2439126 − 16 = 2439110 \end{align*}

dus het antwoord is CJDN 2439110.

12.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 − \dmod{J_0 − 40 t_t + 39 t_v + 97}{260} \end{equation}

De laatste Tzolkin-datum \( \{ 4, 7 \} \) die gebeurt op of voor 31 december 1965 (= CJDN 2439126) is

\begin{align*} J \| = 2439126 − \dmod{2439126 − 40×4 + 39×7 + 97}{260} \\ \| = 2439126 − \dmod{2439336}{260} = 2439126 − 16 = 2439110 \end{align*}

dus het antwoord is CJDN 2439110.

Voor het aantal dagen \( T \) sinds de laatste \( \{ 1, 1 \} \) geldt

\begin{equation} T = \dmod{40 t_t + 221 t_v − 1}{260} \end{equation}

Voor CJDN 2439110 (met \( \{ t_t, t_v \} = \{ 4, 7 \} \)) vinden we

\[ T = \dmod{40×4 + 221×7 − 1}{260} = \dmod{1706}{260} = 146 \]

dus de laatste dag daarvoor die \( \{ 1, 1 \} \) had was CJDN \( J = 2439110 − 146 = 2438964 \), en dat klopt, want \( t_t = \dmod{J + 5}{13} + 1 = \dmod{2438969}{13} + 1 = 1 \) en \( t_v = \dmod{J + 16}{20} + 1 = \dmod{2438980}{20} + 1 = 1 \).

12.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 \| = \dmod{h_d + 20 (h_m − 1)}{365} \\ T \| = \dmod{40t_t + 221 t_v − 1}{260} \\ J \| = J_0 − \dmod{J_0 − 365 T + 364 H − 7600}{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 \| = \dmod{5 + 20×12}{365} = \dmod{245}{365} = 245 \\ T \| = \dmod{40×4 + 221×7 − 1}{260} = \dmod{1706}{260} = 146 \\ J \| = 2439126 − \dmod{2439126 − 365×146 + 364×245 − 7600}{18980} \\ \| = 2439126 − \dmod{2467416}{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.

12.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{align} J \| = l_1 + 20×(l_2 + 18×(l_3 + 20×(l_4 + 20×l_5))) + J_0 \notag \\ \| = l_1 + 20×l_2 + 360×l_3 + 7200×l_4 + 144000×l_5 + 584283 \end{align}

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

12.2. Van CJDN naar Mayakalender

12.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 \| = \dmod{J + 65}{365} \\ h_m \| = \dfloorratio{H}{20} + 1 \\ h_d \| = \dmod{H}{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 \| = \dmod{J + 65}{365} = \dmod{2439175}{365} = 245 \\ h_m \| = \dfloorratio{245}{20} + 1 = 13 \\ h_d \| = \dmod{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 \} \).

12.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 \| = \dmod{J + 5}{13} + 1 \label{eq:trecena} \\ t_v \| = \dmod{J + 16}{20} + 1 \label{eq:venteina} \end{align}

Wat is de Tzolkin-datum die overeenkomt met CJDN 2439110? Dan is

\begin{align*} t_t \| = \dmod{2439110 + 5}{13} + 1 = 3 + 1 = 4 \\ t_v \| = \dmod{2439110 + 16}{20} + 1 = 6 + 1 = 7 \end{align*}

dus die datum is \( \{ 4, 7 \} \).

12.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} \{ l_5, ε_5 \} \| = \Div(J − 584283, 144000) \\ \{ l_4, ε_4 \} \| = \Div(ε_5, 7200) \\ \{ l_3, ε_3 \} \| = \Div(ε_4, 360) \\ \{ l_2, l_1 \} \| = \Div(ε_3, 20) \end{align}

Welke Lange Telling \( L \) komt overeen met CJDN \( J = 2439110 \)? Dan is

\begin{align*} \{ l_5, ε_5 \} \| = \Div(J − 584283, 144000) = \Div(2439110 − 584283, 144000) \\ \| = \Div(1854827, 144000) = \{ 12, 126827 \} \\ \{ l_4, ε_4 \} \| = \Div(ε_5, 7200) = \Div(126827, 7200) = \{ 17, 4427 \} \\ \{ l_3, ε_3 \} \| = \Div(ε_4, 360) = \Div(4427, 360) = \{ 12, 107 \} \\ \{ l_2, l_1 \} \| = \Div(ε_3, 20) = \Div(107, 20) = \{ 5, 7 \} \end{align*}

Het antwoord is \( L = 12.17.12.5.7 \).

13. Een zongebonden maankalender met veel vaste maandlengtes

Ik heb een zongebonden maankalender ontworpen 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.

maand 354 355 384
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

Ik heb deze kalender aan de Gregoriaanse kalender gekoppeld zodat

  1. het kalenderjaar in deze kalender ongeveer overeenkomt met het Gregoriaanse kalenderjaar, dus bijvoorbeeld jaar 2022 in deze kalender is ongeveer gelijk aan jaar 2022 in de Gregoriaanse kalender.

  2. gemiddeld elke maand in deze kalender begint op nieuwe maan.

  3. het kalenderjaar in deze kalender gemiddeld begint op de noordelijke zonnewende (21 december in de Gregoriaanse kalender).

  4. deze kalender de maanstanden en seizoenen in de 20e en 21e eeuw zo goed mogelijk volgt. Deze kalender is gebaseerd op de Cyclus van Meton en zal, net als elke kalender die op een vaste cyclus is gebaseerd, in de loop van de tijd steeds meer uit de pas lopen met de maanstanden en seizoenen.

Voor berekeningen met 32-bitsgetallen zijn onderstaande formules bruikbaar van kalenderjaar −309'435 tot en met 309'434.

Zie hoofdstuk 16.8 voor de afleiding van deze formules, en voor hoe je het bruikbare bereik van de formules kunt uitbreiden tot (voor 32-bitsgetallen) de maximale 11,8 miljoen jaar.

13.1. Van maankalender naar CJDN

Gegeven jaar \( a \), maand \( m \), en dag \( d \) in deze maankalender kan CJDN \( J \) berekend worden als volgt:

\begin{equation} J = 354 a + 30\dfloorratio{7 a + 2}{19} + \dfloorratio{4 a + 18}{19} + \dfloorratio{384 m − 377}{13} + d + 1721018 \end{equation}

Bijvoorbeeld, welke CJDN hoort bij dag 28 van maand 7 van jaar 2022 in deze kalender? Dan is

\begin{align*} J \| = 354 a + 30\dfloorratio{7 a + 2}{19} + \dfloorratio{4 a + 18}{19} \\ \| + \dfloorratio{384 m − 377}{13} + d + 1721018 \\ \| = 354×2022 + 30\dfloorratio{7×2022 + 2}{19} + \dfloorratio{4×2022 + 18}{19} \\ \| + \dfloorratio{384×7 − 377}{13} + 28 + 1721018 \\ \| = 715788 + 30\dfloorratio{14156}{19} + \dfloorratio{8106}{19} \\ \| + \dfloorratio{2311}{13} + 28 + 1721018 \\ \| = 715788 + 30×745 + 426 + 177 + 28 + 1721018 \\ \| = 715788 + 22350 + 426 + 177 + 28 + 1721018 = 2459787 \end{align*}

dus het antwoord is CJDN 2459787, die overeenkomt met 26 juli 2022.

Wat meer voorbeelden (met de overeenkomstige Gregoriaanse datum in kolom "Greg."):

\({a}\) \({m}\) \({d}\) \({•354 a}\) \({•7 a}\) \({•4 a}\) \({•m}\) \({J}\) Greg.
2022 7 28 715788 22350 426 177 2459787 2022-07-26
2022 12 29 715788 22350 426 325 2459936 2022-11-22
2023 1 1 716142 22350 426 0 2459937 2022-11-23
2023 12 30 716142 22350 426 325 2460291 2022-12-12
2024 1 1 716496 22350 427 0 2460292 2022-12-13
2024 13 29 716496 22350 427 355 2460675 2024-12-30
2025 1 1 716850 22380 427 0 2460676 2024-12-31
2025 12 29 716850 22380 427 325 2461029 2031-12-13
2032 1 1 719328 22440 428 0 2463215 2031-12-14
2022 13 29 715788 22350 426 355 2459966 2032-12-31
2033 1 1 719682 22470 428 0 2463599 2033-01-01

13.2. Van CJDN naar maankalender

Gegeven CJDN \( J \) zijn jaar \( a \), maand \( m \) en dag \( d \) in deze maankalender te berekenen uit

\begin{align} s \| = J − 1721019 \\ α_1 \| = \dfloorratio{19 s + 511}{6940} \\ δ_1 \| = s − 354 α_1 − 30 \dfloorratio{7 α_1 + 2}{19} − \dfloorratio{4 α_1 + 18}{19} \\ a \| = α_1 + \dfloorratio{δ_1}{385} \\ d_1 \| = s − 354 a − 30 \dfloorratio{7 a + 2}{19} − \dfloorratio{4 a + 18}{19} \\ \{ m, ε_1 \} \| = \Div(13 d_1 + 389, 384) \\ d \| = \dfloorratio{ε_1}{13} + 1 \end{align}

Bijvoorbeeld, welke dag in deze kalender komt overeen met CJDN 2459787? Then \( J = 2459787 \) en dan

\begin{align*} s \| = J − 1721019 = 2459787 − 1721019 = 738768 \\ α_1 \| = \dfloorratio{19 s + 511}{6940} = \dfloorratio{19×738768 + 511}{6940} \\ \| = \dfloorratio{14037103}{6940} = 2022 \\ δ_1 \| = s − 354 α_1 − 30 \dfloorratio{7 α_1 + 2}{19} − \dfloorratio{4 α_1 + 18}{19} \\ \| = 738768 − 354×2022 − 30 \dfloorratio{7×2022 + 2}{19} − \dfloorratio{4×2022 + 18}{19} \\ \| = 738768 − 715788 − 30 \dfloorratio{14156}{19} − \dfloorratio{8106}{19} \\ \| = 22980 − 30×745 − 426 = 204 \\ a \| = α_1 + \dfloorratio{δ_1}{385} = 2022 + \dfloorratio{204}{385} = 2022 \\ d_1 \| = s − 354 a − 30 \dfloorratio{7 a + 2}{19} − \dfloorratio{4 a + 18}{19} = 204 \\ \{ m, ε_1 \} \| = \Div(13 d_1 + 389, 384) = \Div(13×204 + 389, 384) \\ \| = \Div(3041, 384) = \{ 7, 353 \} \\ d \| = \dfloorratio{ε_1}{13} + 1 = \dfloorratio{353}{13} + 1 = 27 + 1 = 28 \end{align*}

dus de datum is dag 28 van maand 7 van jaar 2022.

Wat meer voorbeelden:

\({ J }\) \({ s }\) \({α_1}\) \({δ_1}\) \({a}\) \({d_1}\) \({m}\) \({ε_1}\) \({d}\)
2459787 738768 2022 204 2022 204 7 353 28
2459936 738917 2023 −1 2022 353 12 370 29
2459937 738918 2023 0 2023 0 1 5 1
2460291 739272 2024 −1 2023 354 12 383 30
2460292 739273 2024 0 2024 0 1 5 1
2460675 739656 2025 −1 2024 383 13 376 29
2460676 739657 2025 0 2025 0 1 5 1
2463214 742195 2032 −1 2031 353 12 370 29
2463215 742196 2032 0 2032 0 1 5 1
2463598 742579 2033 −1 2032 383 13 376 29
2463599 742580 2033 0 2033 0 1 5 1

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

14.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 \( a \):

\begin{align} s \| = \dmod{a + 6}{10} + 1 \label{eq:jnaarchinees} \\ b \| = \dmod{a + 8}{12} + 1 \end{align}

Het nummer \( n \) in de gezamelijke kringloop van 60 jaren is

\begin{equation} n = \dmod{a + 56}{60} + 1 \end{equation}

Bijvoorbeeld, voor het jaar 2000 uit de Gregoriaanse kalender:

\begin{align*} s \| = \dmod{2000 + 6}{10} + 1 = 6 + 1 = 7 \\ b \| = \dmod{2000 + 8}{12} + 1 = 4 + 1 = 5 \\ n \| = \dmod{2000 + 56}{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} a \| ≡ 1983 + s \pmod{10} \\ a \| ≡ 1983 + b \pmod{12} \\ a \| ≡ 1983 + n \pmod{60} \end{align}

De jaren die zowel hemelse stam \( s \) als aardse tak \( b \) hebben zijn

\begin{equation} a ≡ 1983 + 25 b − 24 s \pmod{60} \label{eq:chineesnaarj} \end{equation}

Bijvoorbeeld, voor \( s = 7 \) vinden we

\[ a ≡ 1983 + 7 = 1990 \pmod{10} \]

dus 1990 en elke 10 jaar vroeger of later, dus ook 2000.

Voor \( b = 5 \) vinden we

\[ a ≡ 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

\[ a ≡ 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: \( a ≡ 1983 + 25×6 − 24×3 = 2061 \pmod{60} \), maar als je \( a = 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.

14.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, a_2 \} \| = \Div(a + 67016, 10800) \\ \{ Y − 1, a_3 \} \| = \Div(a_2, 360) \\ \{ S − 1, N − 1 \} \| = \Div(a_3, 30) \end{align}

Bijvoorbeeld, welk HYSN-jaartal komt ongeveer overeen met ons jaar 2016? Dan is

\begin{align*} a \| = 2016 \\ \{ H − 1, a_2 \} \| = \Div(a + 67016. 10000) = \Div(2016 + 67016, 10800) \\ \| = \Div(69032, 10800) = \{ 6, 4232 \} \\ \{ Y − 1, a_3 \} \| = \Div(a_2, 360) = \Div(4232, 360) = \{ 11, 272 \} \\ \{ S − 1, N − 1 \} \| = \Div(a_3, 30) = \Div(272, 30) = \{ 9, 2 \} \end{align*}

dus \( H = 7 \), \( Y = 2 \), \( S = 10 \), \( N = 3 \) en het HYSN-jaartal is 0712-1003.

De andere kant op is eenvoudiger. Gegeven \( H \), \( Y \), \( S \) en \( N \) is het Gregoriaanse jaartal

\begin{equation} a = 1000 H + 360 Y + 30 S + N − 78207 \end{equation}

Bijvoorbeeld, HYSN 0712-1003 betekent

\begin{align*} H \| = 7 \\ Y \| = 12 \\ S \| = 10 \\ N \| = 3 \\ a \| = 7×10800 + 12×360 + 10×30 + 3 − 78207 \\ \| = 75600 + 4320 + 300 + 3 − 78207 = 2016 \end{align*}

15. Afleiding van de algemene algoritmen

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

15.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} \notag \\ \| − 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} \notag \\ \| + 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}

15.2. Grote Tussenresultaten

15.2.1. Inleiding

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

\begin{align} y \| = \dfloorratio{f x + t}{g} \label{eq:template} \\ e \| = \dmod{f x + t}{g} \label{eq:template-e} \end{align}

ofwel

\[ \{y, e\} = \Div(f x + t, g) \]

met

\begin{equation} f x + t = g y + e \end{equation}

waar \( f \), \( t \), \( g \) vaste hele getallen zijn met \( f ≥ 1 \), \( g \gt 1 \), \( 0 ≤ e \lt g \), en \( x \), \( y \) 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 voor computerprogramma's die rekenen met geheugenlocaties waarin hele getallen een groot maar beperkt aantal unieke waarden kunnen hebben. Dat aantal unieke waarden geven we hier aan met \( W \) ("grote W").

Een andere optie is om te rekenen met zogenaamde zwevendekommagetallen, getallen met een aparte mantisse en exponent, zoals 1.234‍e20, die veel grotere (en kleinere) waarden kunnen bevatten dan een heel getal dat in dezelfde geheugenlocatie opgeslagen kan worden, maar de nauwkeurigheid van zwevendekommagetallen is beperkt, dus dan moet je bang zijn voor afrondfouten. Afrondfouten zijn in kalenderberekeningen heel erg, want daarmee kun je zomaar een dag, maand of jaar als uitkomst van de berekeningen krijgen die eentje te klein of te groot is, wat waarschijnlijk niet opvalt.

Daarom gaan wij uit van berekeningen die alleen hele getallen gebruiken. Dan kun je geen afrondfouten krijgen, maar wel "overloopproblemen" als een (tussen)resultaat zo groot is dan het buiten de verzameling van \( W \) unieke waarden valt.

In vrijwel alle moderne computersystemen is \( W \) een macht van 256, dat zelf een macht is van 2. Als \( W = 2^n \) dan wordt \( n \) het aantal bits genoemd. Een 32-bitsgetal kan \( 2^{32} = 4294967296 \) unieke waarden uitdrukken. Die unieke waarden lopen dan meestal van \( −W/2 = −2^{31} = −2147483648 \) tot en met \( W/2 − 1 = +2^{31} − 1 = +2147483647 \). Hier noemen we de grootste absolute waarde die zowel positieve als negatieve hele getallen mogen hebben \( w \) ("kleine w"). Dus zowel \( +w \) als \( −w \) passen, maar \( +(w + 1) \) en \( −(w + 1) \) passen niet allebei. Voor het meestgebruikte type 32-bitsgetallen is \( w = W/2 − 1 = 2147483647 \). Wij gaan hieronder uit van zulke 32-bitsgetallen.

Dan moet het tussenresultaat \( f x + t \) wat grootte betreft kleiner blijven dan \( w \), dus om problemen te voorkomen moet ongeveer \( \dabs{x} ≤ w/f \) zijn, wat veel kleiner is dan \( w \).

De hieronder beschreven methoden om toch (bijna) \( W \) dagen aan te kunnen in plaats van \( W/f \) zijn wiskundig gelijk aan formule \eqref{eq:template} maar nemen meer rekenstappen, dus meer rekentijd.

Tegenwoordig zijn ook 64-bitsgetallen breed beschikbaar. Daarvoor zijn \( w \) en \( W \) zoveel groter dan voor 32-bitsgetallen dat kalenderberekeningen in de praktijk geen last hebben van overloopproblemen. Bijvoorbeeld, we komen later een toepassing van formule \eqref{eq:template} tegen waarvoor met 32-bitsgetallen overloopproblemen alleen kunnen worden voorkomen voor een periode van ongeveer 450 jaar. Dat is een wel heel lastig geval. Met 64-bitsgetallen wordt die grens ruim 4 miljard keer groter, ongeveer 1933 miljard jaar. Dat is ongeveer 140 keer langer dan de leeftijd van het Heelal.

64-bitsgetallen nemen tweemaal zoveel geheugenruimte in als 32-bitsgetallen, maar als je met 64-bitsgetallen het resultaat hebt uitgerekend dan kun je dat resultaat opslaan in een 32-bitsgeheugenlocatie. Daarmee kun je een periode van bijna 12 miljoen jaar aan (overeenkomend met \( W \) dagen).

Ik schreef een testprogramma (in C++, met optimalisatie) dat formule \eqref{eq:template} gebruikt voor 64-bitsgetallen, en ook de meest toepasselijke omweg gebruikt die met meer rekenstappen voor 32-bitsgetallen werkt. Dat programma berekent voor alle lopende maandnummers van 0 tot 70 miljoen wat het lopende dagnummer van de 10e dag in die maand is, en dan voor elk van die lopende dagnummers welk maandnummer en dagnummer binnen de maand daarbij horen. De berekeningen met 32-bitsgetallen en de omweg namen ongeveer 2,1 maal zoveel rekentijd als de berekeningen met 64-bitsgetallen zonder omweg. Dat wil niet zeggen dat kalenderberekeningen met 64-bitsgetallen op elk computersysteem sneller zullen zijn dan die met 32-bitsgetallen, maar wel dat het de moeite waard is om naar 64-bitsgetallen te kijken, als die beschikbaar zijn.

Op bijna alle moderne computersystemen werkt "overloop" van hele getallen zo dat een waarde die net groter zou zijn dan de grootste passende waarde wordt uitgedrukt als een waarde die net groter is dan de kleinste (meest negatieve) passende waarde, net alsof de verzameling passende getallen zich steeds herhaalt. Dat heeft als voordeel dat de "foute" overgelopen waarde heel anders is dan de goede waarde (die niet past), zodat het probleem veel meer opvalt dan bij een afrondfout het geval zou zijn.

Bijvoorbeeld, als je steeds 1 optelt bij een getal en uiteindelijk de grootste passende positieve 32-bitswaarde 2147483647 bereikt dan krijg je daarna de kleinste (meest negatieve) 32-bitswaarde −2147483648 en dan loopt de waarde daarvandaan weer op, net alsof de verzameling passende waarden zich steeds herhaalt.

Voor de Gregoriaanse kalender komt verderop een berekening voor die ongeveer is als volgt:

\[ m = \dfloorratio{4800 s}{146097} \]

waarin \( s \) een lopend dagnummer is en \( m \) een lopend maandnummer. Het tussenresultaat \( 4800 s \) moet niet groter worden dan \( w \), dus we moeten hebben \( \dabs{s} ≤ w/4800 \), dus de afstand tussen de grootste en kleinste \( s \) is hooguit pakweg \( W/4800 ≈ 894784 \) dagen, wat overeenkomt met ongeveer 2449 jaar ― veel te weinig om praktisch te zijn.

En de andere kant op is de berekening dan zoiets als

\[ s = \dfloorratio{146097 m}{4800} \]

Het tussenresultaat \( 146097 m \) moet passen in de \( W \) unieke waarden dus kan \( m \) hooguit \( W/146097 ≈ 29398 \) maanden ofwel ongeveer 2449 jaren omvatten, net als hierboven. Dat is erg krapjes voor een kalender.

Een derde voorbeeld (uit de Joodse kalender) is

\[ s = \dfloorratio{765433 m}{25920} \]

Hier moet het tussenresultaat \( 765433 m \) passen in de \( W \) unieke waarden, dus kan \( m \) hooguit \( W/765433 ≈ 5611 \) maanden omvatten, dus ongeveer 450 jaren. Dat is veel te weinig voor praktisch gebruik.

Wat zijn de kleinste en grootste waarden van \( x \) waarvoor je \( y \) kunt uitrekenen met bovenstaande formule, als de begin-, eind-, en alle tussenwaarden moeten liggen tussen \( −w \) en \( +w \)? Met \( 𝔏 \) geven we de kleinst toegestane waarde van \( x \) aan, en met \( 𝔘 \) de grootst toegestane waarde van \( x \).

Dan moeten we hebben

\begin{align*} −w \| ≤ x ≤ w \\ −w \| ≤ f x + t ≤ w \\ −w \| ≤ y ≤ w \end{align*}

Uit de tweede eis volgt

\begin{equation} \dceilratio{−w − t}{f} ≤ x ≤ \dfloorratio{w − t}{f} \end{equation}

Uit de derde eis volgt

\begin{align} −w \| ≤ \dfloorratio{f x + t}{g} ≤ w \notag \\ −w \| ≤ \dfrac{f x + t}{g} \lt w + 1 \notag \\ \dfrac{−g w − t}{f} \| ≤ x \lt \dfrac{g w + g − t}{f} \end{align}

Uit alle eisen bij elkaar volgt

\begin{align} 𝔘 \| = \min\left(w, \dfloorratio{w − t}{f}, \dfrac{g w + g − t}{f}\right) \\ 𝔏 \| = \max\left(−w, \dceilratio{−w − t}{f}, \dfrac{−g w − t}{f}\right) \end{align}

Deze formules zijn niet te vereenvoudigen, dus niet zo handig in het gebruik. Daarom nemen we voor de schattingen van het bereik van \( x \) aan dat \( t = 0 \) (want \( t \) is in de praktijk heel veel kleiner dan \( w \)) en doen we net alsof \( x \) geen heel getal hoeft te zijn. Dan vinden we

\begin{align} 𝔘 \| ≈ \min\left(w, \dfrac{w}{f}, \dfrac{g w}{f}\right) = \dfrac{w}{f} \qquad ( g, f ≥ 1 ) \\ 𝔏 \| ≈ \max\left(−w, \dfrac{−w}{f}, \dfrac{−g w}{f}\right) = −𝔘 \end{align}

Hieronder staat een samenvatting van manieren om het bereik van \( x \) groter te maken. Daaronder staat de afleiding van de formules van die manieren.

15.2.2. Samenvatting

We willen berekenen

\begin{align} y \| = \dfloorratio{f x + t}{g} \\ e \| = \dmod{f x + t}{g} \\ \{ y, e \} \| = \Div(f x + t, g) \end{align}

met alleen maar hele getallen, en met \( f \) en \( g \) groter dan 0 in een omgeving waarin alle hele getallen tussen \( −w \) en \( +w \) moeten liggen. Dan moet ongeveer \( \dabs{f x} ≤ w \) zijn, dus \( \dabs{x} ≤ w/f \), wat veel kleiner is dan \( w \) als \( f \gt 1 \). Als je een waarde van \( x \) invult die buiten dat bereik ligt dan geeft het computerprogramma misschien wel een resultaat maar dat resultaat zal dan fout zijn.

Ook \( y \) moet passen, dus we moeten ook hebben dat \( \dabs{y} ≤ w \) dus ongeveer \( (f/g) \dabs{x} ≤ w \) dus \( \dabs{x} ≤ gw/f \). Die limiet is nooit lager dan de \( w/f \) die we eerder vonden, dus de gezamenlijke limiet op \( x \) is \( w/f \).

Je kunt als volgt de formules onschrijven zodat ze voor een groter bereik van \( x \) werken.

  1. Als \( f \gt g \):

    \begin{align} \{ f_1, f_0 \} \| = \Div(f, g) \\ \{ t_1, t_0 \} \| = \Div(t, g) \\ \{ \omega, e \} \| = \Div(f_0 x + t_0, g) \\ y \| = f_1 x + t_1 + ω \end{align}

    Dat is bruikbaar als ongeveer \( \dabs{x} ≤ w \min(1/\dmod{f}{g}, g/f) \). Als \( g \dmod{f}{g} \lt f \) dan is de grens op \( x \) ongeveer \( \dabs{x} ≤ w g/f \) wat het hoogst haalbare is. Als \( g \dmod{f}{g} \gt f \) dan moet ongeveer \( \dabs{x} ≤ w/\dmod{f}{g} \gt w/f \).

  2. Als \( g\dmod{f}{g} ≤ w \):

    \begin{align} \{ f_1, f_0 \} \| = \Div(f, g) \\ \{ t_1, t_0 \} \| = \Div(t, g) \\ \{ x_1, x_0 \} \| = \Div(x, g) \\ \{ ω, e \} \| = \Div(f_0 x_0 + t_0, g) \\ y \| = f_1 x + f_0 x_1 + ω + t_1 \end{align}

    Dan moet ongeveer \( \dabs{x} ≤ w \min(g/f, 1) \), wat het hoogst haalbare is voor elke methode.

  3. Als \( g\dmod{f}{g} \gt w \):

    Als je geschikte \( \{ P, Q, R \} \) hebt (zie verderop voor hoe je die vindt) dan

    \begin{align} \{ f_1, f_0 \} \| = \Div(f, g) \\ \{ t_1, t_0 \} \| = \Div(t, g) \\ \{ x_1, x_0 \} \| = \Div(x, P) \\ \{ ω, e \} \| = \Div(x_1 R + f_0 x_0 + t_0, g) \\ y \| = f_1 x + x_1 Q + t_1 + ω \end{align}

    Dat werkt als ongeveer \( \dabs{x} ≤ w \min(g/f, 1) \) en geen enkele methode kan het beter doen.

    We zoeken geschikte \( \{ P, Q, R \} \) voor onze kalenderformule. Dat hoeven we voor elk zulke kalenderformule (en \( w \)) maar eenmaal te doen. Let op: Misschien zijn voor sommige \( f \), \( g \) en \( w \) geen geschikte \( \{ P, Q, R \} \) te vinden.

    Gebruik het Uitgebreide Algoritme van Euclides om een oplossing te vinden voor \( x \), \( y \), \( R_1 \) in

    \begin{equation} f_0 x + g y = R_1 = \gcd(f_0, g ) \end{equation}

    Dan

    \begin{align} P_1 \| = \dmod{x}{(g/R_1)} \\ Q_1 \| = \dmod{−y}{(f_0/R_1)} \\ P_\text{max} \| = \dfloorratio{w}{f_0} \\ n_* \| = \dceilratio{W}{f_0 P_1} \\ m_P \| = n_* \dfrac{g}{R_1} \\ m_Q \| = n_* \dfrac{f_0}{R_1} \end{align}

    Er zijn nu \( m_P − 1 \) combinaties van \( \{ P, Q, R \} \) die geschikt zouden kunnen zijn:

    \begin{align} P \| = \dmod{n P_1}{m_P} \\ \{ ρ, R \} \| = \Div(n R_1, g) \\ Q \| = \dmod{n Q_1 + ρ}{m_Q} \end{align}

    voor \( n \) van 1 tot en met \( m_P − 1 \). Zo'n combinatie \( \{ P, Q, R \} \) is geschikt als \( 0 \lt R ≤ P ≤ P_\text{max} \).

    Als je niet alle geschikte combinaties hoeft te vinden maar al tevreden bent met eentje dan kun je de zoektocht verkorten door als volgt te werk te gaan. Stop zodra je een geschikte combinatie hebt gevonden.

    1. Zoek voor \( j \) van 1 tot en met \( (g/R_1) − 1 \).

    2. Voor elke \( j \), zoek voor \( k \) van 0 tot en met \( n_* − 1 \).

    3. Bereken

      \begin{align} P \| = \dmod{j P_1 + k \dmod{P_1}{n_*} \dfrac{g}{R_1}}{m_P} \\ \{ ρ, R \} \| = \Div(j R_1, g) \\ Q \| = \dmod{n Q_1 + ρ + k}{m_Q} \end{align}

      (Deze formules komen overeen met de eerdere formules gebaseerd op \( n \), als je \( n = j + k (g/R_1) \) neemt.)

    4. Als \( 0 \lt R ≤ P ≤ P_\text{max} \) dan heb je een geschikte combinatie van \( \{ P, Q, R \} \) gevonden.

Voorbeeld 1: \( f = 4800 \), \( g = 146097 \). Hiervoor is methode nummer 2 van toepassing, want \( g\dmod{f}{g} = 146097×\dmod{4800}{146097} = 146097×4800 = 701265600 ≈ 0.33 w ≤ w \).

Stel \( x = w = 2147483647 \). Dan is de gezochte uitkomst

\begin{align*} y \| = \dfloorratio{f x + t}{g} = \dfloorratio{4800×2147483647}{146097} \\ \| = \dfloorratio{10307921505600}{146097} = 70555326 \end{align*}

dus de invoer en het eindresultaat zijn klein genoeg voor een 32-bitsgetal, maar het grootste tussenresultaat is 10'307'921'505'600, wat véél groter is dan \( w \), dus deze berekening kan niet zo met 32-bitsgetallen. In plaats daarvan doen we

\begin{align*} \{ f_1, f_0 \} \| = \Div(f, g) = \Div(4800, 146097) = \{ 0, 4800 \} \\ \{ x_1, x_0 \} \| = \Div(x, g) = \Div(2147483647, 146097) = \{ 14699, 3844 \} \\ \{ ω, e \} \| = \Div(f_0 x_0 + t_0, g) = \Div(4800×3844, 146097) \\ \| = \Div(18451200, 146097) = \{ 126, 42978 \} \\ y \| = f_1 x + f_0 x_1 + ω + t_1 = 0 + 4800×14699 + 126 + 0 = 70555326 \end{align*}

dus met dezelfde uitkomst maar nu is het grootste tussenresultaat 70'555'326 wat klein genoeg is voor een 32-bitsgetal.

De limiet op \( x \) is dan ongeveer \( \dabs{x} ≤ w \min(1/f_1, g/f_0, 1) = w \), want hier is \( f_1 = 0 \) en \( g \gt f_0 = f \).

Voorbeeld 2: \( f = 146097 \), \( g = 4800 \). Hiervoor zijn methoden nummer 1 en 2 van toepassing, want \( f ≥ g \) en \( g\dmod{f}{g} = 4800×\dmod{146097}{4800} = 4800×2097 = 10065600 ≈ 0.0047 w ≤ w \).

Als je tevreden bent met een limiet op \( x \) ter grootte van

\begin{align*} \| w \min\left( \dfrac{1}{\dmod{f}{g}}, \dfrac{g}{f} \right) \\ \| = w \min\left( \dfrac{1}{\dmod{146097}{4800}}, \dfrac{4800}{146097} \right) \\ \| ≈ w \min\left( \dfrac{1}{2097}, 0.0329 \right) \\ \| ≈ w \min\left( 0.00047687, 0.032855 \right) \\ \| ≈ 0.00047687 w ≈ 1024074 \end{align*}

dan kun je methode nummer 1 gebruiken.

Stel \( x = 1024074 \). Dan is de gezochte uitkomst

\begin{align*} y \| = \dfloorratio{fx + t}{g} = \dfloorratio{146097×1024074 + 0}{4800} \\ \| = \dfloorratio{149614139178}{4800} = 31169612 \end{align*}

Die invoerwaarde en uitkomst zijn klein genoeg voor een 32-bitsgetal maar het tussenresultaat 149'614'139'178 is veel groter dan \( w \). In plaats daarvan doen we

\begin{align*} \{ f_1, f_0 \} \| = \Div(f, g) = \Div(146097, 4800) = \{ 30, 2097 \} \\ \{ t_1, t_0 \} \| = \Div(t, g) = \Div(0, 4800) = \{ 0, 0 \} \\ y \| = f_1 x + t_1 + \dfloorratio{f_0 x + t_0}{g} = 30×1024074 + 0 + \dfloorratio{2097×1024074 + 0}{4800} \\ \| = 30722220 + \dfloorratio{2147483178}{4800} = 30722220 + 447392 = 31169612 \end{align*}

dus met dezelfde uitkomst maar nu is het grootste tussenresultaat 2'147'483'178 wat net klein genoeg is voor een 32-bitsgetal.

Als je een hogere limiet op \( x \) wilt hebben dan kun je methode 2 gebruiken.

Voorbeeld 3: \( f = 25920 \), \( g = 765433 \). Hiervoor is alleen methode 3 geschikt, want \( g\dmod{f}{g} = 765433 \dmod{25920}{765433} = 765433×25920 = 19840023360 ≈ 9.2 w \) en dat is groter dan \( w \).

\begin{align*} \{ f_1, f_0 \} \| = \Div(f, g) = \Div(25920, 765433) = \{ 0, 25920 \} \\ \{ t_1, t_0 \} \| = \Div(t, g) = \Div(0, 765433) = \{ 0, 0 \} \end{align*}

We zoeken bruikbare \( \{ P, Q, R \} \). Eerst passen we het Uitgebreide Algoritme van Euclides toe om een oplossing voor \( x \), \( y \) en \( R_1 \) te vinden van \( f_0 x + g y = R_1 = \gcd(f_0, g ) \), dus van \( 25920 x + 765433 y = R_1 \). We vinden \( 25920×99902 − 765433×3383 = 1 \). Dan

\begin{align*} P_1 \| = \dmod{x}{(g/R_1)} = \dmod{99902}{765433} = 99902 \\ Q_1 \| = \dmod{−y}{(f_0/R_1)} = \dmod{3383}{25920} = 3383 \\ P_\text{max} \| = \dfloorratio{w}{f_0} = \dfloorratio{2147483647}{25920} = 82850 \\ n_* \| = \dceilratio{w}{f_0 P_1} = \dfloorratio{2147483647}{25920×99902} = 1 \\ m_P \| = n_* \dfrac{g}{R_1} = 765433 \\ m_Q \| = n_* \dfrac{f_0}{R_1} = 25920 \end{align*}

We hoeven niet alle bruikbare combinaties \( \{ P, Q, R \} \) te weten, dus zijn tevreden met de eerste die goed is. We beginnen te zoeken bij \( j = 1 \). Omdat \( n_* = 1 \) is altijd \( k = 0 \) en \( n = j \). Dan

\begin{align*} P \| = \dmod{j P_1}{m_P} = \dmod{99902 j}{765433} \\ \{ ρ, R \} \| = \Div(j R_1, g) = \Div(j, 25920) \\ Q \| = \dmod{j Q_1 + ρ}{m_Q} = \dmod{3383 j + ρ}{25920} \end{align*}

We vinden

\({j}\) \({P}\) \({Q}\) \({R}\) \({P/R}\) \({P/P_\text{max}}\)
1 99902 3383 1 99902 1.21
2 199804 6766 2 99902 2.41
3 299706 10149 3 99902 3.62
4 399608 13532 4 99902 4.82
5 499510 16915 5 99902 6.03
6 599412 20298 6 99902 7.23
7 699314 23681 7 99902 8.44
8 33783 1144 8 4222.9 0.41

dus de kleinste \( j \) waarvoor we \( 0 \lt R ≤ P ≤ P_\text{max} \) vinden is \( j = 8 \). En dan \( P = 33783 \), \( Q = 1141 \), \( R = 8 \).

Stel \( x = w = 2147483647 \). Dan is de gezochte uitkomst

\begin{align*} y \| = \dfloorratio{f x + t}{g} = \dfloorratio{25920×2147483647 + 0}{765433} \\ \| = \dfloorratio{55662776130240}{765433} = 72720638 \end{align*}

Die invoerwaarde en uitkomst zijn klein genoeg voor een 32-bitsgetal maar het tussenresultaat 55'662'776'130'240 is daarvoor véél te groot. In plaats daarvan doen we

\begin{align*} \{ x_1, x_0 \} \| = \Div(x, P) = \Div(2147483647, 33783) = \{ 63566, 33469 \} \\ \{ ω, e \} \| = \Div(x_1 R + f_0 x_0 + t_0, g) = \Div(63566×8 + 25920×33469 + 0, 765433) \\ \| = \Div(868025008, 765433) = \{ 1134, 23986 \} \\ \| y = f_1 x + x_1 Q + t_1 + ω = 0 + 63566×1144 + 0 + 1134 = 72720638 \end{align*}

dus met dezelfde uitkomst maar nu is het grootste tussenresultaat 868'025'008 wat klein genoeg is voor een 32-bitsgetal.

15.2.3. Ware limieten

Voor het schatten van de limiet op \( x \) hebben we hierboven aangenomen dat \( t = 0 \) en dat de tussenresultaten geen hele getallen hoeven te zijn, waardoor de onderlimiet \( 𝔏 \) even groot (maar met een minteken) is als de bovenlimiet \( 𝔘 \), maar in de praktijk kloppen die aannames (bijna) nooit, dus de geschatte limieten op \( x \) zullen vaak wel ongeveer maar niet helemaal kloppen. En voor de meeste kalenders zijn er meerdere berekeningen met formules zoals formule \eqref{eq:template} nodig met elk hun eigen waarden voor \( f, g, t \), die op een ingewikkelde manier doorwerken op de gezamenlijke limieten op de invoerwaarden. Hoe vinden we de ware limieten?

De berekeningen voor elke kalender gaan meestal tussen een datum (vaak jaar \( a \), maand \( m \), dag \( d \)) en een doorlopend dagnummer \( J \), of andersom. We kunnen die berekeningen schematisch aangeven als volgt

\begin{eqnarray} \| J = D(\{ a, m, d \}) \\ \| \{ a, m, d \} = U(J) \end{eqnarray}

Als je eerst de berekening de ene kant op doet en meteen daarna in de omgekeerde richting dan zou je weer de waarde moeten krijgen waar je mee begon. Je wilt dat

\begin{eqnarray} \| D(U(J)) = J \\ \| U(D(\{ a, m, d \})) = \{ a, m, d \} \end{eqnarray}

Maar als je een datum of lopend dagnummer invult dat buiten het bereik van de kalenderberekeningen valt (zodat tenminste één tussenresultaat niet in het gekozen geheugentype past) dan zal aan tenminste een van bovenstaande gelijkheden niet voldaan zijn.

Je kunt de limieten vinden door te beginnen met een datum of lopend dagnummer \( J_0 \) waarvan je zeker weet dat daarvoor de tussenresultaten klein genoeg zijn, en dan vanaf daar omhoog of omlaag te gaan tot niet meer voldaan is aan tenminste een van de voorwaarden. Dag 1 van maand 1 van jaar 1 in de kalender is meestal een geschikte begindatum.

Dat omhoog en omlaag gaan is voor veel kalenders lastig om te doen aan de hand van de datum. Welke datum volgt er na \( \{ a, m, d \} \)? Dat is meestal \( \{ a, m, d + 1 \} \), behalve aan het eind van de maand, want dan is de volgende dag \( \{ a, m + 1, 1 \} \) of misschien wel \( \{ a + 1, 1, 1 \} \), en het kan nog ingewikkelder. De berekeningen om te bepalen of het einde van de maand en het jaar al bereikt zijn kunnen zo ingewikkeld zijn dat je daarbij tussenresultaten kunt krijgen die te groot zijn voor het gekozen geheugentype. Dan zou je ten onrechte geldige datums kunnen overslaan, of juist ongeldige datums kunnen meerekenen en dan misschien daarom de verkeerde waarde voor de limieten kunnen vinden.

En net zo als je omlaag gaat naar eerdere datums. Welke datum komt er voor \( \{ a, m, 1 \} \)? Dan moet je weten hoeveel dagen de voorgaande maand heeft, en dat kan ook een ingewikkelde berekening zijn met misschien te grote tussenresultaten.

Het is daarom veel gemakkelijker om omhoog en omlaag te gaan aan de hand van het lopende dagnummer, want elk lopende dagnummer is geldig en elke geldige datum heeft zo'n lopend dagnummer.

Het bereik van de kalenderberekeningen loopt van lopende dagnummer \( 𝔏 \) tot en met lopende dagnummer \( 𝔘 \). Die onder- en bovengrens zijn gedefinieerd door

\begin{eqnarray} D(U(J)) \| = J \| \qquad (𝔏 ≤ J ≤ 𝔘) \\ D(U(𝔏 − 1)) \| ≠ 𝔏 − 1 \\ D(U(𝔘 + 1)) \| ≠ 𝔘 + 1 \\ 𝔏 \| ≤ J_0 \\ 𝔘 \| ≥ J_0 \end{eqnarray}

plus de eis dat \( U(J) \) voor alle \( 𝔏 ≤ J ≤ 𝔘 \) de juiste, geldige datum moet zijn. Maar die laatste eis is lastig te controleren, vooral in de buurt van die limieten, voor dezelfde reden dat het vinden van de datum van de volgende of vorige dag lastig kan zijn.

Je zou graag die limieten vinden zonder dat je alle \( J \) tussen die limieten hoeft te controleren. Liever zou je eerst in grote stappen vanaf \( J_0 \) naar hogere \( J \) gaan tot het mis gaat, en dan in steeds kleinere stapjes tussen de grootste goede en kleinste slechte \( J \) gaan tot je de bovenlimiet gevonden hebt, en net zo voor de onderlimiet. Maar dan moet je er rekening mee houden dat er een kans is dat ook voor sommige \( J \) die buiten de limieten liggen toch \( D(U(J)) = J \) zou kunnen zijn. Als je tijdens je grote stappen op zoek naar de limiet toevallig op zo'n \( J \) terechtkomt dan zul je ten onrechte denken dat je de limiet nog niet bereikt hebt.

De oplossing voor deze moeilijkheden is om de berekeningen te doen niet alleen voor de \( w \) waarvoor je de limieten wilt weten maar ook voor een veel grotere \( w \), dus bijvoorbeeld met zowel 32-bitsgetallen als 64-bitsgetallen. Dan kun je een foute of ongeldige datum eraan herkennen dat de datum berekend met 32-bitsgetallen anders is dan de datum berekend met 64-bitsgetallen. Met die controle erbij is de kans dat je na een grote stap ten onrechte besluit dat je nog binnen de limieten zit heel veel kleiner.

15.2.4. Afleiding van de formules

Als \( f \) en misschien ook \( \dabs{t} \) groter of gelijk zijn aan\( g \) dan kunnen we formules \eqref{eq:template}ff omschrijven naar

\begin{align} \{ f_1, f_0 \} \| = \Div(f, g) \\ \{ t_1, t_0 \} \| = \Div(t, g) \\ f x + t \| = \dparen{f_1 g + f_0}x + t_1 g + t_0 \eqavide{eq:mod} \\ y \| = f_1 x + t_1 + \dfloorratio{f_0 x + t_0}{g} \\ e \| = \dmod{f_0 x + t_0}{g} \eqavide{eq:modmod} \end{align}

ofwel

\begin{align} \{ f_1, f_0 \} \| = \Div(f, g) \\ \{ t_1, t_0 \} \| = \Div(t, g) \\ \{ ω, e \} \| = \Div(f_0 x + t_0, g) \label{eq:template2} \\ y \| = f_1 x + ω + t_1 \end{align}

We moeten hebben \( \dabs{f_0 x} = \dmod{f}{g} \dabs{x} ≤ w \), en \( \dabs{f_1 x} = \dfloor{f/g} \dabs{x} ≈ f \dabs{x}/g ≤ w \), dus de grens op \( x \) is ongeveer \( \dabs{x} ≤ w \min(1/\dmod{f}{g}, g/f) \), en dat is groter dan \( w/f \). Als \( g \dmod{f}{g} \lt f \) dan is de grens op \( x \) ongeveer \( \dabs{x} ≤ w g/f \) en dat is het hoogst haalbare voor elke methode.

Voor het eerste voorbeeld (van \( s \) naar \( m \)) is hier geen voordeel te halen want daar is \( f \) al kleiner dan \( g \).

Voor het tweede voorbeeld (van \( m \) naar \( s \)) vinden we

\begin{align*} \{ f_1, f_0 \} \| = \Div(146097, 4800) = \{ 30, 2097 \} \\ \{ t_1, t_0 \} \| = \Div(0, 4800) = \{ 0, 0 \} \\ \{ ω, e \} \| = \Div(2097m, 4800) \\ s \| = 30m + ω \end{align*}

Dan is de grens op \( x \) ongeveer \( \dabs{x} ≤ w \min(1/30, 1/2097) = w/2097 ≈ 1024074 \) maanden, wat overeenkomt met ongeveer 85339 jaar. Dat is ruim genoeg.

Voor het derde voorbeeld is hier geen voordeel te halen.

We kunnen ook \( x \) splitsen in een veelvoud van \( g \) plus de rest. Dan vinden we

\begin{align} \{ x_1, x_0 \} \| = \Div(x, g) \\ fx + t \| = \dparen{f_1 g + f_0} \dparen{x_1 g + x_0} + t_1 g + t_0 \\ y \| = f_1 x + f_0 x_1 + t_1 + \dfloorratio{f_0 x_0 + t_0}{g} \\ e \| = \dmod{f_0 x_0 + t_0}{g} \end{align}

ofwel

\begin{align} \{ x_1, x_0 \} \| = \Div(x, g) \\ \{ ω, e \} \| = \Div(f_0 x_0 + t_0, g) \label{eq:template3} \\ y \| = f_1 x + f_0 x_1 + ω + t_1 \end{align}

Dan kan de teller van de deling bijna de waarde \( g \dmod{f}{g} \) halen, dus deze methode is alleen te gebruiken als \( d \dmod{f}{g} ≤ w \). We moeten dan hebben \( \dabs{f_1 x} = \dfloor{f/g} \dabs{x} ≈ f \dabs{x}/g ≤ w \), en ook \( \dabs{f_0 x_1} = \dmod{f}{g} \dabs{\dfloor{x/g}} ≈ (\dabs{x}/g) \dmod{f}{g} ≤ w \), dus de grens op \( x \) is ongeveer \( \dabs{x} ≤ w \min(g/\dmod{f}{g}, g/f, 1) = w \min(g/f, 1) \), en dat is het hoogste wat je kunt halen met elke methode.

Voor het eerste voorbeeld vinden we van \( s \) naar \( m \)

\begin{align*} \{ s_1, s_0 \} \| = \Div(s, 146097) \\ \{ f_1, f_0 \} \| = \Div(4800, 146097) = \{ 0, 4800 \} \\ \{ ω, e \} \| = \Div(4800s_0, 146097) \\ m \| = 4800s_1 + ω \end{align*}

Deze methode is bruikbaar hier omdat \( g \dmod{f}{g} = g f_0 = 146097×4800 = 701265600 ≈ 0.33 w \lt w \).

Dan mag \( s \) elke waarde hebben die in een 32-bitsgeheugenlocatie past. Bijvoorbeeld, als \( s = w = 2147483647 \) dan

\begin{align*} \{ s_1, s_0 \} \| = \Div(2147483647, 146097) = \{ 14699, 3844 \} \\ \{ ω, e \} \| = \Div(4800×3844, 146097) = \Div(18451200, 146097) = \{ 126, 42978 \} \\ m \| = 4800×14699 + 126 = 70555326 \end{align*}

De grootste waarde die in bovenstaande berekeningen voorkomt is de beginwaarde 2'147'483'647 en die is niet groter dan \( w \).

Als we willekeurige grote tussenresultaten aankunnen dan hadden we zonder omwegen kunnen berekenen

\begin{align*} \{ m, e \} \| = \Div(4800s, 146097) = \Div(4800×2147483647, 146097) \\ \| = \Div(10307921505600, 146097) = \{ 70555326, 42978 \} \end{align*}

dus dezelfde resultaten als hierboven, maar met een tussenresultaat dat véél groter is dan \( w \).

Voor het tweede voorbeeld, van \( m \) naar \( s \), vinden we

\[ g \dmod{f}{g} = 4800×2097 = 10065600 ≈ 0.0047 w \lt w \]

dus deze methode is bruikbaar.

\begin{align*} \{ m_1, m_0 \} \| = \Div(m, 4800) \\ \{ f_1, f_0 \} \| = \Div(146097, 4800) = \{ 30, 2097 \} \\ \{ ω, e \} \| = \Div(2097 m_0, 4800) \\ s \| = 30 m + 2097 m_1 + ω \end{align*}

en dan is niet meer het maandnummer maar het dagnummer de beperkende factor. \( s \) kan niet groter zijn dan \( w \) dus kan \( m \) niet groter zijn dan de 70'555'326 die we hierboven vonden. Voor die \( m \) vinden we

\begin{align*} \{ m_1, m_0 \} \| = \Div(70555326, 4800) = \{ 14699, 126 \} \\ \{ ω, e \} \| = \Div(2097×126, 4800) = \Div(264222, 4800) = \{ 55, 222 \} \\ s \| = 30×70555326 + 2097×14699 + 55 \\ \| = 2116659780 + 30823803 + 55 = 2147483638 \end{align*}

dus net minder dan \( w \), zoals verwacht. De grootste waarde die voorkwam in deze berekeningen is de eindwaarde en die is kleiner dan \( w \).

Voor het derde voorbeeld is hier geen verbetering te halen omdat \( m \) een bovenlimiet had van 82850 en dat is minder dan \( g = 765433 \). We kunnen wel de formules opstellen:

\begin{align*} \{ m_1, m_0 \} \| = \Div(m, 765433) \\ \{ ω, e \} \| = \Div(2592 0m_0, 765433) \\ s \| = 25920m_1 + ω \end{align*}

maar hier kan \( m_0 \) een waarde tot en met 765432 hebben, en dan is het tussenresultaat \( 25920 m_0 = 25920×765432 = 19839997440 ≈ 9.3 w \gt w \), dus hebben we nog steeds hetzelfde probleem als met de originele formules.

Als \( g\dmod{f}{g} \gt w \) dan moeten we iets anders proberen. Stel we kiezen een heel getal \( P \gt 1 \) en berekenen daarmee eenmalig

\begin{align} \{ Q, R \} \| = \Div(f_0 P, g) \label{eq:PQR} \\ Q \| = \dfloorratio{f_0 P}{g} \\ R \| = \dmod{f_0 P}{g} \end{align}

waarmee

\begin{equation} f_0 P = g Q + R \end{equation}

Bepaal dan voor elke gewenste \( x \)

\begin{align} \{ x_1, x_0 \} \| = \Div(x, P) \\ x_1 \| = \dfloorratio{x}{P} \\ x_0 \| = \dmod{x}{P} \end{align}

zodat

\begin{equation} x = x_1 P + x_0 \end{equation}

en dan

\begin{align} f x + t \| = (f_1 g + f_0)x + t_1 g + t_0 \notag \\ \| = (f_1 g + f_0)(x_1 P + x_0) + t_1 g + t_0 \notag \\ \| = f_1 g x_1 P + f_0 x_1 P + f_1 g x_0 + f_0 x_0 + t_1 g + t_0 \notag \\ \| = f_1 g x_1 P + x_1 (g Q + R) + f_1 g x_0 + f_0 x_0 + t_1 g + t_0 \notag \\ \| = f_1 g x_1 P + x_1 g Q + x_1 R + f_1 g x_0 + f_0 x_0 + t_1 g + t_0 \\ y \| = \dfloorratio{f x + t}{g} = f_1 x_1 P + x_1 Q + f_1 x_0 + t_1 + \dfloorratio{x_1 R + f_0 x_0 + t_0}{g} \notag \\ \| = f_1 x + x_1 Q + t_1 + \dfloorratio{x_1 R + f_0 x_0 + t_0}{g} \\ e \| = \dmod{f x + t}{g} = \dmod{x_1 R + f_0 x_0 + t_0}{g} \end{align}

De absolute waarden van \( x_1 R = \dfloor{x/P} R ≈ x R/P \) en \( f_0 x_0 = f_0 \dmod{x}{P} \lt f_0 P \) en \( f_1 x = \dfloor{f}{g} x ≈ f x/g \) en \( x_1 Q = \dfloor{x}{P} Q ≈ x Q/P \) mogen hooguit \( w \) zijn, dus de grens op \( x \) is \( \dabs{x} ≤ w \min(P/R, g/f, P/Q, 1) \) en bovendien moet \( f_0 P ≤ w \) zijn.

Als \( R = 0 \) dan is \( f \) een veelvoud van \( g \), dus \( g\dmod{f}{g} = 0 \), dus dan kunnen we de methode van het vorige hoofdstuk gebruiken. We nemen daarom aan dat hier \( R ≠ 0 \).

Als \( P = 1 \) dan krijgen we weer de formules \eqref{eq:template2}ff maar dan omslachtiger, vandaar dat we dat geval hier uitsluiten.

Het grootste bereik van \( x \) dat je met elke methode kunt hopen te bereiken is \( W \min(g/f, 1) \). Dat krijgen we met de huidige methode voor elkaar als \( P ≥ R \) en \( P ≥ Q \).

Aan die laatste eis is altijd voldaan want

\begin{align*} f_0 P \| = g Q + R \\ P \| = \dfrac{g}{f_0} Q + \dfrac{R}{f_0} \end{align*}

en \( f_0 = \dmod{f}{g} \lt g \), dus \( P \gt Q \).

Omdat \( f_0 P ≤ w \) moet zijn moet ook \( P ≤ P_\text{max} \) zijn, met

\begin{equation} P_\text{max} ≜ \dfloorratio{w}{f_0} \end{equation}

dus we hoeven alleen te kijken naar \( R ≤ P ≤ P_\text{max} \).

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

\begin{equation} R = R_1 ≡ \gcd(f_0, g) \end{equation}

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

\begin{equation} f_0 x + g y = R_1 \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_0\dparen{x + k\dfrac{g}{R}} + g\dparen{y − k\dfrac{f_0}{R}} = R \end{equation}

Omdat \( R \) een deler is van \( g \) en ook van \( f_0 \) 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{g}{R} \\ Q \| = −y + k\dfrac{f_0}{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}{(g/R_1)} \\ Q_1 \| = \dmod{−y}{(f_0/R_1)} \end{align}

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

\begin{equation} \dfloorratio{f_0P_1}{g} = \dfloorratio{dQ_1 + R_1}{g} = Q_1 + \dfloorratio{R_1}{g} = Q_1 \end{equation}

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

Als \( P_1 ≥ R_1 \) dan hebben we hiermee al geschikte \( \{ P, Q, R \} \) gevonden. Er zijn meestal nog meer goede combinaties van \( \{ P, Q, R \} \). Als je die allemaal wilt vinden dan kan dat als volgt.

Als \( P_1 \), \( Q_1 \) en \( R_1 \) bij elkaar horen, dan horen ook \( n P_1 \), \( n Q_1 \) en \( n R_1 \) bij elkaar, maar \( \{ n P_1, n Q_1, n R_1 \} \) is precies even geschikt of ongeschikt als \( \{ P_1, Q_1, R_1 \} \).

Als \( P \) en \( Q \) bij \( R \) horen dan horen ook \( P + k g/R_1 \) en \( Q + kf_0/R_1 \) voor willekeurige hele \( k \) bij diezelfde \( R \), want

\begin{align} f_0 \dparen{P + k\dfrac{g}{R_1}} − g \dparen{Q + k\dfrac{f_0}{R_1}} \notag \\ = f_0 P − g Q + k\dfrac{f_0 g}{R_1} − k \dfrac{f_0 g}{R_1} \notag \\ = f_0 P − g Q = R \end{align}

dus we kunnen een willekeurig veelvoud van \( g/R_1 \) bij \( P \) optellen als we het overeenkomstige veelvoud van \( f_0/R_1 \) bij \( Q \) optellen, en dan horen die nieuwe \( P \) en \( Q \) bij dezelfde \( R \) als de oude \( P \) en \( Q \). Dat suggereert zoiets als \( P = \dmod{n P_1}{(g/R_1)} \), maar dat blijft altijd kleiner dan \( g/R_1 \) terwijl ook mogelijk grotere \( P \) tot aan \( w/f_0 \) interessant kunnen zijn. Daarom nemen we

\begin{align} P \| = \dmod{n P_1}{m_P} \\ m_P \| ≜ \dfrac{g n_*}{R_1} \\ m_Q \| ≜ \dfrac{f_0 n_*}{R_1} \\ n_* \| ≜ \dceilratio{w}{f_0 P_1} \end{align}

dan is

\begin{align} P \| = \dmod{n P_1}{m_P} \\ f_0 P \| = f_0 \dmod{n P_1}{m_P} = f_0 m_P \dmod{\dfrac{n P_1}{m_P}}{1} \notag \\ \| = g m_Q \dmod{\dfrac{n f_0 P_1}{f_0 m_P}}{1} = g m_Q \dmod{\dfrac{n \dparen{g Q_1 + R_1}}{g m_Q}}{1} \notag \\ \| = g m_Q \dmod{\dfrac{n \dparen{Q_1 + \dfrac{R_1}{g}}}{m_Q}}{1} = g \dmod{n Q_1 + \dfrac{n R_1}{g}}{m_Q} \\ Q \| = \dfloorratio{f_0 P}{g} = \dfloor{\dmod{n Q_1 + \dfrac{n R_1}{g}}{m_Q}} \notag \\ \| = \dmod{\dfloor{n Q_1 + \dfrac{n R_1}{g}}}{m_Q} \eqvide{eq:modfloor} \notag \\ \| = \dmod{n Q_1 + \dfloorratio{n R_1}{g}}{m_Q} \\ R \| = f_0 P − g Q = g \dmod{n Q_1 + \dfrac{n R_1}{g}}{m_Q} − g \dmod{n Q_1 + \dfloorratio{n R_1}{g}}{m_Q} \notag \\ \| = g \dmod{n Q_1 + \dfloorratio{n R_1}{g} + \dmod{\dfrac{n R_1}{g}}{1}}{m_Q} − g \dmod{n Q_1 + \dfloorratio{n R_1}{g}}{m_Q} \notag \\ \| = g \dparen{\dmod{a + b}{m_Q} − \dmod{a}{m_Q}} \\ a \| = n Q_1 + \dfloorratio{n R_1}{g} \\ b \| = \dmod{\dfrac{n R_1}{g}}{1} \\ \dmod{a + b}{m_Q} \| = \dmod{a}{m_Q} + \dmod{b}{m_Q} − m_Q C\dparen{\dmod{a}{m_Q} + \dmod{b}{m_Q} ≥ m_Q} \end{align}

Er geldt \( m_Q ≥ 1 \) en \( 0 ≤ b \lt 1 \) dus \( \dmod{b}{m_Q} = b \). Er geldt ook \( 0 ≤ \dmod{a}{m_Q} ≤ m_Q − 1 \) (omdat \( a \) en \( m_Q \) hele getallen zijn), dus \( 0 ≤ \dmod{a}{m_Q} + \dmod{b}{m_Q} \lt m_Q \) dus aan de voorwaarde binnen \( C(•) \) is nooit voldaan, dus die term valt weg. Al met al vinden we

\begin{align} \dmod{a + b}{m_Q} \| = \dmod{a}{m_Q} + b \\ R \| = g b = g \dmod{\dfrac{n R_1}{g}}{1} = \dmod{n R_1}{g} \end{align}

dus

\begin{align} P \| = \dmod{nP_1}{m_P} \\ Q \| = \dmod{n Q_1 + \dfloorratio{n R_1}{g}}{m_Q} \\ R \| = \dmod{n R_1}{g} \end{align}

Voor de berekening is deze vorm handiger:

\begin{align} P \| = \dmod{n P_1}{m_P} \\ \{ ρ, R \} \| = \Div(n R_1, g) \\ Q \| = \dmod{n Q_1 + ρ}{m_Q} \end{align}

Als je \( m_P \) optelt bij \( n \) dan vind je dezelfde \( P \), \( Q \) en \( R \) als voor \( n \), want

\begin{align} \dmod{(n + m_P)P_1}{m_P} \| = \dmod{n P_1 + n m_P}{m_P} = \dmod{n P_1}{m_P} \\ \dmod{(n + m_P)R_1}{g} \| = \dmod{n R_1 + n_* \dfrac{g}{R_1} R_1}{g} = \dmod{n R_1 + n_* g}{g} = \dmod{n R_1}{g} \end{align} \begin{align} \| \dmod{(n + m_P)Q_1 + \dfloorratio{(n + m_P)R_1}{g}}{m_Q} \notag \\ \| = \dmod{n Q_1 + m_P Q_1 + \dfloor{\dfrac{n R_1}{g} + \dfrac{m_P R_1}{g}}}{m_Q} \notag \\ \| = \dmod{n Q_1 + m_P Q_1 + \dfloor{\dfrac{n R_1}{g} + n_*}}{m_Q} \notag \\ \| = \dmod{n Q_1 + \dfloor{\dfrac{n R_1}{g}} + m_P Q_1 + n_*}{m_Q} \qquad (n_* ∥ 1) \notag \\ \| = \dmod{n Q_1 + \dfloor{\dfrac{n R_1}{g}} + m_P \dparen{Q_1 + \dfrac{R_1}{g}}}{m_Q} \notag \\ \| = \dmod{n Q_1 + \dfloor{\dfrac{n R_1}{g}} + m_Q \dfrac{g}{f_0} \dfrac{f_0 P_1}{g}}{m_Q} \notag \\ \| = \dmod{n Q_1 + \dfloor{\dfrac{n R_1}{g}} + m_Q P_1}{m_Q} \notag \\ \| = \dmod{n Q_1 + \dfloor{\dfrac{n R_1}{g}}}{m_Q} \end{align}

Met ons voorbeeld (\( f = f_0 = 25920 \), \( g = 765433 \), \( w = 2^{31} − 1 = 2147483647 \), \( P_1 = 99902 \), \( Q_1 = 3383 \), \( R_1 = 1 \)) vinden we

\begin{align*} n_* \| = \dceilratio{w}{f_0 P_1} = \dceilratio{2147483647}{25920×99902} = 1 \\ P_\text{max} \| = \dfloorratio{w}{f_0} = \dfloorratio{2147483647}{25920} = 82850 \\ m_P \| = \dfrac{g n_*}{R_1} = 765433 \\ m_Q \| = \dfrac{f_0 n_*}{R_1} = 25920 \\ P \| = \dmod{n P_1}{m_P} = \dmod{99902n}{765433} \\ \{ ρ, R \} \| = \Div(n R_1, 765433) = \Div(n, 765433) \\ Q \| = \dmod{n Q_1 + ρ}{m_Q} = \dmod{3383n + ρ}{25920} \end{align*}

\({n}\) \({P}\) \({Q}\) \({R}\) \({P/R}\) \({P/P_\text{max}}\)
1 99902 3383 1 99902 1.21
2 199804 6766 2 99902 2.41
3 299706 10149 3 99902 3.62
4 399608 13532 4 99902 4.82
5 499510 16915 5 99902 6.03
6 599412 20298 6 99902 7.23
7 699314 23681 7 99902 8.44
8 33783 1144 8 4222.9 0.41
9 133685 4527 9 14853.9 1.61
10 233587 7910 10 23358.7 2.82
1064 665974 22552 1064 625.9 8.04
1065 443 15 1065 0.4 0.01
1066 100345 3398 1066 94.1 1.21
165698 307538 10414 165698 1.9 3.71
165699 407440 13797 165699 2.5 4.92
165700 507342 17180 165700 3.1 6.12

Alleen \( n \) waarvoor \( P/R ≥ 1 \) en \( P/P_\text{max} ≤ 1 \) en \( R ≠ 0 \) (dus \( 0 \lt R ≤ P ≤ P_\text{max} \)) zijn goed. Er zijn 4485 goede waarden, voor \( n \) tussen 1 en \( P_\text{max} \). De kleinste \( n \) die een bruikbare combinatie oplevert is \( n = 8 \).

Een tweede geval: \( f = f_0 = 4800 \), \( g = 146097 \). Dan

\begin{align*} P_1 \| = 33511 \\ Q_1 \| = 1101 \\ R_1 \| = 3 \\ P_\text{max} \| = \dfloorratio{w}{f_0} = \dfloorratio{2147483647}{4800} = 447392 \\ n_* \| = \dceilratio{w}{f_0 P_1} = \dceilratio{2147483647}{4800×33511} = 14 \\ m_P \| = \dfrac{g n_*}{R_1} = \dfrac{146097×14}{3} = 681786 \\ m_Q \| = \dfrac{f_0 n_*}{R_1} = \dfrac{4800×14}{3} = 22400 \\ P \| = \dmod{n P_1}{m_P} = \dmod{33511 n}{681786} \\ \Div(ρ, R) \| = \Div(n R_1, g) = \Div(3 n, 146097) \\ Q \| = \dmod{n Q_1 + ρ}{m_Q} = \dmod{1101 n + ρ}{22400} \end{align*}

\({n}\) \({P}\) \({Q}\) \({R}\) \({P/R}\) \({P/P_\text{max}}\)
1 33511 1101 3 11170.3 0.07
2 67022 2202 6 11170.3 0.15
3 100533 3303 9 11170.3 0.22
12 402132 13212 36 11170.3 0.90
13 435643 14313 39 11170.3 0.97
14 469154 15414 42 11170.3 1.05
20 670220 22020 60 11170.3 1.50
21 21945 721 63 348.3 0.05

\( n \) van 1 tot en met 13 geven goede combinaties (met \( P/R ≥ 1 \) en \( P/P_\text{max} \lt 1 \)) en \( R ≠ 0 \), en daarna pas weer \( n = 21 \).

Hier zijn er 374'336 waarden van \( n \) tussen 1 en 681'785 die een goede combinatie van \( \{ P, Q, R \} \) geven.

Here there are 374'336 values of \( n \) between 1 and 681'785 that provide a good combination of \( \{ P, Q, R \} \).

Je kunt geschikte \( \{ P, Q, R \} \) vinden door alle \( m_P − 1 \) unieke waarden van \( n \) te proberen, maar een meer gerichte zoektocht kan minder werk zijn.

Begin de zoektocht naar goede \( \{ P, Q, R \} \) bij de kleinste \( R \), want dat geeft de beste kans op succes. De kleinst mogelijke \( R = \dmod{n R_1}{g} \) is \( R_1 \). Daarbij hoort \( n ≡ 1 \pmod{g/R_1} \). We hoeven niet te kijken naar waarden van \( n \) die groter of gelijk zijn aan \( m_P \), want dan herhalen \( \{ P, Q, R \} \) zich weer. We nemen

\begin{equation} n = j + k \dfrac{g}{R_1} \end{equation}

voor \( j \) van 1 tot en met \( (g/R_1) − 1 \) en \( k \) van 0 tot en met \( n_* − 1 \). \( k \) moet niet groter zijn, want als \( k = n_* \) dan is \( n = j + n_* (g/R_1) = m_P + j ≥ m_P \) en dat is te hoog. En \( j \) moet niet groter zijn, want als \( j = (g/R_1) \) en \( k = n_* − 1 \) dan is \( n = (g/R_1) + (n_* − 1)(g/R_1) = m_P \) en ook dat is te hoog.

De bijbehorende \( \{ P, Q, R \} \) zijn dan

\begin{align} P \| = \dmod{n P_1}{m_P} = \dmod{j P_1 + k P_1 \dfrac{g}{R_1}}{m_P} = \dmod{j P_1 + k \dmod{P_1}{n_*} \dfrac{g}{R_1}}{m_P} \\ \{ ρ, R \} \| = \Div(j R_1, g) \\ Q \| = \dmod{n Q_1 + ρ + k}{m_Q} \end{align}

Merk op dat \( R \) afhangt van \( j \) maar niet van \( k \), dus als je voor een gegeven waarde van \( j \) alle waarden van \( k \) afloopt dan heb je alle waarden van \( P \) gehad die horen bij die \( R \).

Als \( n_* = 1 \) dan hangt \( P \) niet af van \( k \) dus is er dan per waarde van \( R \) maar één waarde van \( P \).

Als \( n_* \gt 1 \) dan zijn er voor elke \( j \) (dus \( R \)) \( n_* \gt 1 \) waarden van \( P \) om te bekijken. Als er een geschikte \( P \) te vinden is dan zal \( j = 1 \) meestal wel zo'n geschikte \( P \) opleveren.

We hoeven niet te kijken naar \( P \gt P_\text{max} \), en we zoeken naar \( R ≤ P \), dus de grootste waarde van \( R \) waar we naar hoeven te kijken is \( P_\text{max} \). Daaruit volgt dat de grootste \( j \) die je hoeft te bekijken ongeveer gelijk is aan

\begin{equation} \max(j) = \dfloorratio{P_\text{max}}{R_1} ≈ \dfloorratio{w}{f_0 R_1} \label{eq:maxj} \end{equation}

In ons eerste geval (\( f = 25920 \), \( g = 765433 \), \( R_1 = 1 \), \( P_\text{max} = 82850 \)) was \( n_* = 1 \) dus \( k = 0 \). Dan bekijken we \( j = n \) van 1 tot hooguit \( g/R_1 − 1 = 765432 \). Uit formule \eqref{eq:maxj} volgt dat de grootste \( j = n \) die we hoeven te bekijken gelijk is aan \( \dfloor{P_\text{max}/R_1} ≈ 82850 \) is.

De eerste paar waarden van \( n \) bekeken we eerder al en we vonden toen de eerste geschikte resultaten voor \( n = 8 \).

In ons tweede geval (\( f = 4800 \), \( g = 146097 \)) vonden we \( P_1 = 33511 \), \( Q_1 = 1101 \), \( R_1 = 3 \), \( n_* = 14 \), \( P_\text{max} = 447392 \), \( m_P = 681786 \), \( m_Q = 22400 \). Dan is de grootste waarde van \( j \) om te bekijken \( \dfloor{P_\text{max}/R_1} = \dfloor{447392/3} = 149130 \).

\begin{align*} n \| = j + k\dfrac{g}{R_1} = j + k \dfrac{146097}{3} = j + 48699 k \\ P \| = \dmod{j P_1 + k \dmod{P_1}{n_*} \dfrac{g}{R_1}}{m_P} = \dmod{33511 j + \dmod{33511}{14} \dfrac{146097}{3} k}{681786} \\ \| = \dmod{33511 j + k×9×48699}{681786} = \dmod{33511 j + 438291 k}{681786} \\ \{ ρ, R \} \| = \Div(j R_1, g) = \Div(3 j, 146097) \\ Q \| = \dmod{n Q_1 + ρ + k}{m_Q} = \dmod{1101 n + ρ + k}{22400} \end{align*}

Voor \( j = 1 \) vinden we

\({k}\) \({n}\) \({P}\) \({Q}\) \({R}\) \({P/R}\) \({P/P_\text{max}}\)
0 1 33511 1101 3 11170.3 0.07
1 48700 471802 15501 3 157267.3 1.05
2 97399 228307 7501 3 76102.3 0.51
3 146098 666598 21901 3 222199.3 1.49
4 194797 423103 13901 3 141034.3 0.95
5 243496 179608 5901 3 59869.3 0.40
6 292195 617899 20301 3 205966.3 1.38
7 340894 374404 12301 3 124801.3 0.84
8 389593 130909 4301 3 43636.3 0.29
9 438292 569200 18701 3 189733.3 1.27
10 486991 325705 10701 3 108568.3 0.73
11 535690 82210 2701 3 27403.3 0.18
12 584389 520501 17101 3 173500.3 1.16
13 633088 277006 9101 3 92335.3 0.62
14 681787 33511 1101 3 11170.3 0.07

We zien dat \( k = n_* = 14 \) dezelfde \( \{ P, Q, R \} \) oplevert als \( k = 0 \), wat toont dat we alleen maar naar \( k \) van 0 tot en met \( n_* − 1 \) hoeven te kijken. Alle 14 waarden leveren \( P ≥ R \) en 9 daarvan leveren ook \( P ≤ P_\text{max} \) en dus een goede combinatie van \( \{ P, Q, R \}\).

Voor \( j = 2 \) vinden we

\({k}\) \({n}\) \({P}\) \({Q}\) \({R}\) \({P/R}\) \({P/P_\text{max}}\)
0 2 67022 2202 6 11170.3 0.15
1 48701 505313 16602 6 84218.8 1.13
2 97400 261818 8602 6 43636.3 0.59
3 146099 18323 602 6 3053.8 0.04
4 194798 456614 15002 6 76102.3 1.02
5 243497 213119 7002 6 35519.8 0.48
6 292196 651410 21402 6 108568.3 1.46
7 340895 407915 13402 6 67985.8 0.91
8 389594 164420 5402 6 27403.3 0.37
9 438293 602711 19802 6 100451.8 1.35
10 486992 359216 11802 6 59869.3 0.80
11 535691 115721 3802 6 19286.8 0.26
12 584390 554012 18202 6 92335.3 1.24
13 633089 310517 10202 6 51752.8 0.69
14 681788 67022 2202 6 11170.3 0.15

Ook hier geven alle \( k ≤ n_* \) dat \( P ≥ R \), en 9 ervan geven ook \( P ≤ P_\text{max} \). De grootste waarde van \( P/R \) is hier 108568, vergeleken met 222199 voor \( j = 1 \). Dit illustreert dat een grotere \( R \) de verhouding \( P/R \) kleiner maakt, en daarmee ook de kans op een bruikbare combinatie van \( \{ P, Q, R \} \).

Er kunnen meerdere bruikbare combinaties van \( \{ P, Q, R \} \) zijn, en die zijn dan allemaal goed genoeg. Binnen die groep geven we de voorkeur aan kleine \( P \), \( Q \), \( R \), want dat rekent en leest gemakkelijker.

Voor het eerste geval zijn er bruikbare combinaties van \( \{ P, Q, R \}\) voor 4485 waarden van \( R \) tussen 8 en 82'243. Binnen die groep zoeken we naar de kleinste waarde van \( PQR \). We vinden

\({P}\) \({Q}\) \({R}\) \({PQR}\)
1447 49 23 1.6 × 106
2894 98 46 1.3 × 107
945 32 544 1.6 × 107
4341 147 69 4.4 × 107
5788 196 92 1.0 × 108

We kiezen \( P = 1447 \), dan \( R = 23 \) en \( Q = 49 \).

Nu rekenen we \( y \), \( e \) uit voor \( x = 1710321 \). Dan vinden we

\begin{align*} x_1 \| = \dfloorratio{x}{P} = \dfloorratio{1710321}{1447} = 1181 \\ x_0 \| = \dmod{x}{P} = \dmod{1710321}{1447} = 1414 \\ y \| = x_1 Q + \dfloorratio{x_1 R + f x_0 + t}{g} \\ \| = 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{f x + t}{g} = \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 dat veel groter is dan \( w \).

Voor het tweede geval (\( f = f_0 = 4800 \), \( g = 146097 \)) zijn er 374'336 bruikbare combinaties van \( \{ P, Q, R \} \). De bruikbare combinaties met de kleinste \( PQR \) zijn

\({P}\) \({Q}\) \({R}\) \({PQR}\)
487 16 48 3.7 × 105
3135 103 9 2.9 × 106
974 32 96 3.0 × 106
761 25 375 7.1 × 106
1461 48 144 1.0 × 107

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

\begin{align*} x_1 \| = \dfloorratio{731767}{487} = 1502 \\ x_0 \| = \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 \).

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

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

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

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

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

15.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} \eqvide{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} \eqvide{eq:gdomp} \notag \\ \| = \dfloorratio{f − g − \ddom{gs + g − t}{f} − 1}{g} + 1 \eqvide{eq:ceil2floor} (t,g,s,f ∥ 1) \notag \\ \| = \dfloorratio{f − g − (f − 1 − \dmod{gs + g − t − 1}{f}) − 1}{g} + 1 \eqvide{eq:ddom2dmod} \notag \\ \| = \dfloorratio{\dmod{gs + g − t − 1}{f}}{g} \eqvide{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

15.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}} \notag \\ \| + \min(∆σ(m + 1) − ∆σ(m)) \notag \\ \| = −p + (\dmod{p}{1} − 1) + \min(∆σ(m + 1) − ∆σ(m)) \eqvide{eq:domp} \notag \\ \| = −p + \dmod{p}{1} − 1 + \min(L_*(m) − L(m)) \notag \\ \| = −\dfloor{p} − 1 + \min(L_*(m) − L(m)) \eqvide{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 15.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 = f/g \), \( ψ = h/g\) en \( b = 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

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

15.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 \eqvide{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}

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

15.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 de eerste in 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*}

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

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

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

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

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

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

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

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

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

15.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 + \dmod{C_n − s_0}{P_n} − P_n \label{eq:laatste} \end{equation}

Met \( C_n = 54 \) en \( P_n = 60 \):

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

15.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{equation} s = s_0 − \dmod{s_0 − C_n}{P_n} + P_n \end{equation}

Met \( C_n = 54 \) en \( P_n = 60 \):

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

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

16. 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:

  a ═══════════╗ ╔═ a₁ ══════════╗
               (1)               ║
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        ║
  d ─(−1)─ d₀ ─────────(2)─ d₁ ─[3]⇒═ s ═(+J₀)═ J

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 \( a \) 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 \( a \) 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 \) of \( ω_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.

16.1. De Juliaanse kalender

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 (in een schrikkeljaar) 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.

Er zijn verschillende manieren om hiermee om te gaan:

  1. We kunnen februari 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. Met een vlakke combinatie van kalenderniveau's tussen jaren en dagen en tussen maanden en dagen bepaalt alleen het jaar/dag-niveau de lengte van het jaar, en daarmee kunnen we de lengte van de laatste maand van het jaar net zoveel korter maken als we willen. In het rekenjaar is februari die laatste maand. Dan zijn alle kalenderniveau's van type 2 ― dus relatief gemakkelijk. De berekeningen zijn dan schematisch als volgt:

          a ═╗ ╔═ a₁ ══════════╗
             (1)               ║
          m ─┘ └─ m₁ ─┐        ║
          d ─────────(2)─ d₁ ─(3)═ J
        

    Berekening 1 zet kalenderjaar/kalendermaand om naar rekenjaar/rekenmaand. Berekening 2 geeft het dagnummer in het rekenjaar. Berekening 3 geeft het lopende dagnummer.

  2. We kunnen ook een getrapte combinatie van kalenderniveaus gebruiken, waarin we uit het jaartal en maandnummer een lopend maandnummer berekenen, en dan uit dat lopende maandnummer en het dagnummer een lopend dagnummer. Dan wordt de lengte van het jaar niet alleen door het kalenderniveau met het jaar bepaald, dus kunnen we niet met de jaarlengte de lengte van de laatste maand korter maken, dus geen reden om een rekenjaar te gebruiken. Het nadeel is dat we dan extra moeite moeten doen om februari korter te maken dan de andere maanden, en dat kan alleen met een kalender van type 4, die in de richting van lopend dagnummer naar datum een stuk lastiger is. De berekeningen zijn schematisch als volgt:

          a ══╗
          m ─(1)═ m₁ ═╗
          d ─────────[2]⇒═ J
        

    Berekening 1 gaat van jaar/maand naar lopend maandnummer. Berekening 2 gaat van lopend maandnummer en dagnummer in de maand naar lopend dagnummer.

Kalendertypes 3 en 4 nemen (van CJDN naar datum) veel meer rekenwerk dan kalendertypes 1 en 2, dus een methode die kalendertypes 1 of 2 als maximum heeft is in de praktijk fijner dan een methode die kalendertypes 3 of 4 als maximum heeft. Daarom heeft de hierboven eerstgenoemde methode (met de vlakke combinatie) in de praktijk de voorkeur.

16.1.1. Van Juliaanse datum naar CJDN (1)

De berekeningen zijn schematisch zoals in het volgende diagram.

  a ═══════════╗ ╔═ a₁ ══════════╗
               (1)               ║
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        ║
  d ─(−1)─ d₀ ─────────(2)─ d₁ ─(3)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

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

  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 \| = a + α_1 \end{align}

    \({a}\) \({m}\) \({α_1}\) \({m_1}\) \({a_1}\)
    0 1 −1 10 −1
    0 2 −1 11 −1
    0 3 0 0 0
    0 10 0 7 0
    0 11 0 8 0
    0 12 0 9 0
    1 1 −1 10 0
    1 2 −1 11 0
    1 3 0 0 1

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

    \begin{equation} d_1 = \dfloorratio{153 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 \) binnen 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} \{ α_1, m_1 \} \| = \Div(m ― 3, 12) \\ J \| = \dfloorratio{1461\dparen{a + α_1}}{4} + \dfloorratio{153 m_1 + 2}{5} + d + 1721117 \label{eq:jul1sum} \end{align}

Bijvoorbeeld, wat is het CJDN dat hoort bij Juliaanse datum 6 juli 2003? Dan is \( a = 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 \| = a + α_1 = 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} + 127 \\ \| = \dfloorratio{2926383}{4} + 127 = 731595 + 127 = 731722 \\ J \| = 731722 + 1721118 = 2452840 \end{align*}

Of, met de samengevoegde formules:

\begin{align*} \{ α_1, m_1 \} \| = \Div(m ― 3, 12) = \Div(7 ― 3, 12) = \{ 0, 4 \} \\ J \| = \dfloorratio{1461\dparen{a + α_1}}{4} + \dfloorratio{153 m_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:

\({a}\) \({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 1721057
0 1 1 0 0 −1 10 −1 306 −60 1721058
0 2 28 1 27 −1 11 −1 364 −2 1721116
0 2 29 1 28 −1 11 −1 365 −1 1721117
0 3 1 2 0 0 0 0 0 0 1721118
1999 12 31 11 30 0 9 1999 305 730439 2451557
2000 1 1 0 0 −1 10 1999 306 730440 2451558
2000 2 28 1 27 −1 11 1999 364 730498 2451616
2000 2 29 1 28 −1 11 1999 365 730499 2451617
2000 3 1 2 0 0 0 2000 0 730500 2451618
2003 7 6 6 5 0 4 2003 127 731722 2452840

Welke numerieke limiet zit er op deze berekeningen als we met getallen met een vaste geheugenbreedte werken (zoals 32-bitsgetallen), zodat elk begin-, tussen- en eindresultaat niet groter (positief of negatief) mag zijn dan \( w \)? Dus voor hoeveel jaren naar het verleden en de toekomst kunnen we verwachten dat deze berekeningen de juiste uitkomsten geven?

De algemene limiet op alle invoerwaarden is dat die niet groter mogen zijn (positief of negatief) dan \( w \). In de praktijk is dat alleen van belang voor lopende grootheden zoals het jaartal \( a \) en het CJDN \( J \), want de andere getallen (zoals het dagnummer in de maand of het jaarnummer in de eeuw) zijn al van nature beperkt.

Berekening 3 geeft een limiet van \( w/1461 \) jaar, wat overeenkomt met ongeveer \( w/4 \) dagen. Voor 32-bitsgetallen (met \( w = 2^{31} − 1 = 2147483647 \)) is dat ongeveer 1,5 miljoen jaar. Een meer gedetailleerde zoektocht (zoals beschreven in hoofdstuk 15.2.3) levert op dat voor 32-bitsgetallen de boven beschreven berekeningen bruikbaar zijn van CJDN −535'149'630 tot en met CJDN 538'592'029, ofwel van ergens in jaar −1'469'872 tot ergens in jaar 1'469'872.

Als je een grotere limiet wilt hebben dan kun je met 64-bitsgetallen rekenen of (aldus hoofdstuk 15.2) de formule voor \( s \) (in berekening 3) vervangen door

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

Die geeft een limiet van ongeveer \( w \) dagen, en groter kan niet. Voor 32-bitsgetallen komt dat overeen met 5,9 miljoen jaar.

Hier zijn wat voorbeelden (met \( d_1 = 0 \)) van de originele berekening en de berekening met de omweg om de limiet te vergroten.

\({a}\) \({1461 a}\) \({1461 \dfrac{a}{w}}\) \({s}\) \({365 a}\) \({\dfrac{365 a}{w}}\) \({s}\)
−5880000 −8590680000 −4.00 −2147670000 −2146200000 −1.00 −2147670000
−1500000 −2191500000 −1.02 −547875000 −547500000 −0.25 −547875000
−1 −1461 −6.8 × 10−7 −366 −365 −1.7 × 10−7 −366
0 0 0 0 0 0 0
1 1461 6.8 × 10−7 365 365 1.7 × 10−7 365
1999 2920539 1.4 × 10−3 730134 729635 3.4 × 10−4 730134
2000 2922000 1.4 × 10−3 730500 730000 3.4 × 10−4 730500
2003 2926383 1.4 × 10−3 731595 731095 3.4 × 10−4 731595
2004 2927844 1.4 × 10−3 731961 731460 3.4 × 10−4 731961
1000000 1461000000 0.68 365250000 365000000 0.17 365250000
1500000 2191500000 1.02 547875000 547500000 0.25 547875000
5000000 7305000000 3.40 1826250000 1825000000 0.85 1826250000
5880000 8590680000 4.00 2147670000 2146200000 1.00 2147670000

16.1.2. Van CJDN naar Juliaanse datum (1)

Hiervoor doorlopen we de omgekeerde procedure als hierboven.

  a ═══════════╗ ╔═ a₁ ══════════╗
               (1)               ║
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        ║
  d ─(−1)─ d₀ ─────────(2)─ d₁ ─(3)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

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

  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 \) binnen het rekenjaar.

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

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

    \begin{align} \{ m_1, ε_2 \} \| = \Div(5 d_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) \\ a \| = 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(4 J − 6884469, 1461) \\ \{ m_1, ε_2 \} \| = \Div\dparen{5\dfloorratio{ε_1}{4} + 2, 153} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) \\ a \| = 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(4 s + 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(5 d_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 \} \\ a \| = 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(4 J − 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\} \\ a \| = 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}\) \({a}\) \({m}\) \({d}\)
−1 −1721119 −4713 1220 305 9 150 30 0 11 −4713 12 31
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

Berekening 3 heeft een limiet van \( w/4 \) dagen. Voor 32-bitsgetallen komt dat overeen met ongeveer 1,5 miljoen jaar.

Als je een hogere limiet wilt dan kun je rekenen met 64-bitgetallen, of (volgens hoofdstuk 15.2) de formule voor \( α_1 \) en \( ε_1 \) (voor berekening 3) vervangen door

\begin{eqnarray} \{ ω_2, δ_1 \} \| = \| \Div(s, 1461) \\ \{ α_2, ε_1 \} \| = \| \Div(4 δ_1 + 3, 1461) \\ α_1 \| = \| 4 ω_2 + α_2 \end{eqnarray}

Daarmee wordt de limiet \( w \) dagen, en groter kan niet. Voor 32-bitsgetallen komt dat overeen met ongeveer 5,9 miljoen jaar.

Hier zijn wat voorbeelden van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({s}\) \({4 s + 3}\) \({\dfrac{4s + 3}{w}}\) \({α_1}\) \({ε_1}\) \({ω_2}\) \({δ_1}\) \({4 δ_1 + 3}\) \({α_2}\) \({ε_1}\) \({α_1}\)
−2140000000 −8559999997 −3.99 −5859001 464 −1464751 1211 4847 3 464 −5859001
−530000000 −2119999997 −0.99 −1451061 124 −362766 1126 4507 3 124 −1451061
0 3 1.4 × 10−9 0 3 0 0 3 0 3 0
530000000 2120000003 0.99 1451060 1343 362765 335 1343 0 1343 1451060
2140000000 8560000003 3.99 5859000 1003 1464750 250 1003 0 1003 5859000

16.1.3. Van Juliaanse datum naar CJDN (2)

Nu gebruiken we de getrapte combinatie van kalenderniveaus. De berekeningen zijn schematisch als volgt:

  a ═════════════╗
  m ──(−1)─ m₀ ─(1)═ m₁ ═╗
  d ──(−1)─ d₀ ─────────[2]⇒ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 1 12 0 1 −2 0.08333
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 \( a \) en het maandnummer \( m_0 \) binnen het jaar om naar een doorlopend maandnummer \( m_1 \), maar dat is erg simpel:

    \begin{equation} m_1 = 12a + 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?

    With \( a = 0 \) we get the values

    \({m_1}\) \({•7m_1}\)
    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

    waar \( •7 m_1 \) betekent "het resultaat van de berekening met \( 7 m_1 \) erin".

    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{f a}{g} = \dmod{−7}{12} = 5 \), dus vinden we \( \dfloor{(7 m_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 = 30 m_1 + \dfloorratio{7 m_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 \| = 12 a + m − 1 \\ J \| = 30 m_1 + \dfloorratio{7 m_1 + 5}{12} − 2\dfloorratio{m_1 + 10}{12} + \dfloorratio{m_1 + 46}{48} \notag \\ \| + d + 1721057 \end{align}

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

\begin{align*} m_0 \| = m − 1 = 6 \\ d_0 \| = d − 1 = 5 \\ m_1 \| = 12 a + m_0 = 12×2003 + 6 = 24042 \\ s \| = 30 m_1 + \dfloorratio{7 m_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 \| = 12 a + m − 1 = 12×2003 + 7 − 1 = 24042 \\ J \| = 30 m_1 + \dfloorratio{7 m_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:

\({a}\) \({m}\) \({d}\) \({m_0}\) \({d_0}\) \({m_1}\) \({•7m_1}\) \({•m_1/12}\) \({•m_1/46}\) \({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

De limiet op berekening 1 is \( w/12 \) Juliaanse jaren, wat overeenkomt met ongeveer \( 30.4 w \) dagen. De limiet op berekening 2 is ongeveer \( w \) dagen. Dat is de kleinste limiet, dus dat is de ook de gezamenlijke limiet, en een groter gezamenlijke limiet is niet mogelijk. Voor 32-bitsgetallen is dat ongeveer 5,9 miljoen jaar.

16.1.4. Van CJDN naar Juliaanse datum (2)

De berekeningen zijn schematisch als volgt:

  a ════════════╗
  m ─(−1)─ m₀ ─(1)═ m₁ ═╗
  d ─(−1)─ d₀ ─────────[2]⇒ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 1 12 0 1 −2 0.08333
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 \) binnen 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{48 s + 48×2 − (4×1×5 + 4×−2×10 + 1×1×46) − 1}{1461} \notag \\ \| = \dfloorratio{48 s + 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 − 30 m_1 − \dfloorratio{7 m_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 \( a \) en maandnummer \( m_0 \) binnen het jaar. Dit is een kalenderniveau van type 1.

\begin{equation} \{ a, 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 \\ \{ a, 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}\) \({a}\) \({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

Berekening 2 geeft een limiet van \( w/48 \) dagen. Berekening 1 geeft geen verdere beperking omdat daarvoor \( f = 1 \). De gezamenlijke limiet is daarom \( w/48 \) dagen, wat voor 32-bitsgetallen overeenkomt met ongeveer 122 duizend jaar.

Als je een hogere limiet wilt hebben dan kun je rekenen met 64-bitsgetallen, of de formule voor \( μ_1 \) (voor berekening 2) vervangen door

\begin{align} \{ ω_1, δ_2 \} \| = \Div(s, 1461) \\ μ_2 \| = \dfloorratio{48 δ_2 + 109}{1461} \\ μ_1 \| = 48 ω_1 + μ_2 \end{align}

Daarmee wordt de limiet \( w \) dagen, en groter kan niet. Voor 32-bitsgetallen komt dat overeen met ongeveer 5,9 miljoen jaar.

Hier zijn wat voorbeelden van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \). Afkortingen:

\begin{align*} ω_3 \| = 48 s + 109 \\ ω_4 \| = 48 δ_2 + 109 \end{align*}

\({s}\) \({ω_3}\) \({\dfrac{ω_3}{w}}\) \({μ_1}\) \({ω_1}\) \({δ_2}\) \({ω_4}\) \({μ_2}\) \({μ_1}\)
−2140000000 −102719999891 −47.83 −70308009 −1464751 1211 58237 39 −70308009
−44000000 −2111999891 −0.98 −1445586 −30117 937 45085 30 −1445586
44000000 2112000109 0.98 1445585 30116 524 25261 17 1445585
2140000000 102720000109 47.83 70308008 1464750 250 12109 8 70308008

16.2. De Gregoriaanse kalender

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.

Er zijn verschillende manieren om hiermee om te gaan:

  1. We kunnen een vlakke combinatie van kalenderniveaus gebruiken. De berekeningen zijn schematisch als volgt:

                       ╔══ c₁ ══════════╗
          a ═┐ ┌═ a₁ ═(2)─ a₂ ─┐        ║
             (1)               │        ║
          m ─┘ └─ m₁ ─┐        │        ║
          d ─────────(3)─ d₁ ─(4)─ d₂ ─(5)═ J
        

    Berekening 1 rekent kalenderjaar/maand om naar rekenjaar/maand, net als voor de Juliaanse kalender. Berekening 2 splits het lopende rekenjaar in een lopende rekeneeuw en het rekenjaar binnen de rekeneeuw. Berekening 3 geeft het dagnummer binnen het rekenjaar uit de rekendmaand binnen het rekenjaar en het dagnummer binnen de maand. Berekening 4 geeft het dagnummer binnen de rekeneeuw uit het rekenjaar binnen de rekeneeuw en het dagnummer binnen het rekenjaar. Berekening 5 geeft het lopende dagnummer uit het lopende rekeneeuwnummer en het dagnummer binnen de rekeneeuw.

  2. We kunnen toe met twee kalenderniveaus en vlakke combinatie als we kalendertype 4 gebruiken voor het bovenste niveau, met meer dan twee verschillende maandlengtes. Dan zijn de berekeningen schematisch als volgt:

          a ═╗ ╔═ a₁ ══════════╗
             (1)               ║
          m ─┘ └─ m₁ ─┐        ║
          d ─────────(2)─ d₁ ─[3]⇒ J
        

    Berekening 1 rekent kalenderjaar/maand om naar rekenjaar/maand. Berekening 2 geeft het dagnummer binnen het rekenjaar uit het rekenmaandnummer binnen het rekenjaar met het dagnummer binnen de maand. Berekening 3 geeft het lopende dagnummer uit het lopende rekenjaarnummer en het dagnummer binnen het rekenjaar.

  3. Of we kunnen een getrapte combinatie gebruiken.

          a ══╗
          m ─(1)═ m₁ ═╗
          d ─────────[2]⇒ J
        

    Berekening 1 berekent het lopende maandnummer uit het jaar en het maandnummer binnen het jaar. Berekening 2 berekent het lopende dagnummer uit het lopende maandnummer en het dagnummer binnen de maand.

De eerste methode heeft kalendertype 2 als hoogste en is daarom te verkiezen boven de andere twee methoden die kalendertype 4 als hoogste hebben.

16.2.1. Van Gregoriaanse datum naar CJDN (1)

We kunnen een vlakke combinatie van kalenderniveaus gebruiken. Om Gregoriaanse jaren met een enkel kalenderniveau om te rekenen naar dagen moeten de schrikkeljaren terugkomen na elke \( \dfloor{Q} \) of \( \dceil{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₁ ═══════════╗
  a ═══════════╗ ╔═ a₁ ═(2)─ a₂ ──┐        ║
               (1)                │        ║
  m ─(−1)─ m₀ ─┘ └─ m₁ ──┐        │        ║
  d ─(−1)─ d₀ ──────────(3)─ d₁ ─(4)─ d₂ ─(5)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 1 12 0 1 −2 0.083333
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 (16.1.1):

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

  3. Berekening 2 rekent het rekeneeuwnummer \( c_1 \) en jaarnummer \( a_2 \) binnen 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 \) binnen het rekenjaar uit het rekenmaandnummer \( m_1 \) binnen het rekenjaar en het dagnummer \( d_0 \) binnen 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 \) binnen de rekeneeuw uit uit het jaarnummer \( a_2 \) binnen de rekeneeuw en het dagnummer \( d_1 \) binnen 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 \) binnen 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(a + α_1, 100) \\ J \| = \dfloorratio{146097 c_1}{4} + \dfloorratio{36525 a_2}{100} \notag \\ \| + \dfloorratio{153 m_1 + 2}{5} + d + 1721119 \end{align}

Bijvoorbeeld, welke CJDN komt overeen met Gregoriaanse datum 6 juli 2003? Dan is \( a = 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 \| = a + α_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(a + α_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:

\({a}\) \({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

Berekening 2 levert geen extra beperking op de limiet omdat daarvoor \( f = 1 \) is. Berekening 5 levert een beperking tot \( w/146097 \) Gregoriaanse eeuwen, wat overeenkomt met ongeveer \( w/4 \) dagen. Dat is de gezamenlijke limiet. Voor 32-bitsgetallen komt dat overeen met ongeveer 1,5 miljoen jaar. Een meer gedetailleerde zoektocht (zoals beschreven in hoofdstuk 15.2.3) levert op dat voor 32-bitsgetallen bovenstaande berekeningen de juiste resultaten opleveren van CJDN −535'148'831 tot en met 538'592'031, wat overeenkomt met vanaf ergens in Gregoriaans jaar −1'469'900 tot ergens in jaar 1'469'902.

Als je een grotere limiet wilt hebben dan kun je rekenen met 64-bitsgetallen, of de formule voor \( s \) vervangen door

\begin{eqnarray} ω_1 \| = \| \dfloorratio{c_1}{4} \\ s \| = \| 36524 c_1 + ω_1 + d_2 \end{eqnarray}

Dat heeft een limiet van \( w \) dagen, en hoger kan niet. Voor 32-bitsgetallen komt dat overeen met ongeveer 5,9 miljoen jaar.

Hier zijn wat voorbeelden (met \( d_2 = 0 \)) van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({c_1}\) \({146097 c_1}\) \({\dfrac{146097 c_1}{w}}\) \({s}\) \({\dfrac{s}{w}}\) \({ω_1}\) \({s}\)
−58000 −8473626000 −3.95 −2118406500 −0.99 −14500 −2118406500
−14600 −2133016200 −0.99 −533254050 −0.25 −3650 −533254050
−1 −146097 −6.8 × 10−5 −36525 −1.7 × 10−5 −1 −36525
0 0 0 0 0 0 0
1 146097 6.8 × 10−5 36524 1.7 × 10−5 0 36524
2 292194 1.4 × 10−4 73048 3.4 × 10−5 0 73048
3 438291 2.0 × 10−4 109572 5.1 × 10−5 0 109572
4 584388 2.7 × 10−4 146097 6.8 × 10−5 1 146097
14600 2133016200 0.99 533254050 0.25 3650 533254050
58000 8473626000 3.95 2118406500 0.99 14500 2118406500

16.2.2. Van CJDN naar Gregoriaanse datum (1)

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

                         ╔══ c₁ ═══════════╗
  a ═══════════╗ ╔═ a₁ ═(2)─ a₂ ──┐        ║
               (1)                │        ║
  m ─(−1)─ m₀ ─┘ └─ m₁ ──┐        │        ║
  d ─(−1)─ d₀ ──────────(3)─ d₁ ─(4)─ d₂ ─(5)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\) \({𝔘}\)
1 12 1 12 0 2 12 180 × 106
2 100 1 100 0 0 100 21 × 106
3 153 5 30 3 2 30.6 14 × 106
4 36525 100 365 25 0 365.25 59 × 103
5 146097 4 36524 1 0 36524.25 15 × 103

  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 \) binnen 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 \) binnen de rekeneeuw het jaartal \( a_2 \) binnen de rekeneew en het dagnummer \( d_1 \) binnen 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 \) binnen het rekenjaar in het maandnummer \( m_1 \) binnen het rekenjaar en het dagnummer \( d_0 \) binnen 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 \) binnen 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) \\ a \| = 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) \\ a \| = 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 \} \\ a \| = 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\} \\ a \| = 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}\) \({a}\) \({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

Berekening 5 geeft een limiet van \( w/4 \) dagen. Berekening 2 geeft een limiet van \( w/100 \) Gregoriaanse eeuwen, wat overeenkomt met ongeveer \( 365.25 w \) dagen. De gezamenlijke limiet is \( w/4 \) dagen. Voor 32-bitsgetallen komt dat overeen met ongeveer 1,5 miljoen jaar.

Als je een hogere limiet wilt dan kun je rekenen met 64-bitsgetallen, of berekening 5 vervangen door

\begin{eqnarray} \{ ω_2, δ_1 \} \| = \| \Div(s, 146097) \\ \{ ω_3, ω_4 \} \| = \| \Div(4 δ_1 + 3, 146097) \\ c_1 \| = \| 4 ω_2 + ω_3 \\ d_2 \| = \| \dfloorratio{ω_4}{4} \end{eqnarray}

Dat heeft een limiet van \( w \) dagen, en hoger kan niet. Voor 32-bitsgetallen komt dat overeen met ongeveer 5,9 miljoen jaar.

Hier zijn wat voorbeelden van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({s}\) \({4 s + 3}\) \({\dfrac{4 s + 3}{w}}\) \({c_1}\) \({ε_1}\) \({d_2}\) \({ω_2}\)
530000000 2120000003 0.99 14510 132533 33133 3627
2140000000 8560000003 3.99 58591 30676 7669 14647

\({s}\) \({δ_1}\) \({4 δ_1 + 3}\) \({ω_3}\) \({ω_4}\) \({c_1}\) \({d_2}\)
530000000 106181 424727 2 132533 14510 33133
2140000000 117241 468967 3 30676 58591 7669

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

  a ═══════════╗ ╔═ a₁ ══════════╗
               (1)               ║
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        ║
  d ─(−1)─ d₀ ─────────(2)─ d₁ ─[3]⇒ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 1 12 0 1 −2 0.083333
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 (16.1.1):

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

  3. Berekening 2 berekent het dagnummer \( d_1 \) binnen het rekenjaar uit het rekenmaandnummer \( m_1 \) en het dagnummer \( d_0 \) binnen 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 \) binnen 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 \| = a + α_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 \( a = 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 \| = a + α_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 \| = a + α_1 = 2003 + 0 = 2003 \\ A \| = 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:

\({a}\) \({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

Berekening 3 heeft een limiet van ongeveer \( w/365.2425 \) Gregoriaanse jaren ofwel \( w \) dagen, en hoger kan niet. Voor 32-bitsgetallen komt dit overeen met ongeveer 5,9 miljoen jaar.

16.2.4. Van CJDN naar Gregoriaanse Datum (2)

Nu gaan we weer de andere kant op.

  a ═══════════╗ ╔═ a₁ ══════════╗
               (1)               ║
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        ║
  d ─(−1)─ d₀ ─────────(2)─ d₁ ─[3]⇒ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 1 12 0 1 −2 0.0833333
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 \) binnen 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 \) binnen het rekenjaar in het maandnummer \( m_1 \) binnnen het rekenjaar en het dagnummer \( d_0 \) binnen 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) \\ a \| = 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) \\ a \| = 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 \} \\ a \| = 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(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 \} \\ a \| = 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}

Berekening 3 heeft een limiet van \( w/400 \) dagen. Voor 32-bitsgetallen komt dat overeen met ongeveer 15 duizend jaar. Het nulpunt van \( J \) ligt bij het jaar −4712 en met 15 duizend jaar daarbij kom je uit bij ongeveer het jaar 10 duizend.

Als je deze kalender ver voorbij het jaar 10'000 wilt kunnen gebruiken dan legt hoofdstuk 15.2 uit hoe je dat kunt doen. Dat kan door met 64-bitsgetallen te rekenen, of door de formule voor \( α_1 \) te vervangen door

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

Dat geeft een limiet van \( w \) dagen, en hoger kan niet. Voor 32-bitsgetallen komt dat overeen met ongeveer 5,9 miljoen jaar.

Hier zijn wat voorbeelden van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({s}\) \({400 s + 799}\) \({\dfrac{400 s + 799}{w}}\) \({α_1}\) \({ω_2}\) \({δ_2}\) \({400 δ_2 + 799}\) \({α_2}\) \({α_1}\)
5300000 2120000799 0.99 14510 36 40508 16203999 110 14510
2140000000 856000000799 398.61 5859121 14647 117241 46897199 321 5859121

16.2.5. Van Gregoriaanse datum naar CJDN (3)

De berekeningen zijn schematisch als volgt:

  a ════════════╗
  m ─(−1)─ m₀ ─(1)═ m₁ ═╗
  d ─(−1)─ d₀ ─────────[2]⇒ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 1 12 0 1 −2 0.08333
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*} 30 m_1 + \dfloorratio{7 m_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 \( \{a, 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 \| = 12 a + m_0 \\ s \| = 30 m_1 + \dfloorratio{7 m_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 \| = 12 a + m − 1 \\ J \| = 30 m_1 + \dfloorratio{7 m_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 \( a = 2003 \), \( m = 7 \), \( d = 6 \), en dan

\begin{align*} m_0 \| = m − 1 = 6 \\ d_0 \| = d − 1 = 5 \\ m_1 \| = 12 a + m_0 = 12×2003 + 6 = 24042 \\ s \| = 30 m_1 + \dfloorratio{7 m_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 \| = 12 a + m − 1 = 12×2003 + 7 − 1 = 24042 \\ J \| = 30 m_1 + \dfloorratio{7 m_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:

\({a}\) \({m}\) \({d}\) \({m_0}\) \({d_0}\) \({m_1}\) \({•7m_1}\) \({•\dfrac{m_1}{12}}\) \({•\dfrac{m_1}{48}}\) \({•\dfrac{m_1}{1200}}\) \({•\dfrac{m_1}{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

De limiet voor deze berekeningen is gelijk aan die voor de overeenkomstige Juliaanse kalender, dus voor 32-bitsgetallen ongeveer 5,9 miljoen jaar.

16.2.6. Van CJDN naar Gregoriaanse datum (3)

De berekeningen zijn schematisch als volgt:

  a ════════════╗
  m ─(−1)─ m₀ ─(1)═ m₁ ═╗
  d ─(−1)─ d₀ ─────────[2]⇒ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({r_i}\) \({h_i}\) \({t_i}\) \({g_i}\) \({γ_i}\) \({p}\)
1 1 12 0 1 −2 0.08333
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 \) binnen 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 \( a \) en maandnummer \( m_0 \) binnen het jaar. Dit is een kalenderniveau van type 1.

\begin{equation} \{ a, 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 \\ \{a, 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}\) \({a}\) \({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

Berekening 2 geeft een limiet van \( w/4800 \) dagen. Voor 32-bitgetallen komt dat overeen met ongeveer 1225 jaar. Dat is echt te weinig voor praktisch gebruik, want het nulpunt van \( J \) ligt in het jaar −4712 en 1225 jaar later is het jaar −3487 en dat is al ruim 5000 jaar geleden. Als je een hogere limiet wilt hebben dan kun je 64-bitsgetallen gebruiken of (volgens hoofdstuk 15.2) de formule voor \( μ_1 \) vervangen door

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

Hiermee wordt de limiet \( w \) dagen, en groter kan niet. Voor 32-bitsgetallen komt dit overeen met ongeveer 5,9 miljoen jaar.

Hier zijn wat voorbeelden van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({s}\) \({4800 s + 15793}\) \({\dfrac{4800 s + 15793}{w}}\) \({μ_1}\)
0 15793 7.4 × 10−6 0
1 20593 9.6 × 10−6 0
2 25393 1.2 × 10−5 0
445000 2136015793 0.99 14620
2140000000 10272000015793 4783.27 70309452

\({s}\) \({ω_1}\) \({δ_1}\) \({4800 δ_1 + 15793}\) \({μ_2}\) \({μ_1}\)
0 0 0 15793 0 0
1 0 1 20593 0 0
2 0 2 25393 0 0
445000 3 6709 32218993 220 14620
2140000000 14647 117241 562772593 3852 70309452

16.3. De Milanković-kalender

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.

Net als voor de Gregoriaanse kalender kunnen we dit op verschillende manieren aanpakken. We tonen hier alleen de manier die kalendertype 2 als hoogste heeft, want dat is in de praktijk de handigste.

16.3.1. Van Milanković-datum naar CJDN

Met deze schrikkeljaarregels 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 16.2.1). De berekeningen zijn schematisch als volgt:

                         ╔══ c₁ ══════════╗
  a ═══════════╗ ╔═ a₁ ═(2)─ a₂ ─┐        ║
               (1)               │        ║
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        │        ║
  d ─(−1)─ d₀ ─────────(3)─ d₁ ─(4)─ d₂ ─(5)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 1 12 0 1 −2 0.08333
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 Milanković-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 (16.1.1):

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

  3. Berekening 2 rekent het rekeneeuwnummer \( c_1 \) en jaarnummer \( a_2 \) binnen 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 \) binnen het rekenjaar uit het rekenmaandnummer \( m_1 \) binnen het rekenjaar en het dagnummer \( d_0 \) binnen 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 \) binnen de rekeneeuw uit uit het jaarnummer \( a_2 \) binnen de rekeneeuw en het dagnummer \( d_1 \) binnen 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 \) binnen 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 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(a + α_1, 100) \\ J \| = \dfloorratio{328718 c_1 + 6}{9} + \dfloorratio{36525 a_2}{100} \notag \\ \| + \dfloorratio{153 m_1 + 2}{5} + d + 1721119 \end{align}

Bijvoorbeeld, welke CJDN komt overeen met Milanković-datum 6 juli 2003? Dan is \( a = 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 \| = a + α_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 + 1721120 = 2452827 \end{align*}

Nog wat meer voorbeelden:

\({a}\) \({m}\) \({d}\) \({m_0}\) \({d_0}\) \({α_1}\) \({m_1}\) \({a_1}\) \({c_1}\) \({a_2}\) \({d_1}\) \({d_2}\) \({s}\) \({J}\)
−1000 12 15 11 14 0 9 −1000 −10 0 289 289 −364953 1356167
−1 12 31 11 30 0 9 −1 −1 99 305 36464 −60 1721060
0 1 1 0 0 −1 10 −1 −1 99 306 36465 −59 1721061
0 2 28 1 27 −1 11 −1 −1 99 364 36523 −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

Met de ingedikte formules:

\({a}\) \({m}\) \({d}\) \({α_1}\) \({m_1}\) \({c_1}\) \({a_2}\) \({J}\)
−1000 12 15 0 9 −10 0 1356167
−1 12 31 0 9 −1 99 1721060
0 1 1 −1 10 −1 99 1721061
0 2 28 −1 11 −1 99 1721119
0 3 1 0 0 0 0 1721120
1900 2 28 −1 11 18 99 2415079
1900 3 1 0 0 19 0 2415080
1999 12 31 0 9 19 99 2451544
2000 1 1 −1 10 19 99 2451545
2000 2 28 −1 11 19 99 2451603
2000 2 29 −1 11 19 99 2451604
2000 3 1 0 0 20 0 2451605
2003 7 6 0 4 20 3 2452827

Berekening 2 geeft geen extra beperking omdat daarvoor \( f = 1 \). Berekening 5 geeft een limiet van \( w/328718 \) Milanković-eeuwen, wat overeenkomt met ongeveer \( w/9 \) dagen, en dat is ook de gezamenlijke limiet. Voor 32-bitsgetallen komt die overeen met ongeveer 650 duizend jaar. Een meer gedetailleerde zoektocht (zoals beschreven in hoofdstuk 15.2.3) levert dat bovenstaande formules voor 32-bitgetallen de juiste resultaten geven voor CJDN −236'855'099 tot en met 240'330'413, wat overeenkomt met tussen ergens in Milanković-jaar −653'200 tot ergens in jaar 653'290.

Als je een grotere limiet wilt hebben dan kun je 64-bitsgetallen gebruiken of berekening 5 vervangen door

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

Dan wordt de limiet ongeveer \( w \) dagen, en hoger kan niet. Voor 32-bitsgetallen komt dit overeen met ongeveer 5,9 miljoen jaar.

Hier zijn wat voorbeelden (met \( d_2 = 0 \))van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({c_1}\) \({328718 c_1 + 6}\) \({\dfloor{328718 c_1 + 6}{w}}\) \({s}\) \({36524 c_1}\) \({\dfrac{36524 c_1}{w}}\) \({2 c_1 + 6}\) \({s}\)
6500 2136667006 0.99 237407445 237406000 0.11 13006 237407445
58700 19295746606 8.99 2143971845 2143958800 1.00 117406 2143971845

16.3.2. Van CJDN naar Milanković-datum

Ook in de omgekeerde richting doen we hetzelfde als voor de Gregoriaanse kalender (zie hoofdstuk 16.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₁ ══════════╗
  a ═══════════╗ ╔═ a₁ ═(2)─ a₂ ─┐        ║
               (1)               │        ║
  m ─(−1)─ m₀ ─┘ └─ m₁ ─┐        │        ║
  d ─(−1)─ d₀ ─────────(3)─ d₁ ─(4)─ d₂ ─(5)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 1 12 0 1 −2 0.08333
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 − 1721120 \end{equation}

  2. Berekening 5 haalt uit lopende dagnummer \( s \) het rekeneeuwnummer \( c_1 \) en het dagnummer \( d_2 \) binnen 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 \) binnen de rekeneeuw het jaartal \( a_2 \) binnen de rekeneew en het dagnummer \( d_1 \) binnen 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 \) binnen het rekenjaar in het maandnummer \( m_1 \) binnen het rekenjaar en het dagnummer \( d_0 \) binnen 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 \) binnen 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) \\ a \| = 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 − 15490078, 328718) \\ \{ a_2, ε_2 \} \| = \Div\dparen{100\dfloorratio{ε_1}{9} + 99, 36525} \\ \{ m_1, ε_3 \} \| = \Div\dparen{5\dfloorratio{ε_2}{100} + 2, 153} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) \\ a \| = 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 2452827? Dan is \( J = 2452827 \) en dan

\begin{align*} s \| = J − 1721120 = 2452827 − 1721120 = 731707 \\ \{c_1, ε_1 \} \| = \Div(9 s + 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(100 d_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(5 d_1 + 2, 153) = \Div(5×127 + 2, 153) \\ \| = \Div(637, 153) = \{4, 25\} \\ d_0 \| = \dfloorratio{ε_3}{5} = \dfloorratio{25}{5} = 5 \\ a_1 \| = 100 c_1 + a_2 = 100×20 + 3 = 2003 \\ \{α_1, m_0\} \| = \Div(m_1 + 2, 12) = \Div(4 + 2, 12) = \Div(6, 12) = \{ 0, 6 \} \\ a \| = 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(9 J − 15490078, 328718) \\ \| = \Div(9×2452827 − 15490078, 328718) \\ \| = \Div(6585365, 328718) = \{ 20, 11005 \} \\ \{ a_2, ε_2 \} \| = \Div\dparen{100\dfloorratio{ε_1}{9} + 99, 36525} = \Div\dparen{100\dfloorratio{11005}{9} + 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(635, 153) = \{ 4, 25 \} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) = \Div(4 + 2, 12) = \Div(6, 12) = \{ 0, 6 \} \\ a \| = 100 c_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}\) \({a}\) \({m}\) \({d}\)
1356167 −364953 −10 2605 289 0 28999 289 9 70 14 −1000 0 11 −1000 12 15
1721060 −60 −1 328180 36464 99 30524 305 9 150 30 −1 0 11 −1 12 31
1721061 −59 −1 328189 36465 99 30624 306 10 2 0 −1 1 0 0 1 1
1721119 −1 −1 328711 36523 99 36424 364 11 139 27 −1 1 1 0 2 28
1721120 0 0 2 0 0 99 0 0 2 0 0 0 2 0 3 1
2415079 693959 18 328709 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 328176 36464 99 30524 305 9 150 30 1999 0 11 1999 12 31
2451545 730425 19 328185 36465 99 30624 306 10 2 0 1999 1 0 2000 1 1
2451603 730483 19 328707 36523 99 36424 364 11 139 27 1999 1 1 2000 2 28
2451604 730484 19 328716 36524 99 36524 365 11 144 28 1999 1 1 2000 2 29
2451605 730485 20 7 0 0 99 0 0 2 0 2000 0 2 2000 3 1
2452827 731707 20 11005 1222 3 12724 127 4 25 5 2003 0 6 2003 7 6

Of, op de ingedikte manier,

\({J}\) \({c_1}\) \({ε_1}\) \({a_2}\) \({ε_2}\) \({m_1}\) \({ε_3}\) \({α_1}\) \({m_0}\) \({a}\) \({m}\) \({d}\)
1356167 −10 2605 0 28999 9 70 0 11 −1000 12 15
1721060 −1 328180 99 30524 9 150 0 11 −1 12 31
1721061 −1 328189 99 30624 10 2 1 0 0 1 1
1721119 −1 328711 99 36424 11 139 1 1 0 2 28
1721120 0 2 0 99 0 2 0 2 0 3 1
2415079 18 328709 99 36424 11 139 1 1 1900 2 28
2415080 19 0 0 99 0 2 0 2 1900 3 1
2451544 19 328176 99 30524 9 150 0 11 1999 12 31
2451545 19 328185 99 30624 10 2 1 0 2000 1 1
2451603 19 328707 99 36424 11 139 1 1 2000 2 28
2451604 19 328716 99 36524 11 144 1 1 2000 2 29
2451605 20 7 0 99 0 2 0 2 2000 3 1
2452827 20 11005 3 12724 4 25 0 6 2003 7 6

Berekening 5 geeft een limiet van \( w/9 \) dagen. Berekening 2 geeft een limiet van \( w/100 \) eeuwen wat overeenkomt met ongeveer \( 365.25 w \) dagen, dus geen extra beperking. De gezamenlijke limiet is \( w/9 \) dagen, wat voor 32-bitsgetallen overeenkomt met ongeveer 653 duizend jaar.

Als je de grootst mogelijke limiet wilt hebben dan kun je met 64-bitsgetallen rekenen of berekening 5 vervangen door

\begin{align} \{ ω_4, δ_1 \} \| = \Div(s, 328718) \\ \{ ω_5, ε_1 \} \| = \Div(9 δ_1 + 2,328718) \\ c_1 \| = 9 ω_4 + ω_5 \end{align}

Dat heeft een limiet van \( w \) dagen, en hoger kan niet. Voor 32-bitsgetallen komt dat overeen met ongeveer 5,8 miljoen jaar.

Hier zijn wat voorbeelden van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({s}\) \({9 s + 2}\) \({\dfrac{9 s + 2}{w}}\) \({c_1}\) \({ε_1}\) \({ω_4}\)
237000000 2133000002 0.99 6488 277618 720
2140000000 19260000002 8.97 58591 83664 6510

\({s}\) \({δ_1}\) \({9 δ_1 + 2}\) \({\dfrac{9 δ_1 + 2}{w}}\) \({ω_5}\) \({ε_1}\) \({c_1}\)
237000000 323040 2907362 1.4 × 10−3 8 277618 6488
2140000000 45820 412382 1.9 × 10−4 1 83664 58591

16.4. De Herschel-kalender

De Engelse geleerde John Herschel (1792 - 1871) heeft een aanpassing van de Gregoriaanse kalender voorgesteld om die wat beter de gemiddelde lengte van het zonnejaar te laten volgen. Zijn idee was om de regels voor schrikkeljaren uit te breiden met de regel dat een jaar toch geen schrikkeljaar is (en februari dus 28 dagen bevat) als het jaartal deelbaar is door 4000. Daarmee zijn de regels voor schrikkeljaren:

  1. alleen als het jaartal deelbaar is door 4

  2. maar toch niet als het jaartal deelbaar is door 100

  3. maar toch wel als het jaartal deelbaar is door 400

  4. maar toch niet als het jaartal deelbaar is door 4000.

Voor regel 4 moeten we één dag weghalen van het eind van elke groep van 10 400-rekenjaarperioden, dus de eerste 9 400-rekenjaarperioden moeten 146097 dagen lang zijn en de laatste moet 146096 dagen lang zijn. Dat krijgen we voor elkaar met een formule zoals

\[ d = \dfloorratio{1460969 c + 9}{10} \]

waar \( c \) het aantal 400-rekenjaarperioden is en \( d \) het aantal dagen binnen de huidige 4000-rekenjaarperiode, zoals te zien is aan de volgende tabel.

\({c}\) \({1460969 c + 9}\) \({d}\) \({∆d}\)
0 9 0 146097
1 1460978 146097 146097
2 2921947 292194 146097
3 4382916 438291 146097
4 5843885 584388 146097
5 7304854 730485 146097
6 8765823 876582 146097
7 10226792 1022679 146097
8 11687761 1168776 146097
9 13148730 1314873 146096
10 14609699 1460969

16.4.1. Van Herschel-datum naar CJDN

De berekeningen zijn schematisch als volgt:

                         ╔══ c₁ ═(5)═ c₂ ═══════════╗
                         ║        └── c₃ ──┐        ║
  a ═══════════╗ ╔═ a₁ ═(2)─ a₂ ──┐        │        ║
               (1)                │        │        ║
  m ─(−1)─ m₀ ─┘ └─ m₁ ──┐        │        │        ║
  d ─(−1)─ d₀ ──────────(3)─ d₁ ─(4)─ d₂ ─(6)─ d₃ ─(7)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\)
1 1 12 1 0 −2
2 1 100 1 0 0
3 153 5 30 3 2
4 36525 100 365 25 0
5 1 4 0 1 0
6 146097 4 36524 1 0
7 1460969 10 146096 9 9

De stappen zijn nu als volgt, van de Herschel-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:

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

  3. Berekening 2 rekent het rekeneeuwnummer \( c_1 \) en jaarnummer \( a_2 \) binnen 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 \) binnen het rekenjaar uit het rekenmaandnummer \( m_1 \) en het dagnummer \( d_0 \) binnen 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 \) binnen de rekeneeuw uit uit het jaarnummer \( a_2 \) binnen de rekeneeuw en het dagnummer \( d_1 \) binnen het rekenjaar.

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

  6. Berekening 5 berekent uit het lopende rekeneeuwnummer \( c_1 \) het lopende aantal \( c_2 \) 400-rekenjaarperioden en het aantal rekeneeuwen \( c_3 \) binnen de 400-rekenjaarperiode.

    \begin{equation} \{ c_2, c_3 \} = \Div(c_1, 4) \end{equation}

  7. Berekening 6 rekent het dagnummer \( d_3 \) binnen de 400-rekenjaarperiode uit uit het rekeneeuwnummer \( c_3 \) binnen de 400-rekenjaarperiode en het dagnummer \( d_2 \) binnen de laatste rekeneeuw.

    \begin{equation} d_3 = \dfloorratio{146097 c_3}{4} + d_2 \end{equation}

  8. Berekening 7 rekent het lopende dagnummer \( s \) uit uit het lopende aantal 400-rekenjaarperioden \( c_2 \) en het dagnummer \( d_3 \) binnen de laatste 400-rekenjaar-periode.

    \begin{equation} s = \dfloorratio{1460969 c_2 + 9}{10} + d_3 \end{equation}

  9. 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(a + α_1, 100) \\ \{ c_2, c_3 \} \| = \Div(c_1, 4) \\ J \| = \dfloorratio{1460969 c_2 + 9}{10} + \dfloorratio{146097 c_3}{4} + \dfloorratio{36525 a_2}{100} \notag \\ \| + \dfloorratio{153 m_1 + 2}{5} + d + 1721119 \end{align}

Bijvoorbeeld, welke CJDN komt overeen met datum 11 augustus 2022 in de Hershel-kalender? Dan is \( a = 2022 \), \( m = 8 \), \( d = 11 \), en dan

\begin{align*} \{ α_1, m_1 \} \| = \Div(m − 3, 12) = \Div(8 ― 3, 12) = \Div(5, 12) = \{ 0, 5 \} \\ \{ c_1, a_2 \} \| = \Div(a + α_1, 100) = \Div(2022 + 0, 100) \\ \| = \Div(2022, 100) = \{ 20, 22 \} \\ \{ c_2, c_3 \} \| = \Div(c_1, 4) = \Div(20, 4) = \{ 5, 0 \} \\ J \| = \dfloorratio{1460969 c_2 + 9}{10} + \dfloorratio{146097 c_3}{4} + \dfloorratio{36525 a_2}{100} \\ \| + \dfloorratio{153 m_1 + 2}{5} + d + 1721120 \\ \| = \dfloorratio{1460969×5 + 9}{10} + \dfloorratio{146097×0}{4} + \dfloorratio{36525×22}{100} \\ \| + \dfloorratio{153×5 + 2}{5} + 11 + 1721120 \\ \| + \dfloorratio{153 m_1 + 2}{5} + d + 1721120 \\ \| = \dfloorratio{7304854}{10} + 0 + \dfloorratio{803550}{100} \\ \| + \dfloorratio{767}{5} + 11 + 1721120 \\ \| = 730485 + 0 + 8035 + 153 + 11 + 1721119 = 2459803 \end{align*}

Nog wat meer voorbeelden:

\({a}\) \({m}\) \({d}\) \({α_1}\) \({m_1}\) \({c_1}\) \({a_2}\) \({c_2}\) \({c_3}\) \({•c_2}\) \({•c_3}\) \({•a_2}\) \({•m_1}\) \({J}\)
2022 7 22 0 4 20 22 5 0 730485 0 8035 122 2459783
1000 1 1 −1 10 9 99 2 1 292194 36524 36159 306 2086303
2000 2 29 −1 11 19 99 4 3 584388 109572 36159 337 2451604
2000 3 1 0 0 20 0 5 0 730485 0 0 0 2451605
2022 8 11 0 5 20 22 5 0 730485 0 8035 153 2459803
3600 2 29 −1 11 35 99 8 3 1168776 109572 36159 337 3035992
3600 3 1 0 0 36 0 9 0 1314873 0 0 0 3035993
4000 2 28 −1 11 39 99 9 3 1314873 109572 36159 337 3182088
4000 3 1 0 0 40 0 10 0 1460969 0 0 0 3182089
5800000 1 1 −1 10 57999 99 14499 3 2118258954 109572 36159 306 2120126111

Berekening 4 geeft een limiet van \( w/365.25 \) jaren, wat overeenkomt met \( w \) dagen. Berekening 7 geeft een limiet van \( w/1460969 \) 400-rekenjaarperioden, wat overeenkomt met \( w/10 \) dagen. De gezamenlijke limiet is \( w/10 \) dagen, wat voor 32-bitsgetallen overeenkomt met ongeveer 588'000 jaar. Een meer gedetailleerde zoektocht (zoals beschreven in hoofdstuk 15.2.3) levert dat bovenstaande formules voor 32-bitgetallen de juiste resultaten geven voor CJDN −212'895'226 tot en met 216'469'484, wat overeenkomt met tussen ergens in Herschel-jaar −587'600 tot ergens in jaar 587'961.

Als je de grootst mogelijke limiet wilt dan kun je rekenen met 64-bitsgetallen, of de formule voor \( s \) vervangen door

0

\begin{equation} s = 146096 c_2 + \dfloorratio{9 c_2 + 9}{10} + d_3 \end{equation}

Dan wordt de limiet \( w \) dagen, wat voor 32-bitsgetallen overeenkomt met 5,9 miljoen jaar.

Bijvoorbeeld, als \( a = 5800000 \) dan is \( c_2 = 14499 \). Met de oude formule voor \( s \) (en met \( d_3 = 0 \)) krijg je dan

\begin{align*} s \| = \dfloorratio{1460969 c_2 + 9}{10} = \dfloorratio{1460969×14499 + 9}{10} \\ \| = \dfloorratio{21182589540}{10} = 2118258954 \end{align*}

Het grootste tussenresultaat 21'182'589'540 is pakweg 10 keer te groot om in een 32-bitsgetal te passen. Met de omweg vinden we (voor \( d_3 = 0 \))

\begin{align*} s \| = 146096 c_2 + \dfloorratio{9 c_2 + 9}{10} = 146096×14499 + \dfloorratio{9×14499 + 9}{10} \\ \| = 2118245904 + \dfloorratio{130500}{10} = 2118245904 + 13050 = 2118258954 \end{align*}

Dat is hetzelfde resultaat als met de oude formule, maar nu is het grootste tussenresultaat ook het eindresultaat, en dat is net klein genoeg om een 32-bitsgetal te zijn.

16.4.2. Van CJDN naar Herschel-datum

De berekeningen zijn schematisch als volgt:

                         ╔══ c₁ ═(5)═ c₂ ═══════════╗
                         ║        └── c₃ ──┐        ║
  a ═══════════╗ ╔═ a₁ ═(2)─ a₂ ──┐        │        ║
               (1)                │        │        ║
  m ─(−1)─ m₀ ─┘ └─ m₁ ──┐        │        │        ║
  d ─(−1)─ d₀ ──────────(3)─ d₁ ─(4)─ d₂ ─(6)─ d₃ ─(7)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\)
1 1 12 1 0 −2
2 1 100 1 0 0
3 153 5 30 3 2
4 36525 100 365 25 0
5 1 4 0 1 0
6 146097 4 36524 1 0
7 1460969 10 146096 9 9

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

  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 7 haalt uit het lopende dagnummer \( s \) het aantal \( c_2 \) 400-rekenjaar-perioden en het dagnummer \( d_3 \) binnen de laatste 400-rekenjaarperiode.

    \begin{align} \{ c_2, ε_1 \} \| = \Div(10 s, 1460969) \\ d_3 \| = \dfloorratio{ε_1}{10} \end{align}

  3. Berekening 6 haalt uit het dagnummer \( d_3 \) sinds het begin van de laatste 400-rekenjaarperiode het aantal \( c_3 \) rekeneeuwen binnen de laatste 400-rekenjaarperiode en het dagnummer \( d_2 \) binnen de laatste rekeneeuw.

    \begin{align} \{ c_3, ε_2 \} \| = \Div(4 d_3 + 3, 146097) \\ d_2 \| = \dfloorratio{ε_2}{4} \end{align}

  4. Berekening 5 berekent het aantal rekeneeuwen sinds rekenjaar 0 uit het aantal \( c_3 \) rekeneeuwen binnen de laatste 400-rekanjaarperiode en het aantal \( c_2 \) 400-rekenjaarperioden sinds rekenjaar 0.

    \begin{equation} c_1 = 4 c_2 + c_3 \end{equation}

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

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

  6. 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 \) binnen de rekenmaand.

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

  7. Berekening 2 voegt het rekeneeuwnummer \( c_1 \) en het rekenjaarnummer \( a_2 \) binnen de rekeneeuw samen tot het rekenjaarnummer \( a_1 \).

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

  8. 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) \\ a \| = a_1 + α_1 \end{align}

  9. 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} \{ c_2, ε_1 \} \| = \Div(10 J − 17211200, 1460969) \\ \{ c_3, ε_2 \} \| = \Div\dparen{4 \dfloorratio{ε_1}{10} + 3, 146097} \\ \{ a_2, ε_3 \} \| = \Div\dparen{100 \dfloorratio{ε_2}{4} + 99, 36525} \\ \{ m_1, ε_4 \} \| = \Div\dparen{5 \dfloorratio{ε_3}{100} + 2, 153} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) \\ a \| = 400 c_2 + 100 c_3 + a_2 + α_1 \\ m \| = m_0 + 1 \\ d \| = \dfloorratio{ε_4}{5} + 1 \end{align}

Bijvoorbeeld, wat is de Herschel-datum die hoort bij CJDN 2459803? Dan is \( J = 2459803 \) en dan

\begin{align*} \{ c_2, ε_1 \} \| = \Div(10 J − 17211200, 1460969) = \Div(10×2459803 − 17211200, 1460969) \\ \| = \Div(7386830, 1460969) = \{ 5, 81985 \} \\ \{ c_3, ε_2 \} \| = \Div\dparen{4 \dfloorratio{ε_1}{10} + 3, 146097} = \Div\dparen{4 \dfloorratio{81985}{10} + 3, 146097} \\ \| = \Div(4×8198 + 3, 146097) = \Div(32795, 146097) = \{ 0, 32795 \} \\ \{ a_2, ε_3 \} \| = \Div\dparen{100 \dfloorratio{ε_2}{4} + 99, 36525} = \Div\dparen{100 \dfloorratio{32795}{4} + 99, 36525} \\ \| = \Div(100×8198 + 99, 36525) = \Div(819899, 36525) = \{ 22, 16349 \} \\ \{ m_1, ε_4 \} \| = \Div\dparen{5 \dfloorratio{ε_3}{100} + 2, 153} = \Div\dparen{5 \dfloorratio{16349}{100} + 2, 153} \\ \| = \Div(5×163 + 2, 153) = \Div(817, 153) = \{ 5, 52 \} \\ \{ α_1, m_0 \} \| = \Div(m_1 + 2, 12) = \Div(5 + 2, 12) = \Div(7, 12) = \{ 0, 7 \} \\ a \| = 400 c_2 + 100 c_3 + a_2 + α_1 = 400×5 + 100×0 + 22 + 0 = 2022 \\ m \| = m_0 + 1 = 7 + 1 = 8 \\ d \| = \dfloorratio{ε_4}{5} + 1 = \dfloorratio{52}{5} + 1 = 10 + 1 = 11 \end{align*}

dus de datum is dag 11 in maand 8 in jaar 2022.

Nog wat meer voorbeelden:

\({J}\) \({c_2}\) \({ε_1}\) \({c_3}\) \({ε_2}\) \({a_2}\) \({ε_3}\) \({m_1}\) \({ε_4}\) \({α_1}\) \({m_0}\) \({a}\) \({m}\) \({d}\)
2459783 5 81785 0 32715 22 14349 4 105 0 6 2022 7 22
2086303 2 729892 1 145862 99 30624 10 2 1 0 1000 1 1
2451604 4 1460964 3 146096 99 36524 11 144 1 1 2000 2 29
2451605 5 5 0 3 0 99 0 2 0 2 2000 3 1
2459803 5 81985 0 32795 22 16349 5 52 0 7 2022 8 11
3035992 8 1460968 3 146096 99 36524 11 144 1 1 3600 2 29
3035993 9 9 0 3 0 99 0 2 0 2 3600 3 1
3182088 9 1460959 3 146092 99 36424 11 139 1 1 4000 2 28
3182089 10 0 0 3 0 99 0 2 0 2 4000 3 1
2120126111 14499 1460379 3 145860 99 30624 10 2 1 0 5800000 1 1

Berekening 7 heeft een limiet van \( w/10 \) dagen en dat is ook de gezamenlijke limiet. Voor 32-bitsgetallen komt dat overeen met ongeveer 580'000 jaar.

Als je een grotere limiet wilt dan kun je met 64-bitsgetallen rekenen of anders de formule voor \( \{ c_2, ε_1 \} \) vervangen door

\begin{align} \{ ω_1, δ_1 \} \| = \Div(s, 1460969) \\ \{ ω_2, ε_1 \} \| = \Div(10 δ_1, 1460969) \\ c_2 \| = 10 ω_1 + ω_2 \end{align}

Daarmee wordt de limiet \( w \) dagen, wat voor een 32-bitsgetal overeenkomt met ongeveer 5,8 miljoen jaar.

Bijvoorbeeld, voor \( s = 2120126111 \) geeft de oude formule

\begin{align*} \{ c_2, ε_1 \} \| = \Div(10 s, 1460969) = \Div(10×2120126111, 1460969) \\ \| = \Div(21201261110, 1460969) = \{ 14511, 1139951 \} \end{align*}

Hierin is het grootste tussenresultaat gelijk aan 21'201'261'110, wat ongeveer 10 keer te groot is om een 32-bitsgetal te zijn. Met de omweg vinden we

\begin{align} \{ ω_1, δ_1 \} \| = \Div(s, 1460969) = \Div(2120126111, 1460969) = \{ 1451, 260092 \} \\ \{ ω_2, ε_1 \} \| = \Div(10 δ_1, 1460969) = \Div(10×260092, 1460969) \\ \| = \Div(2600920, 1460969) = \{ 1, 1139951 \} \\ c_2 \| = 10 ω_1 + ω_2 = 10×1451 + 1 = 14511 \end{align}

dus dezelfde resultaten als voorheen, maar nu is het grootste tussenresultaat gelijk aan het begingetal, en dat is net klein genoeg om een 32-bitsgetal te zijn.

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

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 kalenderniveaus zijn heel schematisch als volgt:

  a ════════════════╗
  m ─ m₀ ──┐        ║
  d ─ d₀ ─(1)─ d₁ ─(2)═ J

16.5.1. Van Egyptische datum naar CJDN

De kalenderniveaus zijn schematisch als volgt:

  a ═════════════════════╗
  m ─(−1)─ m₀ ──┐        ║
  d ─(−1)─ d₀ ─(1)─ d₁ ─(2)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus 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 \) binnen het jaar en het dagnummer \( d_0 \) binnen de maand samen tot het dagnummer \( d_1 \) binnen het jaar.

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

  3. Berekening 2 voegt het jaarnummer \( a \) en het dagnummer \( d_1 \) binnen het jaar samen tot het lopende dagnummer \( s \).

    \begin{equation} s = 365 a + 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 = 365a + 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 \| = 365a + 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 \| = 365a + 30m + d + 1448242 \\ \| = 365×218 + 30×5 + 7 + 1448242 = 1527969 \end{align*}

dus hetzelfde antwoord als voorheen. Nog een paar voorbeelden:

\({a}\) \({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

Berekening 2 geeft een limiet van \( w/365 \) jaar, wat overeenkomt met \( w \) dagen, en groter kan niet. Voor 32-bitsgetallen komt dat overeen met ongeveer 5,9 miljoen jaar. Een meer gedetailleerde zoektocht (zoals beschreven in hoofdstuk 15.2.3) levert dat bovenstaande formules voor 32-bitgetallen de juiste resultaten geven voor CJDN −2'146'035'375 tot en met 2'147'483'647, wat overeenkomt met tussen ergens in egyptisch jaar −5'883'517 tot ergens in jaar 5'879'548.

16.5.2. Van CJDN naar Egyptische datum

In omgekeerde richting zijn de berekeningen ook eenvoudig.

De kalenderniveaus zijn schematisch als volgt:

  a ═════════════════════╗
  m ─(−1)─ m₀ ──┐        ║
  d ─(−1)─ d₀ ─(1)─ d₁ ─(2)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus 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 \( a \) en het dagnummer \( d_1 \) binnen het jaar.

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

  3. Berekening 1 splits the dagnummer \( d_1 \) binnen het jaar in het maandnummer \( m_0 \) binnen het jaar en het dagnummer \( d_0 \) binnen 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 \\ \{ a, 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}\) \({a}\) \({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

Berekeningen 1 en 2 geven geen extra beperking (voor 32-bitsgetallen) omdat daarvoor \( f = 1 \). Daarom geldt alleen de algemene limieten dat \( J \) en \( s \) kleiner moeten zijn dan \( w \) dagen ofwel 5.9 miljoen jaar.

16.6. De Babylonische kalender

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:

  a ══╗
  m ─(1)═ m₁ ═╗
  d ─────────(2)═ J

16.6.1. Van Babylonische datum naar CJDN

De berekeningen zijn schematisch:

  a ════════════╗
  m ─(−1)─ m₀ ─(1)═ m₁ ═╗
  d ─(−1)─ d₀ ─────────(2)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus 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 \( a \) en het maandnummer \( m_0 \) binnen het jaar het lopende maandnummer \( m_1 \).

    \begin{equation} m_1 = \dfloorratio{235a + 13}{19} + m_0 \label{eq:j2μ1} \end{equation}

  3. Berekening 2 berekent uit het lopende maandnummer \( m_1 \) en het dagnummer \( d_0 \) binnen 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{235a + 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 \( a = 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{235a + 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:

\({a}\) \({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

Berekening 1 heeft een limiet van \( w/235 \) jaren, wat overeenkomt met ongeveer \( 1.6 w \) dagen. Berekening 2 heeft een limiet van \( w/6940 \) maanden, wat overeenkomt met ongeveer \( w/235 \) dagen, en dat is ook de gezamenlijke limiet. Voor 32-bitsgetallen komt die overeen met 25 duizend jaar. Een meer gedetailleerde zoektocht (zoals beschreven in hoofdstuk 15.2.3) levert dat bovenstaande formules voor 32-bitgetallen de juiste resultaten geven voor CJDN −7'531'034 tot en met 10'745'402, wat overeenkomt met tussen ergens in babylonisch jaar −25'019 tot ergens in jaar 25'018.

Als je dat te weinig vindt dan kun je 64-bitsgetallen gebruiken of het bereik van berekening 2 vergroten zoals beschreven in hoofdstuk 15.2. Je kunt de formule voor \( s \) vervangen door

\begin{eqnarray} \{ ω_1, μ_1 \} \| = \| \Div(m_1, 235) \\ ω_2 \| = \| \dfloorratio{125 μ_1}{235} \\ s \| = \| 29 m_1 + 125 ω_1 + ω_2 + d_0 \end{eqnarray}

Dit verhoogt de limiet naar \( w/29.53 \) maanden ofwel ongeveer \( w \) dagen, en hoger kan niet. Voor 32-bitsgetallen komt dat overeen met ongeveer 5,9 miljoen jaar.

Hier zijn wat voorbeelden (met \( d_0 = 0 \)) van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({m_1}\) \({6940 m_1}\) \({\dfrac{6940 m_1}{w}}\) \({s}\) \({ω_1}\) \({μ_1}\) \({125 μ_1}\) \({ω_2}\) \({s}\)
305000 2116700000 0.99 9007234 1297 205 25625 109 9007234
72000000 499680000000 232.68 2126297872 306382 230 28750 122 2126297872

16.6.2. Van CJDN naar Babylonische Datum

Nu gaan we de andere kant op, van Juliaanse dagnummer \( J \) naar dag \( d \), maand \( m \), jaar \( a \) in de era van Seleukos.

De berekeningen zijn schematisch:

  a ════════════╗
  m ─(−1)─ m₀ ─(1)═ m₁ ═╗
  d ─(−1)─ d₀ ─────────(2)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus 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 \) binnen 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 \( a \) en het maandnummer \( m_0 \) binnen het jaar af.

    \begin{align} \{ a, ε_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) \\ \{ a, ε_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 \\ \{ a, ε_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\} \\ \{ a, ε_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}\) \({a}\) \({ε_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

Berekening 1 heeft een limiet van \( w/19 \) maanden, wat overeenkomt met ongeveer \( 1.6 w \) dagen. Berekening 2 heeft een limiet van \( w/235 \) dagen, en dat is ook de gezamenlijke limiet. Voor 32-bitsgetallen komt die overeen met ongeveer 25 duizend jaar.

Als je een grotere limiet wilt dan kun je 64-bitsgetallen gebruiken of berekening 2 vervangen door

\begin{eqnarray} \{ ω_3, δ_1 \} \| = \| \Div(s, 6940) \\ \{ μ_1, ε_1 \} \| = \| \Div(235 δ_1 + 234, 6940) \\ m_1 \| = \| 235 ω_3 + μ_1 \\ d_0 \| = \| \dfloorratio{ε_1}{235} \end{eqnarray}

Daarmee wordt de limiet \( w \) dagen, en hoger kan niet. Voor 32-bitsgetallen komt dat overeen met ongeveer 5,9 miljoen jaar.

Hier zijn wat voorbeelden van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({s}\) \({235 s + 234}\) \({\dfrac{235 s + 234}{w}}\) \({m_1}\) \({ε_1}\)
9100000 2138500234 1.00 308141 1694
2140000000 502900000234 234.18 72463976 6794

\({s}\) \({ω_3}\) \({δ_1}\) \({235 δ_1 + 234}\) \({μ_1}\) \({ε_1}\) \({m_1}\)
9100000 1311 1660 390334 56 1311 308141
2140000000 308357 2420 568934 81 2997 72463976

16.7. De Joodse kalender

De Joodse kalender is een zongebonden maankalender, net als de Babylonische kalender. De Joodse kalender is veel ingewikkelder dan de Babylonische, want

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 kalendermaand 1 (nisan) maar de eerste dag van kalendermaand 7 (tisjrie). Op kalendermaand 6 (eloel) van jaar \( a \) volgt kalendermaand 7 (tisjrie) van jaar \( a + 1 \). Kalendermaand 1 (nisan) valt halverwege het kalenderjaar, niet aan het begin.

De extra maand (de embolistische maand) wordt ingevoegd tussen kalendermaand 11 (sjewat) en kalendermaand 12 (adar), dus halverwege het kalenderjaar.

De berekeningen zijn heel schematisch als volgt:

  a ═╗ ╔ a₁ ═╦══════════╗
     (1)     ╚(2)═ m₂ ╗ ║
  m ─┘ └ m₁ ──────────║─║───────┐
  d ──────────────────║─║───────│────────┐
                      (3)⇒ d₁ ═(4)⇒ d₂ ⇔(5)⇒ J

16.7.1. Van Joodse Datum naar CJDN

De berekeningen zijn schematisch als volgt:

  a ═╗ ╔ a₁ ═╦══════════╗
     (1)     ╚(2)═ m₂ ╗ ║
  m ─┘ └ m₁ ──────────║─║───────┐
  d ─(−1)─ d₀ ────────║─║───────│────────┐
                      [3]⇒ d₁ ═(4)⇒ d₂ ⇔[5]⇒ s ═(+J₀)⇔ J

De kalenderniveaus zijn

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
2 235 19 12 7 −234 12.368
3 765433 25920 29 13753 12084 29.531
4 384 13 29 7 10 29.538

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

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

  1. Eerst trekken we 1 af van het dagnummer \( d \) zodat het begint met 0 in plaats van 1.

    \begin{equation} d_0 = d − 1 \end{equation}

    Voor de voorbeelddata vinden we

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

  2. Berekening 1 geeft het rekenjaar en de rekenmaand.

    Tussen nieuwjaar van kalenderjaar \( a − 1 \) en kalendermaanden 1 t/m 6 van datzelfde kalenderjaar zit in sommige jaren wel maar in andere jaren geen embolistische maand. Daarmee is het berekenen van het dagnummer binnen het jaar lastig voor die kalendermaanden. Het is daarom handiger om die maanden te veschuiven naar rekenjaar \( a \), en ze te berekenen vanaf nieuwjaar van kalenderjaar \( a \).

    Daartoe definiëren we rekenjaartal \( a_1 \) en rekenmaandnummer \( m_1 \). We geven de maand van nieuwjaar (tisjrie, kalendermaand 1) het rekenmaandnummer 0 omdat we verder alle berekeningen ten opzichte van nieuwjaar doen.

    \begin{align} m_1 \| = m − 7 \\ a_1 \| = a − \dfloorratio{m − 7}{10} = a − \dfloorratio{m_1}{10} \end{align}

    Dan krijgen we

    \({a}\) \({m}\) \({a_1}\) \({m_1}\)
    0 12 0 5
    0 13 0 6
    0 1 1 −6
    0 2 1 −5
    0 3 1 −4
    0 4 1 −3
    0 5 1 −2
    0 6 1 −1
    1 7 1 0
    1 8 1 1
    1 9 1 2
    1 10 1 3
    1 11 1 4
    1 12 1 5
    1 1 2 −6
    1 2 2 −5

    Voor de voorbeelddata vinden we

    \({a}\) \({m}\) \({d}\) \({a_1}\) \({m_1}\) \({d_0}\)
    4524 7 30 4524 0 29
    4524 9 30 4524 2 29
    4527 3 1 4528 −4 0
    4682 9 12 4682 2 11
    4682 3 18 4683 −4 17
    325709 13 29 325709 6 28

  3. Berekening 2 levert het lopende maandnummer \( m_2 \) van nieuwjaar van rekenjaar \( a_1 \). Nieuwjaar van rekenjaar \( a_1 \) is gelijk aan nieuwjaar van het kalenderjaar met datzelfde nummer.

    \begin{equation} m_2 = \dfloorratio{235 a_1 − 234}{19} \end{equation}

    Voor nieuwjaar van het Joodse jaar 4682 (\( a_1 = 4682 \)) vinden we

    \begin{align*} m_2 \| = \dfloorratio{235 a_1 − 234}{19} = \dfloorratio{235×4682 − 234}{19} \\ \| = \dfloorratio{1100036}{19} = 57896 \end{align*}

    dus nieuwjaar van jaar 4682 is 57896 maanden na nieuwjaar van jaar 1.

    Voor de voorbeelddata vinden we

    \({a}\) \({m}\) \({a_1}\) \({m_2}\)
    4524 7 4524 55942
    4524 9 4524 55942
    4527 3 4528 55991
    4682 9 4682 57896
    4682 3 4683 57909
    325709 13 325709 4028493

  4. Berekening 3 levert het lopende dagnummer \( d_1 \) van nieuwjaar van jaar \( a_1 \). Dat is gelijk aan het lopende dagnummer van nieuwjaar van het kalenderjaar met datzelfde nummer. Dit is een ingewikkelde berekening die niet alleen afhangt van dat jaar maar ook van het vorige en volgende jaar.

    De epoche van de kalender (het begin van 1 tisjrie van het jaar 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 nieuwjaarsdag 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 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 \( m_2 \) is dan gelijk aan

    \begin{equation} δ_1 = \dfrac{765433 m_2 + 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 m_2 + 5604}{25920} \end{equation}

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

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

    Merk op dat het grootste tussenresultaat 44'315'514'572 veel te groot is om een 32-bitsgetal te zijn.

    Voor de voorbeelddata vinden we

    \({a}\) \({m}\) \({d}\) \({a_1}\) \({m_2}\) \({δ_2}\)
    4524 7 30 4524 55942 1652000
    4524 9 30 4524 55942 1652000
    4527 3 1 4528 55991 1653447
    4682 9 12 4682 57896 1709703
    4682 3 18 4683 57909 1710087
    325709 13 29 325709 4028493 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 m_2 + 12084}{25920} \label{eq:υ_1} \end{equation}

      Voor jaar 4682 vinden we

      \begin{align*} δ_3 \| = \dfloorratio{765433 m_2 + 12084}{25920} = \dfloorratio{765433×57896 + 12084}{25920} \\ \| = \dfloorratio{44315521052}{25920} = 1709703 = δ_2 \end{align*}

      dus voor dat jaar heeft de eerste vertraging geen invloed.

      Voor de voorbeelddata vinden we

      \({a}\) \({m}\) \({d}\) \({a_1}\) \({m_2}\) \({δ_2}\) \({δ_3}\)
      4524 7 30 4524 55942 1652000 1652000
      4524 9 30 4524 55942 1652000 1652000
      4527 3 1 4528 55991 1653447 1653447
      4682 9 12 4682 57896 1709703 1709703
      4682 3 18 4683 57909 1710087 1710087
      325709 13 29 325709 4028493 118963791 118963792

      dus uit deze voorbeelden wordt alleen nieuwjaar van jaar 325709 door de eerste vertraging beïnvloed.

    2. 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 = δ_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}

    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(a_1) \) van rekenjaar \( a_1 \) (met inachtneming van de eerste twee vertragingen) is gelijk aan

      \begin{equation} L_2(a_1) = δ_5(a_1 + 1) − δ_5(a_1) \end{equation}

      dus nieuwjaar van jaar \( a_1 \) wordt 2 dagen vertraagd als \( L_2(a_1) = 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 rekenjaar \( a_1 \) wordt 1 dag vertraagd als \( L_2(a_1 − 1) = 382 \). Dit krijgen we voor elkaar met formule

      \begin{equation} δ_7 = \dmod{\dfloorratio{L_2(a_1 − 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} m_2(a_1) \| = \dfloorratio{235 a_1 − 234}{19} \\ δ_3(a_1) \| = \dfloorratio{765433 m_2(a_1) + 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(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} \notag \\ \| = δ_5(a_1) + 2\dmod{\dfloorratio{δ_5(a_1 + 1) − δ_5(a_1) + 19}{15}}{2} \notag \\ \| + \dmod{\dfloorratio{δ_5(a_1) − δ_5(a_1 − 1) + 7}{15}}{2} \end{align}

      Merk op dat voor de berekening van \( d_1 \) van jaar \( a_1 \) de waarden van \( δ_5(a_1 − 1) \), \( δ_5(a_1) \) en \( δ_5(a_1 + 1) \) nodig zijn.

    We weten nu het lopende dagnummer \( d_1 \) van nieuwjaar (1 tisjrie) van rekenjaar \( a_1 \), wat gelijk is aan het lopende dagnummer van nieuwjaar van het kalenderjaar met datzelfde nummer.

    De lengte \( L \) van rekenjaar \( a_1 \) (en van het kalenderjaar met datzelfde nummer) is dan

    \begin{equation} L = d_1(a_1 + 1) − d_1(a_1) \end{equation}

    Voor de berekening van \( L \) voor jaar \( a_1 \) heb je \( δ_5 \) nodig voor de 4 jaren \( a_1 − 1 \) tot en met \( a_1 + 2 \).

    Er zijn geen jaren waarvoor \( L_2(a_1) = 356 \) en tegelijkertijd \( L_2(a_1 − 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 \( a_1 = 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 \( a_1 = 4682 \) na de eerste twee vertragingen is \( L_2(4682) = δ_5(4683) − δ_5(4682) = 1710087 − 1709704 = 383 \) dagen. Het jaar met \( a_1 = 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:

    \({a_1}\) \({δ_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

  5. Berekening 4 levert het lopende dagnummer \( d_2 \) van de eerste dag van rekenmaand \( m_1 \) 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 voor elke jaarlengte in een simpel kalenderniveau (van type 1 of 2 uit hoofdstuk 15.11), want voor zo'n kalenderniveau geldt dat het aantal maanden in elk opeenvolgend groepje met dezelfde maandlengte varieert met niet meer dan één, en dat is hier niet altijd het geval. Hier is dat aantal maanden meestal gelijk aan 1, soms gelijk aan 2 (voor shevat en adar Ⅰ in een embolistisch jaar) maar ook soms gelijk aan 3 (voor chesjwan t/m teweet in een onvolledig jaar van 353 of 383 dagen lang, en voor tisjrie t/m kisleew in een volledig jaar van 355 of 385 dagen).

    De lengtes die de maanden in een jaar van 384 dagen hebben passen bij de formule

    \begin{equation} δ_8 = \dfloorratio{384 m_1 + 10}{13} \end{equation}

    waarbij \( m_1 \) het rekenmaandnummer is en \( δ_8 \) het dagnummer van de eerste dag van die maand is sinds de eerste dag van de meest recente maand 1. Let op: in een gewoon jaar van 12 maanden geven wij maand adar het kalendermaandnummer \( m = 12 \) en rekenmaandnummer \( m_1 = 5 \) maar in een embolistisch jaar van 13 maanden geven wij adar (die dan adar Ⅱ genoemd wordt) het kalendermaandnummer \( m = 13 \) en rekenmaandnummer \( m_1 = 6 \).

    \({m}\) \({m_1}\) \({δ_8}\) \({∆δ_8}\)
    1 −6 −177 30
    2 −5 −147 29
    3 −4 −118 30
    4 −3 −88 29
    5 −2 −59 30
    6 −1 −29 29
    7 0 0 30
    8 1 30 29
    9 2 59 30
    10 3 89 29
    11 4 118 30
    12 5 148 30
    13 6 178 29
    14 7 207

    Deze formule kan ook gebruikt worden voor de maandlengtes in een gewoon regelmatig jaar van 354 dagen, als de lengte van het jaar de 12e kalendermaand (\( m = 12 \), \( m_1 = 5 \)) 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 onvolledig jaar met 353 of 383 dagen moet maand 9 een dag korter worden. In een volledig jaar met 355 of 385 dagen moet maand 8 een dag langer worden. De correcties \( δ_9 \) voor maand 8 en \( δ_{10} \) voor maand 9 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 2 t/m 6, en de \( δ_{10} \)-correctie op het begin van rekenmaanden 3 t/m 6. In de volgende tabel geeft \( ω_2 \) aan (met waarde 1) op welke rekenmaanden de \( δ_9 \)-correctie van toepassing is, en \( ω_3 \) voor de \( δ_{10 }\)-correctie.

    \({m}\) \({m_1}\) \({ω_2}\) \({ω_3}\)
    1 −6 0 0
    2 −5 0 0
    3 −4 0 0
    4 −3 0 0
    5 −2 0 0
    6 −1 0 0
    7 0 0 0
    8 1 0 0
    9 2 1 0
    10 3 1 1
    11 4 1 1
    12 5 1 1
    13 6 1 1

    Dat krijgen we met formules

    \begin{align} ω_2 \| = \dfloorratio{m_1 + 10}{12} \\ ω_3 \| = \dfloorratio{m_1 + 9}{12} \end{align}

    Daarmee wordt de formule om van rekenrmaandnummer \( m_1 \) te gaan naar het dagnummer \( δ_{11} \) van de eerste dag van die maand sinds nieuwjaar \( m_1 = 0 \):

    \begin{align} δ_{11} \| = δ_8 + ω_2 δ_9 + ω_3 δ_{10} \notag \\ \| = \dfloorratio{384 m_1 + 10}{13} + \dmod{\dfloorratio{L + 1}{2}}{3} \dfloorratio{m_1 + 10}{12} \notag \\ \| − \dmod{\dfloorratio{385 − L}{2}}{3} \dfloorratio{m_1 + 9}{12} \end{align}

    Voor maand kislev (\( m_1 = 2 \)) van rekenjaar 4682 (die \( L = 385 \) heeft) vinden we

    \begin{align*} δ_8 \| = \dfloorratio{384 m_1 + 10}{13} = \dfloorratio{384×2 + 10}{13} = \dfloorratio{778}{13} = 59 \\ δ_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_1 + 10}{12} = \dfloorratio{2 + 10}{12} = \dfloorratio{12}{12} = 1 \\ ω_3 \| = \dfloorratio{m_1 + 9}{12} = \dfloorratio{2 + 9}{12} = \dfloorratio{11}{12} = 0 \\ δ_{11} \| = δ_8 + ω_2 δ_9 + ω_3 δ_{10} = 59 + 1×1 − 0×0 = 60 \end{align*}

    Voor de voorbeelddata vinden we

    \({a}\) \({m}\) \({d}\) \({a_1}\) \({m_1}\) \({δ_8}\) \({L}\) \({δ_9}\) \({δ_{10}}\) \({ω_2}\) \({ω_3}\) \({δ_{11}}\)
    4524 7 30 4524 0 0 355 1 0 0 0 0
    4524 9 30 4524 2 59 355 1 0 1 0 60
    4527 3 1 4528 −4 −118 385 1 0 0 0 −118
    4682 9 12 4682 2 59 385 1 0 1 0 60
    4682 3 18 4683 −4 −118 354 0 0 0 0 −118
    325709 13 29 325709 6 178 385 1 0 1 1 179

    Daarmee is het lopende dagnummer \( d_2 \) van de eerste dag van rekenmaand \( m_1 \) van rekenjaar \( a_1 \), gemeten sinds 1 tisjrie van kalenderjaar 1

    \begin{equation} d_2 = δ_{12} + δ_{11} = d_1(a_1) + δ_{11} \label{eq:jewishd2} \end{equation}

    Voor maand kislev van kalenderjaar \( a = 4682 \) vinden we dat \( a_1 = a = 4682 \) dus

    \[ d_2 = d_1(4682) + δ_{11} = 1709704 + 60 = 1709764 \]

    Voor de voorbeelddata vinden we

    \({a}\) \({m}\) \({d}\) \({a_1}\) \({m_1}\) \({d_1}\) \({δ_{11}}\) \({d_2}\)
    4524 7 30 4524 0 1652000 0 1652000
    4524 9 30 4524 2 1652000 60 1652060
    4527 3 1 4528 −4 1653447 −118 1653329
    4682 9 12 4682 2 1709704 60 1709764
    4682 3 18 4683 −4 1710089 −118 1709971
    325709 13 29 325709 6 118963792 179 118963971

  6. Berekening 5 levert het lopende dagnummer \( s \) van de gewenste dag uit het lopende dagnummer \( d_2 \) van de eerste dag van kalendermaand \( m \) van kalenderjaar \( a \) 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

    \({a}\) \({m}\) \({d}\) \({d_0}\) \({d_2}\) \({s}\)
    4524 7 30 29 1652000 1652029
    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

  7. De epoche van de kalender is 1 tisjrie van kalenderjaar 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

    \({a}\) \({m}\) \({d}\) \({s}\) \({J}\)
    4524 7 30 1652029 2000027
    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 volgende tabel toont wat voorbeelden van de volledige berekening. Die tabel zou heel erg breed zijn, daarom is die opgesplitst.

\({a}\) \({m}\) \({d}\) \({a_1}\) \({m_1}\) \({d_0}\) \({m_2(a_1−1)}\) \({m_2(a_1)}\) \({m_2(a_1+1)}\) \({m_2(a_1+2)}\)
1 1 1 2 −6 0 0 12 24 37
1 6 29 2 −1 28 0 12 24 37
2 7 1 2 0 0 0 12 24 37
2 12 29 2 5 28 0 12 24 37
2 1 1 3 −6 0 12 24 37 49
2 6 29 3 −1 28 12 24 37 49
3 7 1 3 0 0 12 24 37 49
3 10 1 3 3 0 12 24 37 49
1000 10 10 1000 3 9 12343 12356 12368 12380
1000 12 29 1000 5 28 12343 12356 12368 12380
1001 1 1 1002 −6 0 12368 12380 12393 12405
3767 6 29 3768 −1 28 46579 46591 46604 46616
3768 7 1 3768 0 0 46579 46591 46604 46616
4524 7 30 4524 0 29 55930 55942 55954 55967
4524 9 30 4524 2 29 55930 55942 55954 55967
4527 3 1 4528 −4 0 55979 55991 56004 56016
4682 9 12 4682 2 11 57884 57896 57909 57921
4682 13 29 4682 6 28 57884 57896 57909 57921
4682 1 1 4683 −6 0 57896 57909 57921 57933
4682 3 18 4683 −4 17 57896 57909 57921 57933
4682 6 29 4683 −1 28 57896 57909 57921 57933
4683 7 1 4683 0 0 57896 57909 57921 57933
4683 12 29 4683 5 28 57896 57909 57921 57933
4683 1 1 4684 −6 0 57909 57921 57933 57946
325709 13 29 325709 6 28 4028481 4028493 4028506 4028518

\({a}\) \({m}\) \({d}\) \({a_1}\) \({δ_3(a_1−1)}\) \({δ_3(a_1)}\) \({δ_3(a_1+1)}\) \({δ_3(a_1+2)}\)
1 1 1 2 0 354 709 1093
1 6 29 2 0 354 709 1093
2 7 1 2 0 354 709 1093
2 12 29 2 0 354 709 1093
2 1 1 3 354 709 1093 1447
2 6 29 3 354 709 1093 1447
3 7 1 3 354 709 1093 1447
3 10 1 3 354 709 1093 1447
1000 10 10 1000 364496 364880 365234 365589
1000 12 29 1000 364496 364880 365234 365589
1001 1 1 1002 365234 365589 365973 366327
3767 6 29 3768 1375506 1375860 1376244 1376598
3768 7 1 3768 1375506 1375860 1376244 1376598
4524 7 30 4524 1651646 1652000 1652355 1652739
4524 9 30 4524 1651646 1652000 1652355 1652739
4527 3 1 4528 1653093 1653447 1653831 1654186
4682 9 12 4682 1709349 1709703 1710087 1710442
4682 13 29 4682 1709349 1709703 1710087 1710442
4682 1 1 4683 1709703 1710087 1710442 1710796
4682 3 18 4683 1709703 1710087 1710442 1710796
4682 6 29 4683 1709703 1710087 1710442 1710796
4683 7 1 4683 1709703 1710087 1710442 1710796
4683 12 29 4683 1709703 1710087 1710442 1710796
4683 1 1 4684 1710087 1710442 1710796 1711180
325709 13 29 325709 118963437 118963792 118964176 118964530

\({a}\) \({m}\) \({d}\) \({a_1}\) \({m_1}\) \({d_0}\) \({δ_5(a_1−1)}\) \({δ_5(a_1)}\) \({δ_5(a_1+1)}\) \({δ_5(a_1+2)}\)
1 1 1 2 −6 0 0 355 710 1093
1 6 29 2 −1 28 0 355 710 1093
2 7 1 2 0 0 0 355 710 1093
2 12 29 2 5 28 0 355 710 1093
2 1 1 3 −6 0 355 710 1093 1447
2 6 29 3 −1 28 355 710 1093 1447
3 7 1 3 0 0 355 710 1093 1447
3 10 1 3 3 0 355 710 1093 1447
1000 10 10 1000 3 9 364497 364880 365235 365589
1000 12 29 1000 5 28 364497 364880 365235 365589
1001 1 1 1002 −6 0 365235 365589 365974 366327
3767 6 29 3768 −1 28 1375507 1375860 1376245 1376599
3768 7 1 3768 0 0 1375507 1375860 1376245 1376599
4524 7 30 4524 0 29 1651646 1652000 1652355 1652740
4524 9 30 4524 2 29 1651646 1652000 1652355 1652740
4527 3 1 4528 −4 0 1653093 1653447 1653832 1654187
4682 9 12 4682 2 11 1709349 1709704 1710087 1710443
4682 13 29 4682 6 28 1709349 1709704 1710087 1710443
4682 1 1 4683 −6 0 1709704 1710087 1710443 1710796
4682 3 18 4683 −4 17 1709704 1710087 1710443 1710796
4682 6 29 4683 −1 28 1709704 1710087 1710443 1710796
4683 7 1 4683 0 0 1709704 1710087 1710443 1710796
4683 12 29 4683 5 28 1709704 1710087 1710443 1710796
4683 1 1 4684 −6 0 1710087 1710443 1710796 1711181
325709 13 29 325709 6 28 118963437 118963792 118964177 118964531

\({a}\) \({m}\) \({d}\) \({a_1}\) \({m_1}\) \({d_0}\) \({L_2(a_1−1)}\) \({L_2(a_1)}\) \({L_2(a_1+1)}\) \({d_1(a_1)}\) \({d_1(a_1+1)}\) \({L}\)
1 1 1 2 −6 0 355 355 383 355 710 355
1 6 29 2 −1 28 355 355 383 355 710 355
2 7 1 2 0 0 355 355 383 355 710 355
2 12 29 2 5 28 355 355 383 355 710 355
2 1 1 3 −6 0 355 383 354 710 1093 383
2 6 29 3 −1 28 355 383 354 710 1093 383
3 7 1 3 0 0 355 383 354 710 1093 383
3 10 1 3 3 0 355 383 354 710 1093 383
1000 10 10 1000 3 9 383 355 354 364880 365235 355
1000 12 29 1000 5 28 383 355 354 364880 365235 355
1001 1 1 1002 −6 0 354 385 353 365589 365974 385
3767 6 29 3768 −1 28 353 385 354 1375860 1376245 385
3768 7 1 3768 0 0 353 385 354 1375860 1376245 385
4524 7 30 4524 0 29 354 355 385 1652000 1652355 355
4524 9 30 4524 2 29 354 355 385 1652000 1652355 355
4527 3 1 4528 −4 0 354 385 355 1653447 1653832 385
4682 9 12 4682 2 11 355 383 356 1709704 1710089 385
4682 13 29 4682 6 28 355 383 356 1709704 1710089 385
4682 1 1 4683 −6 0 383 356 353 1710089 1710443 354
4682 3 18 4683 −4 17 383 356 353 1710089 1710443 354
4682 6 29 4683 −1 28 383 356 353 1710089 1710443 354
4683 7 1 4683 0 0 383 356 353 1710089 1710443 354
4683 12 29 4683 5 28 383 356 353 1710089 1710443 354
4683 1 1 4684 −6 0 356 353 385 1710443 1710796 353
325709 13 29 325709 6 28 355 385 354 118963792 118964177 385

\({a}\) \({m}\) \({d}\) \({a_1}\) \({m_1}\) \({d_0}\) \({δ_8}\) \({δ_9}\) \({δ_{10}}\) \({ω_2}\) \({ω_3}\) \({δ_{11}}\) \({d_2}\) \({s}\) \({J}\)
1 1 1 2 −6 0 −177 1 0 0 0 −177 178 178 348176
1 6 29 2 −1 28 −29 1 0 0 0 −29 326 354 348352
2 7 1 2 0 0 0 1 0 0 0 0 355 355 348353
2 12 29 2 5 28 148 1 0 1 1 149 504 532 348530
2 1 1 3 −6 0 −177 0 −1 0 0 −177 533 533 348531
2 6 29 3 −1 28 −29 0 −1 0 0 −29 681 709 348707
3 7 1 3 0 0 0 0 −1 0 0 0 710 710 348708
3 10 1 3 3 0 89 0 −1 1 1 88 798 798 348796
1000 10 10 1000 3 9 89 1 0 1 1 90 364970 364979 712977
1000 12 29 1000 5 28 148 1 0 1 1 149 365029 365057 713055
1001 1 1 1002 −6 0 −177 1 0 0 0 −177 365412 365412 713410
3767 6 29 3768 −1 28 −29 1 0 0 0 −29 1375831 1375859 1723857
3768 7 1 3768 0 0 0 1 0 0 0 0 1375860 1375860 1723858
4524 7 30 4524 0 29 0 1 0 0 0 0 1652000 1651999 1999997
4524 9 30 4524 2 29 59 1 0 1 0 60 1652060 1652089 2000087
4527 3 1 4528 −4 0 −118 1 0 0 0 −118 1653329 1653329 2001327
4682 9 12 4682 2 11 59 1 0 1 0 60 1709764 1709775 2057773
4682 13 29 4682 6 28 178 1 0 1 1 179 1709883 1709911 2057909
4682 1 1 4683 −6 0 −177 0 0 0 0 −177 1709912 1709912 2057910
4682 3 18 4683 −4 17 −118 0 0 0 0 −118 1709971 1709988 2057986
4682 6 29 4683 −1 28 −29 0 0 0 0 −29 1710060 1710088 2058086
4683 7 1 4683 0 0 0 0 0 0 0 0 1710089 1710089 2058087
4683 12 29 4683 5 28 148 0 0 1 1 148 1710237 1710265 2058263
4683 1 1 4684 −6 0 −177 0 −1 0 0 −177 1710266 1710266 2058264
325709 13 29 325709 6 28 178 1 0 1 1 179 118963971 118963999 119311997

De voorgaande berekeningen dikken in tot

\begin{align} m_1 \| = m − 7 \\ a_1 \| = a − \dfloorratio{m_1}{10} \\ δ_3(a_1) \| = \dfloorratio{765433 \dfloorratio{235 a_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(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} \\ L \| = d_1(a_1 + 1) − d_1(a_1) \\ d_2 \| = d_1(a_1) + \dfloorratio{384 m_1 + 10}{13} + \dmod{\dfloorratio{L + 1}{2}}{3} \dfloorratio{m_1 + 10}{12} \notag \\ \| − \dmod{\dfloorratio{385 − L}{2}}{3} \dfloorratio{m_1 + 9}{12} \\ J \| = d_2 + d + 347997 \end{align}

Voor 12 kislev 4682 (\( a = 4682, m = 9, d = 12 \)) vinden we

\begin{align*} m_1 \| = m − 7 = 9 − 7 = 2 \\ a_1 \| = a − \dfloorratio{m_1}{10} = 4682 − \dfloorratio{2}{10} = 4682 \\ δ_3(a_1) \| = δ_3(4682) = \dfloorratio{765433 \dfloorratio{235 a_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) = 1709349 \\ δ_3(a_1 + 1) \| = δ_3(4683) = 1710087 \\ δ_3(a_1 + 2) \| = δ_3(4684) = 1710442 \\ δ_5(a_1) \| = δ_5(4682) = δ_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} = 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) \| = L_2(4682) = δ_5(a_1 + 1) − δ_5(a_1) \\ \| = δ_5(4683) − δ_5(4682) = 1710087 − 1709704 = 383 \\ L_2(a_1 − 1) \| = L_2(4681) = δ_5(4682) − δ_5(4681) = 1709704 − 1709349 = 355 \\ L_2(a_1 + 1) \| = L_2(4683) = δ_5(4684) − δ_5(4683) = 1710443 − 1710087 = 356 \\ d_1(a_1) \| = d_1(4682) = δ_5(a_1) + 2\dmod{\dfloorratio{L_2(a_1) + 19}{15}}{2} + \dmod{\dfloorratio{L_2(a_1 − 1) + 7}{15}}{2} \\ \| = δ_5(4682) + 2\dmod{\dfloorratio{L_2(4682) + 19}{15}}{2} + \dmod{\dfloorratio{L_2(4681) + 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(a_1 + 1) \| = d_1(4683) = δ_5(4683) + 2\dmod{\dfloorratio{L_2(4683) + 19}{15}}{2} + \dmod{\dfloorratio{L_2(4682) + 7}{15}}{2} \\ \| = 1710087 + 2\dmod{\dfloorratio{356 + 19}{15}}{2} + \dmod{\dfloorratio{383 + 7}{15}}{2} \\ \| = 1710087 + 2\dmod{\dfloorratio{375}{15}}{2} + \dmod{\dfloorratio{390}{15}}{2} \\ \| = 1710087 + 2×\dmod{25}{2} + \dmod{26}{2} \\ \| = 1710087 + 2×1 + 0 = 1710089 \\ L \| = d_1(a_1 + 1) − d_1(a_1) = d_1(4683) − d_1(4682) = 1710089 − 1709704 = 385 \\ d_2 \| = d_1(a_1) + \dfloorratio{384 m_1 + 10}{13} + \dmod{\dfloorratio{L + 1}{2}}{3} \dfloorratio{m_1 + 10}{12} \\ \| − \dmod{\dfloorratio{385 − L}{2}}{3} \dfloorratio{m_1 + 9}{12} \\ \| = d_1(4682) + \dfloorratio{384×2 + 10}{13} + \dmod{\dfloorratio{385 + 1}{2}}{3} \dfloorratio{2 + 10}{12} \\ \| − \dmod{\dfloorratio{385 − 385}{2}}{3} \dfloorratio{2 + 9}{12} \\ \| = 1709704 + \dfloorratio{778}{13} + \dmod{\dfloorratio{386}{2}}{3} \dfloorratio{12}{12} − \dmod{\dfloorratio{0}{2}}{3} \dfloorratio{11}{12} \\ \| = 1709704 + 59 + \dmod{193}{3}×1 − 0×0 \\ \| = 1709704 + 59 + 1×1 − 0×0 = 1709764 \\ J \| = d_2 + d + 347997 = 1709764 + 12 + 347997 = 2057773 \end{align*}

Berekening 2 geeft een limiet van \( w/235 \) jaar ofwel ongeveer \( 1.56 w \) dagen. De berekeningen van \( δ_1 \), \( δ_2 \) en \( δ_3 \) (onderdeel van berekening 3) geven een limiet van \( w/765433 \) maanden ofwel ongeveer \( w/25920 \) dagen. De berekening van \( δ_5 \) geeft een limiet van \( w/6 \) dagen. De andere berekeningen beperken de limiet niet omdat hun invoerwaarden al van nature beperkt zijn. De gezamenlijke limiet is ongeveer \( w/25920 \) dagen. Voor 32-bitsgetallen komt dat overeen met ongeveer 226 jaar, wat veel te weinig is voor gebruik in de praktijk. Een meer gedetailleerde zoektocht (zoals beschreven in hoofdstuk 15.2.3) levert dat bovenstaande formules voor 32-bitgetallen de juiste resultaten geven voor CJDN 265'814 tot en met 430'594, wat overeenkomt met tussen ergens in joods jaar −224 tot ergens in jaar 227.

Om een hogere limiet te krijgen kun je rekenen met 64-bitsgetallen of door de formule voor \( δ_2 \) te vervangen door

\begin{eqnarray} \{ ω_4, μ_2 \} \| = \| \Div(m_2, 25920) \\ δ_2 \| = \| 29 m_2 + 13753 ω_4 + \dfloorratio{13753 μ_2 + 5604}{25920} \end{eqnarray}

en de formule voor \( δ_3 \) net zo, maar met 12084 in plaats van 5604.

Voor de ingedikte formules moet je dan de formule voor \( δ_3 \) aanpassen naar

\begin{align} m_2 \| = \dfloorratio{235 a_1 − 234}{19} \\ \{ ω_4, μ_2 \} \| = \Div\dparen{m_2, 25920} \\ δ_3 \| = 29 m_2 + 13753 ω_4 + \dfloorratio{13753 μ_2 + 12084}{25920} \end{align}

De limiet van die omweg is \( w \) dagen, en daarmee wordt de gezamenlijke limiet \( w/6 \) dagen, wat voor 32-bitsgetallen overeenkomt met ongeveer 980'000 jaar. Als dat nog niet genoeg is dan kun je nog de formule voor \( δ_5 \) vervangen door

\begin{equation} δ_5 = δ_3 + \dmod{\dfloorratio{6\dmod{δ_3}{7}}{7}}{2} \end{equation}

Dan is de gezamenlijke limiet \( w \) dagen, en hoger kan niet. Voor 32-bitsgetallen komt dat overeen met ongeveer 5,9 miljoen jaren.

Hier zijn wat voorbeelden van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({m_2}\) \({765433 m_2 + 5604}\) \({\dfrac{765433 m_2 + 5604}{w}}\) \({δ_2}\) \({ω_4}\)
2800 2143218004 1.00 82685 0
72000000 55111176005604 25663.14 2126202777 2777

\({m_2}\) \({μ_2}\) \({13753 μ_2 + 5604}\) \({\dfrac{13753 μ_2 + 5604}{w}}\) \({δ_2}\)
2800 2800 38514004 0.02 82685
72000000 20160 277266084 0.13 2126202777

\({δ_3}\) \({6 δ_3}\) \({\dfrac{6 δ_3}{w}}\) \({δ_5}\) \({6\dmod{δ_3}{7}}\) \({δ_5}\)
355000000 2130000000 0.99 355000000 30 355000000
355000001 2130000006 0.99 355000002 36 355000002
355000002 2130000012 0.99 355000002 0 355000002
355000003 2130000018 0.99 355000003 6 355000003
355000004 2130000024 0.99 355000005 12 355000005
355000005 2130000030 0.99 355000005 18 355000005
2140000000 12840000000 5.98 2140000000 30 2140000000

16.7.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 van jaar 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}\)
    2000027 1652029
    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 ontdekken. 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:

    \begin{equation} μ_2 = \dfloorratio{25920 s + 13835}{765433} \label{eq:y_1p} \end{equation}

    Voor het uitrekenen van het voorlopige rekenjaarnummer \( α_3 \) en rekenmaandnummer \( μ_3 \) hebben we zoiets nodig als de inverse van formule \eqref{eq:j2μ1}:

    \begin{align} \{ α_3, ε_3 \} \| = \Div(19 μ_2 + 252, 235) \\ μ_3 \| = \dfloorratio{ε_3}{19} \end{align}

    maar die levert altijd \( μ_3 ≥ 0 \) terwijl ons rekenmaandnummer zo klein als −6 moet kunnen zijn (voor nisan). We krijgen dat voor elkaar door eerst 6 op te tellen bij \( μ_2 \), dan die inverse formule toe te passen, en daarna 6 af te trekken om \( μ_3 \) te vinden:

    \begin{align} \{ α_3, ε_3 \} \| = \Div(19 (μ_2 + 6) + 252, 235) = \Div(19 μ_2 + 366, 235) \\ μ_3 \| = \dfloorratio{ε_3}{19} − 6 \end{align}

    Voor \( J = 2057773 \) vonden we eerder \( s = 1709775 \), en dan nu

    \begin{align*} μ_2 \| = \dfloorratio{25920 s + 13835}{765433} = \dfloorratio{25920×1709775 + 13835}{765433} \\ \| = \dfloorratio{44317381835}{765433} = 57898 \\ \{ α_3, ε_3 \} \| = \Div(19 μ_2 + 366, 235) = \Div(19×57898 + 366, 235) \\ \| = \Div(1100428, 235) = \{ 4682, 158 \} \\ μ_3 \| = \dfloorratio{ε_3}{19} − 6 = \dfloorratio{158}{19} − 6 = 8 − 6 = 2 \end{align*}

    Wat meer voorbeelden:

    \({J}\) \({s}\) \({μ_2}\) \({α_3}\) \({ε_3}\) \({μ_3}\)
    2000027 1652029 55942 4524 124 0
    2000087 1652089 55945 4524 181 3
    2001327 1653329 55987 4528 39 −4
    2057773 1709775 57898 4682 158 2
    2057986 1709988 57905 4683 56 −4
    119311997 118963999 4028500 325710 16 −6

    Als we het lopende dagnummer \( d_2 \) (van 16.7.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.

    De minimale berekening is als volgt:

    1. Bereken het voorlopige kalenderjaarnummer \( α_3 \) en het voorlopige rekenmaandnummer \( μ_3 \):

      \begin{align} \{ α_3, ε_3 \} \| = \Div(19 μ_2 + 366, 235) \\ μ_3 \| = \dfloorratio{ε_3}{19} − 6 \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 16.7.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_1, 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 + 366, 235) \\ μ_6 \| = \dfloorratio{ε_4}{19} − 6 \\ δ_{15} \| = s − d_2(α_4, μ_6) \end{align}

      Als \( δ_{15} \lt 0 \) dan is de gezochte rekendatum \( \{ a_1, m_1, d_0 \} \) gelijk aan \( \{ α_3, μ_3, δ_{14} \} \). En anders is de gezochte rekendatum \( \{ a_1, m_1, d_0 \} \) gelijk aan \( \{ α_4, μ_6, δ_{15} \} \).

    3. Als \( δ_{14} \lt 0 \) dan is het juiste lopende rekenmaandnummer

      \begin{equation} μ_7 = μ_2 − 1 \end{equation}

      Bereken daaruit het het kalenderjaarnummer \( a_1 \), het rekenmaandnummer \( m_1 \), en het rekendagnummer \( d_0 \):

      \begin{align} \{ a_1, ε_5 \} \| = \Div(19 μ_7 + 366, 235) \\ m_1 \| = \dfloorratio{ε_5}{19} − 6 \\ d_0 \| = s − d_2(a_1, m_1) \end{align}

    Voor \( J = 2057773 \) vonden we eerder \( s = 1709775\), \( μ_2 = 57898 \). Dan is

    \begin{align*} \{ α_3, ε_3 \} \| = \Div(19 μ_2 + 366, 235) = \Div(19×57898 + 366, 235) \\ \| = \Div(1100428, 235) = \{ 4682, 158 \} \\ μ_3 \| = \dfloorratio{ε_3}{19} − 6 = \dfloorratio{158}{19} − 6 = 8 − 6 = 2 \end{align*}

    Dan rekenen we \( d_2(α_3, μ_3) = d_2(4682, 2) \) uit zoals beschreven in Hoofdstuk 16.7.1. We vinden \( d_2(4682, 2) = 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_1, d_0 \} \) is gelijk aan \( \{ α_3, μ_3, δ_{14} \} = \{ 4682, 2, 11 \}\).

    Voor alle voorbeeld-CJDNs vinden we

    \({J}\) \({s}\) \({μ_2}\) \({α_3}\) \({ε_3}\) \({μ_3}\) \({d_2}\) \({δ_{14}}\)
    2000027 1652029 55942 4524 124 0 1652000 29
    2000087 1652089 55945 4524 181 3 1652090 −1
    2001327 1653329 55987 4528 39 −4 1653329 0
    2057773 1709775 57898 4682 158 2 1709764 11
    2057986 1709988 57905 4683 56 −4 1709971 17
    119311997 118963999 4028500 325710 16 −6 118964000 −1

    \({J}\) \({μ_5}\) \({α_4}\) \({ε_4}\) \({μ_6}\) \({d_2}\) \({δ_{15}}\)
    2000027 55943 4524 143 1 1652030 −1

    \({J}\) \({μ_7}\) \({a_1}\) \({ε_5}\) \({m_1}\) \({d_2}\) \({d_0}\)
    2000027 4524 0 29
    2000087 55944 4524 162 2 1652060 29
    2001327 4528 −4 0
    2057773 4682 2 11
    2057986 4683 4 17
    119311997 4028499 325709 232 6 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 + 366, 235) \\ μ_4 \| = \dfloorratio{ε_3}{19} − 6 \end{align}

      Bereken dan het lopende dagnummer \( d_2(α_3, μ_4) \) voor de eerste dag van die kalenderjaar en rekenmaand, zoals beschreven in hoofdstuk 16.7.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 + 366, 235) \\ μ_6 \| = \dfloorratio{ε_4}{19} − 6 \\ δ_{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_1 \), en het rekendagnummer \( d_0 \):

      \begin{align} \{ a_1, ε_5 \} \| = \Div(19 μ_7 + 366, 235) \\ m_1 \| = \dfloorratio{ε_5}{19} − 6 \\ d_0 \| = s − d_2(a_1, m_0) \end{align}

    Voor \( J = 2057773 \) vonden we eerder \( μ_2 = 57898 \). Dan is

    \begin{align*} μ_3 \| = μ_2 + 1 = 57898 + 1 = 57899 \\ \{ α_3, ε_3 \} \| = \Div(19×57899 + 366, 235) = \Div(1100447, 235) \\ \| = \{ 4682, 177 \} \\ μ_4 \| = \dfloorratio{ε_3}{19} − 6 = \dfloorratio{177}{19} − 6 = 9 − 6 = 3 \end{align*}

    Dan kunnen we \( d_2(α_3, μ_4) = d_2(4682, 3) \) uitrekenen zoals beschreven in Hoofdstuk 16.7.1, en vinden \( d_2(4682, 9) = 1709794 \). Daarmee is \( δ_{14} = s − d_2(4682, 3) = 1709775 − 1709794 = −19 \). Dan

    \[ μ_5 = μ_3 + \dfloorratio{δ_{14}}{64} = 57899 + \dfloorratio{−19}{64} = 57898 \]

    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 = 2, δ_{15} = 11 \). Dan

    \[ μ_7 = μ_5 + \dfloorratio{δ_{15}}{64} = 57899 + \dfloorratio{11}{64} = 57899 \]

    dus \( μ_7 = μ_5 \) en daarmee veranderen de getallen niet meer en vinden we uiteindelijk \( a_1 = 4682, m_1 = 2, d_0 = 11 \).

    Voor alle voorbeeld-CJDNs vinden we

    \({J}\) \({s}\) \({μ_2}\) \({μ_3}\) \({α_3}\) \({μ_4}\) \({d_2}\) \({δ_{14}}\)
    2000027 1652029 55942 55943 4524 1 1652030 −1
    2000087 1652089 55945 55946 4524 4 1652119 −30
    2001327 1653329 55987 55988 4528 −3 1653359 −30
    2057773 1709775 57898 57899 4682 3 1709794 −19
    2057986 1709988 57905 57906 4683 −3 1710001 −13
    119311997 118963999 4028500 4028501 325710 −5 118964030 −31

    \({J}\) \({μ_5}\) \({α_4}\) \({μ_6}\) \({d_2}\) \({δ_{15}}\) \({μ_7}\) \({a_1}\) \({m_1}\) \({d_2}\) \({d_0}\)
    2000027 55942 4524 0 1652000 29 55942 4524 0 1652000 29
    2000087 55945 4524 3 1652090 −1 55944 4524 2 1652060 29
    2001327 55987 4528 −4 1653329 0 55987 4528 −4 1653329 0
    2057773 57898 4682 2 1709764 11 57898 4682 2 1709764 11
    2057986 57905 4683 −4 1709971 17 57905 4683 −4 1709971 17
    119311997 4028500 325710 −6 118964000 −1 4028499 325709 6 118963971 28

  3. Berekening 1 levert het kalenderjaar \( a \) uit het rekenjaar \( a_1 \) en rekenmaand \( m_1 \). Rekenmaanden −6 t/m −1 van rekenjaar \( a_1 \) horen bij kalenderjaar \( a = a_1 − 1 \), en rekenmaanden 0 t/m 6 horen bij kalenderjaar \( a = a_1 \). Dat krijgen we voor elkaar met

    \begin{align} a \| = a_1 + \dfloorratio{m_1}{10} \\ m \| = m_1 + 7 \end{align}

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

    Voor \( J = 2057773 \) hadden we \( a_1 = 4682 \) en \( m_1 = 2 \) dus

    \begin{align} a \| = a_1 + \dfloorratio{m_1}{10} = 4682 + \dfloorratio{2}{10} = 4682 \\ m \| = m_1 + 7 = 2 + 7 = 9 \end{align}

    Voor alle voorbeeld-CJDNs vinden we

    \({J}\) \({a_1}\) \({m_1}\) \({d_0}\) \({a}\) \({m}\)
    2000027 4524 0 29 4524 7
    2000087 4524 2 29 4524 9
    2001327 4528 −4 0 4527 3
    2057773 4682 2 11 4682 9
    2057986 4683 −4 17 4682 3
    119311997 325709 6 28 325709 13

  4. En dan tellen we 1 bij de rekendag op om de kalenderdag te vinden.

    \begin{equation} d = d_0 + 1 \end{equation}

    Voor \( J = 2057773 \) hadden we \( d_0 = 11 \) dus

    \[ d = d_0 + 1 = 11 + 1 = 12 \]

    dus \( J = 2057773 \) komt overeen met dag 12 van maand 9 van jaar 4682.

    Voor alle voorbeeld-CJDNs vinden we

    \({J}\) \({a_1}\) \({m}\) \({d_0}\) \({d}\)
    2000027 4524 7 29 30
    2000087 4524 8 29 30
    2001327 4528 2 0 1
    2057773 4682 8 11 12
    2057986 4683 2 17 18
    119311997 325709 12 28 29

De berekening van \( μ_2 \) heeft een limiet van \( w/25920 \) dagen. De berekening van \( α_3 \), \( ε_3 \), \( α_4 \), \( ε_4 \), \( a_1 \), \( ε_5 \) heeft een limiet van \( w/19 \) maanden, wat overeenkomt met ongeveer \( 1.6 w \) dagen. De gezamenlijke limiet is \( w/25920 \) dagen, wat voor 32-bitsgetallen overeenkomt met ongeveer 226 jaar. Dat is veel te weinig voor praktisch werk.

Als je een hogere limiet wilt dan kun je de berekening van \( μ_2 \) vervangen door

\begin{align} \{ ω_4, δ_{16} \} \| = \Div(s, 33783) \\ μ_2 \| = 1144 ω_4 + \dfloorratio{8 ω_4 + 25920 δ_{16} + 13835}{765433} \end{align}

Dan is de limiet \( w \) dagen, wat voor 32-bitsgetallen overeenkomt met ongeveer 5,9 miljoen jaar.

Hier zijn wat voorbeelden van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({s}\) \({25920 s + 13835}\) \({\dfrac{25920 s + 13835}{w}}\) \({μ_2}\)
82000 2125453835 0.99 2776
2140000000 55468800013835 25829.67 72467217

\({s}\) \({ω_4}\) \({δ_{16}}\) \({8 ω_4 + 25920 δ_{16} + 13835}\) \({\dfrac{8 ω_4 + 25920 δ_{16} + 13835}{w}}\) \({μ_2}\)
82000 2 14434 374143131 0.17 2776
2140000000 63345 15865 411741395 0.19 72467217

16.8. Een zongebonden 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 hoeven 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.

16.8.1. Van maankalender naar CJDN

De berekeningen zijn schematisch:

  a ════════════════════╗
  m ─(−1)─ m₀ ──┐       ║
  d ─(−1)─ d₀ ─(1)─ d₁─(2)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus 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 \( \{ a, 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 \( a \) en het dagnummer \( d_1 \) sinds de eerste dag van het jaar.

    \begin{align} δ_2 \| = 354a + 30\dfloorratio{7a + 2}{19} + \dfloorratio{4a + 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.

    \({a}\) \({δ_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 \( a = 2033, d_1 = 0 \) dus

    \begin{align*} δ_2 \| = 354 a + 30\dfloorratio{7 a + 2}{19} + \dfloorratio{4 a + 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{align} J \| = 354 a + 30\dfloorratio{7 a + 2}{19} + \dfloorratio{4 a + 18}{19} \notag \\ \| + \dfloorratio{384 m − 377}{13} + d + 1721018 \end{align}

Voor ons voorbeeld (met \( a = 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.

Berekening 2 heeft een limiet van ongeveer \( w/6940 \) jaar, wat overeenkomt met ongeveer \( w/19 \) dagen. Voor 32-bitsgetallen komt dit overeen met 309'000 jaar. Een meer gedetailleerde zoektocht (zoals beschreven in hoofdstuk 15.2.3) levert dat bovenstaande formules voor 32-bitgetallen de juiste resultaten geven voor CJDN −111'304'463 tot en met 114'746'447, wat overeenkomt met tussen ergens in maankalenderjaar −309'436 tot ergens in jaar 309'435.

16.8.2. Van CJDN naar maankalender

De berekeningen zijn schematisch:

  a ════════════════════╗
  m ─(−1)─ m₀ ──┐       ║
  d ─(−1)─ d₀ ─(1)─ d₁─(2)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus 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 \( a \) en het rekendagnummer \( d_1 \) sinds de eerste dag van het jaar:

    \begin{align} ω_1 \| = g s + g\dparen{\sum_{r_i \gt 0} r_i} − \dparen{\sum_i γ_i r_i t_i} − 1 \notag \\ \| = 19 s + 19×31 − (1×30×2 + 1×1×18) − 1 = 19 s + 510 \\ α_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} \\ a \| = α_1 + \dfloorratio{δ_2}{q + \sum_{r_i \gt 0} r_1} = α_1 + \dfloorratio{δ_1}{385} \notag \\ d_1 \| = s − 354 a − 30 \dfloorratio{7 a + 2}{19} − \dfloorratio{4a + 18}{19} \end{align}

    Voor ons voorbeeld vinden we

    \begin{align*} ω_1 \| = 19 s + 510 = 19×738676 + 510 = 14035354 \\ α_1 \| = \dfloorratio{ω_1}{6940} = \dfloorratio{14035354}{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 \\ a \| = α_1 + \dfloorratio{δ_1}{385} = 2022 + \dfloorratio{112}{385} = 2022 \\ d_1 \| = s − 354 a − 30 \dfloorratio{7 a + 2}{19} − \dfloorratio{4 a + 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(g d_1 + g − t − 1, f) \notag \\ \| = \Div(13 d_1 + 13 − 7 − 1, 384) \notag \\ \| = \Div(13 d_1 + 5, 384) \\ d_0 \| = \dfloorratio{ω_2}{g} = \dfloorratio{ω_2}{13} \end{align}

    Voor ons voorbeeld vinden we

    \begin{align*} \{ m_0, ω_2 \} \| = \Div(13 d_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} \\ a \| = α_1 + \dfloorratio{δ_1}{385} \notag \\ d_1 \| = s − 354a − 30 \dfloorratio{7 a + 2}{19} − \dfloorratio{4 a + 18}{19} \\ \{ m, ω_2 \} \| = \Div(13 d_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 \\ a \| = α_1 + \dfloorratio{δ_1}{385} = 2022 + \dfloorratio{112}{385} = 2022 \\ d_1 \| = s − 354 a − 30 \dfloorratio{7 a + 2}{19} − \dfloorratio{4 a + 18}{19} = 112 \\ \{ m, ω_2 \} \| = \Div(13 d_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.

Berekening 2 geeft een limiet van ongeveer \( w/19 \) dagen, en dat is de gezamenlijke limiet. Voor 32-bitsgetallen komt dat overeen met ongeveer 309'000 jaar.

Als je een hogere limiet wilt dan kun je rekenen met 64-bitsgetallen of de formule voor \( α_1 \) vervangen door

\begin{align} \{ ω_2, ε_2 \} \| = \Div(s, 6940) \\ α_1 \| = 19 ω_2 + \dfloorratio{19 ε_2 + 510}{6940} \end{align}

Dat geeft een limiet van \( w \) dagen, en hoger kan niet. Voor 32-bitsgetallen komt dat overeen met ongeveer 5,9 miljoen jaar.

Hier zijn wat voorbeelden van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({s}\) \({19 s + 510}\) \({\dfrac{19 s + 510}{w}}\) \({α_1}\) \({ω_2}\) \({ε_2}\) \({19 ε_2 + 510}\) \({α_1}\)
1000000 19000510 8.8 × 10−3 2737 144 640 12670 2737
113000000 2147000510 1.00 × 100 309366 16282 2920 55990 309366

Hier zijn voor enkele jaren de data (jaar-maand-dag) in de moderne (Gregoriaanse) kalender die overeenkomen met nieuwjaar in de maankalender.

\({a}\) D
2019 2018-12-08
2020 2019-12-27
2021 2020-12-15
2022 2022-01-03
2023 2022-12-23
2024 2023-12-13
2025 2024-12-31
2026 2025-12-20
2027 2026-12-09
2028 2027-12-28
2029 2028-12-17
2030 2030-01-05
2031 2030-12-25
2032 2031-12-14
2033 2033-01-01
2034 2033-12-22
2035 2034-12-11
2036 2035-12-30
2037 2036-12-18
2038 2037-12-08

16.9. De Islamitische kalender

16.9.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 \( t \) (zie formule \eqref{eq:islamN}).

Tabel 1: Schrikkeljaren in Islamitische Kalender

Type Schrikkeljaren \({t}\) 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 \( a \) is

\begin{equation} N = \dfloorratio{11a + t}{30} \label{eq:islamN} \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 \({t}\) \({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

De berekeningen zijn schematisch:

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

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 325 11 29 6 5 29.545455
2 10631 30 354 11 t 354.36667

  1. Eerst trekken we 1 af van jaarnummer \( a \), maandnummer \( m \) en dagnummer \( d \) om rekenjaarnummer \( a_0 \), rekenmaandnummer \( m_0 \) en rekendagnummer \( d_0 \) te krijgen die beginnen bij 0:

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

    Als voorbeeld rekenen we uit welke CJDN overeenkomt met 29 Sha`ban 1432, met \( a = 1432, m = 8, d = 29 \). Dan

    \begin{align*} a_0 \| = a − 1 = 1432 − 1 = 1431 \\ m_0 \| = m − 1 = 8 − 1 = 7 \\ d_0 \| = d − 1 = 29 − 1 = 28 \end{align*}

  2. Berekening 1 rekent dagnummer \( d_1 \) sinds de eerste dag van het jaar uit uit rekenmaandnummer \( m_0 \) en rekendagnummer \( d_0 \):

    \begin{equation} d_1 = \dfloorratio{325m_0 + 5}{11} + d_0 \end{equation}

    In ons voorbeeld vinden we

    \begin{align*} d_1 \| = \dfloorratio{325m_0 + 5}{11} + d_0 = \dfloorratio{325×7 + 5}{11} + 28 \\ \| = \dfloorratio{2280}{11} + 28 = 207 + 28 = 235 \end{align*}

  3. Berekening 2 levert het lopende dagnummer \( s \) uit het rekenjaarnummer \( a_0 \) en het dagnummer \( d_1 \) sinds de eerste dag van het jaar:

    \begin{equation} s = \dfloorratio{10631a_0 + t}{30} + d_1 \end{equation}

    In ons voorbeeld vinden we, met kalendertype II:

    \begin{align*} s \| = \dfloorratio{10631a_0 + t}{30} + d_1 = \dfloorratio{10631×1431 + 14}{30} + 235 \\ \| = \dfloorratio{15212975}{30} + 235 = 507099 + 235 = 507334 \end{align*}

  4. En dan tellen we de CJDN \( J_0 \) van de epoche erbij, die is \( J_0 = 1948439 \) voor type a en \( J = 1948440 \) voor type c.

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

    In ons voorbeeld vinden we, voor kalendertype IIc:

    \[ J = s + J_0 = 507334 + 1948440 = 2455774 \]

    dus de CJDN die overeenkomt met 29 sha`ban 1432 volgens kalendertype IIc is 2'455'774.

Bovenstaande formules kunnen worden ingedikt tot

\begin{equation} J = \dfloorratio{10631a − 10631 + t}{30} + \dfloorratio{325m − 320}{11} + d − 1 + J_0 \end{equation}

ofwel

\({J}\)
Ia \({J = \dfloorratio{10631a − 10616}{30} + \dfloorratio{325m − 320}{11} + d + 1948438}\)
Ic \({J = \dfloorratio{10631a − 10616}{30} + \dfloorratio{325m − 320}{11} + d + 1948439}\)
IIa \({J = \dfloorratio{10631a − 10617}{30} + \dfloorratio{325m − 320}{11} + d + 1948438}\)
IIc \({J = \dfloorratio{10631a − 10617}{30} + \dfloorratio{325m − 320}{11} + d + 1948439}\)
IIIa \({J = \dfloorratio{10631a − 10620}{30} + \dfloorratio{325m − 320}{11} + d + 1948438}\)
IIIc \({J = \dfloorratio{10631a − 10620}{30} + \dfloorratio{325m − 320}{11} + d + 1948439}\)
IVa \({J = \dfloorratio{10631a − 10622}{30} + \dfloorratio{325m − 320}{11} + d + 1948438}\)
IVc \({J = \dfloorratio{10631a − 10622}{30} + \dfloorratio{325m − 320}{11} + d + 1948439}\)

Voor dezelfde Islamitische datum als hiervoor vinden we dan

\begin{align*} J \| = \dfloorratio{10631×1432 − 10617}{30} + \dfloorratio{325×8 − 320}{11} + 29 + 1948439 \\ \| = \dfloorratio{15212975}{30} + \dfloorratio{2280}{11} + 29 + 1948439 \\ \| = 507099 + 207 + 29 + 1948439 = 2455774 \end{align*}

hetzelfde antwoord als hiervoor.

Berekening 2 heeft een limiet van \( w/10631 \) Islamitische kalenderjaren, wat overeenkomt met \( w/30 \) dagen. Voor 32-bitsgetallen komt dat overeen met ongeveer 202'000 Islamitische kalenderjaren. Een meer gedetailleerde zoektocht (zoals beschreven in hoofdstuk 15.2.3) levert dat bovenstaande formules voor 32-bitgetallen de juiste resultaten geven voor CJDN −69'634'335 tot en met 73'530'873, wat overeenkomt met tussen ergens in Islamitisch jaar −202'001 tot ergens in jaar 202'002.

Als je een hogere limiet wilt dan kun je met 64-bitsgetallen rekenen of de formule voor \( s \) vervangen door

\begin{equation} s = 354 a_0 + \dfloorratio{11 a_0 + t}{30} + d_1 \end{equation}

Daarmee wordt de limiet \( w \) dagen, en hoger kan niet. Voor 32-bitsgetallen komt dat overeen met ongeveer 5,9 miljoen jaar.

Hier zijn wat voorbeelden (voor \( t = 14 \) en \( d_1 = 0\)) van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({a_0}\) \({10631 a_0 + 14}\) \({\dfrac{10631 a_0 + 14}{w}}\) \({s}\) \({11 a_0 + 14}\) \({s}\)
200000 2126200014 0.99 70873333 2200014 70873333
6000000 63786000014 29.70 2126200000 66000014 2126200000

16.9.2. Van CJDN naar Islamitische datum

De berekeningen zijn schematisch:

  a ═(−1)═ a₀ ═══════════╗
  m ─(−1)─ m₀ ──┐        ║
  d ─(−1)─ d₀ ─(1)─ d₁ ─(2)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 325 11 29 6 5 29.545455
2 10631 30 354 11 t 354.36667

  1. Eerst trekken we de CJDN \( J_0 \) van de epoche af van de CJDN \( J \) waarvoor de datum gewenst is, en vinden het lopende dagnummer \( s \):

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

    De waarde van \( J_0 \) hangt af van de kalendervariant, zie tabel 2.

    Als voorbeeld berekenen we de datum in de Islamitische kalender (variant IIc) die overeenkomt met CJDN 2'455'774. Dan

    \[ s = J − J_0 = 2455774 − 1948440 = 507334 \]

  2. Berekening 2 levert rekenjaar \( a_0 \) en dagnummer \( d_1 \) sinds de eerste dag van het jaar uit het lopende dagnummer \( s \):

    \begin{align} \{ a_0, ε_1 \} \| = \Div(30s + 29 − t, 10631) \\ d_1 \| = \dfloorratio{ε_1}{30} \end{align}

    waarin \( t \) afhangt van de gekozen kalendervariant, zie tabel 2.

    In ons voorbeeld vinden we

    \begin{align*} \{ a_0, ε_1 \} \| = \Div(30s + 29 − t, 10631) = \Div(30×507334 + 29 − 14, 10631) \\ \| = \Div(15220035, 10631) = \{ 1431, 7074 \} \\ d_1 \| = \dfloorratio{ε_1}{30} = \dfloorratio{7074}{30} = 235 \end{align*}

  3. Berekening 1 levert rekenmaand \( m_0 \) en rekendagnummer \( d_0 \) uit dagnummer \( d_1 \) sinds de eerste dag van het jaar:

    \begin{align} \{ m_0, ε_2 \} \| = \Div(11d_1 + 5, 325) \\ d_0 \| = \dfloorratio{ε_2}{11} \end{align}

    In ons voorbeeld vinden we

    \begin{align*} \{ m_0, ε_2 \} \| = \Div(11d_1 + 5, 325) = \Div(11×235 + 5, 325) \\ \| = \Div(2590, 325) = \{ 7, 315 \} \\ d_0 \| = \dfloorratio{ε_2}{11} = \dfloorratio{315}{11} = 28 \end{align*}

  4. En dan tellen we 1 op bij het rekenjaarnummer \( a_0 \), rekenmaandnummer \( m_0 \) en rekendagnummer \( d_0 \) om het kalenderjaar \( a \), kalendermaand \( m \) en kalenderdag \( d \) te vinden:

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

    In ons voorbeeld vinden we

    \begin{align*} a \| = a_0 + 1 = 1431 + 1 = 1432 \\ m \| = m_0 + 1 = 7 + 1 = 8 \\ d \| = d_0 + 1 = 28 + 1 = 29 \end{align*}

    dus CJDN 2'455'774 komt overeen met dag 29 van maand 8 van jaar 1432 in de Islamitische kalender (variant IIc).

Bovenstaande formules kunnen worden ingedikt tot

\begin{align} \{ a, ε_1 \} \| = \Div(30(J − J_0) + 10660 − t, 10631) \\ \{ m, ε_2 \} \| = \Div(11\dfloorratio{ε_1}{30} + 330, 325) \\ d \| = \dfloorratio{ε_2}{11} + 1 \end{align}

In ons voorbeeld vinden we (voor variant IIc: \( J_0 = 1948440, t = 14 \)) voor CJDN 2'455'774:

\begin{align*} \{ a, ε_1 \} \| = \Div(30(J − J_0) + 10660 − t, 10631) \\ \| = \Div(30×(2455774 − 1948440) + 10660 − 14, 10631) \\ \| = \Div(15230666, 10631) = \{ 1432, 7074 \} \\ \{ m, ε_2 \} \| = \Div(11\dfloorratio{ε_1}{30} + 330, 325) = \Div(11×\dfloorratio{7074}{30} + 330, 325) \\ \| = \Div(11×235 + 330, 325) = \Div(2915, 325) = \{ 8, 315 \} \\ d \| = \dfloorratio{ε_2}{11} + 1 = \dfloorratio{315}{11} + 1 = 28 + 1 = 29 \end{align*}

dus dag 29 van maand 8 van jaar 1432, hetzelfde als hierboven.

Berekening 2 heeft een limiet van \( w/30 \) dagen. Voor 32-bitsgetallen komt dat overeen met ongeveer 202'000 Islamitische kalenderjaren.

Als je een hogere limiet wilt dan kun je met 64-bitsgetallen rekenen of de formule voor \( α_0 \) en \( ε_1 \) vervangen door

\begin{align} \{ ω_3, δ_1 \} \| = \Div(s, 10631) \\ \{ α_1, ε_1 \} \| = \Div(30 δ_1 + 29 − t, 10631) \\ a_0 \| = 30 ω_3 + α_1 \end{align}

Dan wordt de limiet \( w \) dagen, en hoger kan niet. Dat komt overeen met ongeveer 6,1 miljoen Islamitische kalenderjaren.

Hier zijn wat voorbeelden (met \( t = 14 \)) van de originele berekening en de berekening met de omweg om de limiet te vergroten, met de 32-bits \( w \).

\({s}\) \({30 s + 15}\) \({\dfrac{30 s + 15}{w}}\) \({a_0}\) \({ε_1}\) \({ω_3}\) \({δ_1}\) \({30 δ_1 + 15}\) \({α_1}\) \({ε_1}\) \({a_0}\)
71000000 2130000015 0.99 200357 4748 6678 6182 185475 17 4748 200357
2140000000 64200000015 29.90 6038942 7613 201298 962 28875 2 7613 6038942

16.10. De Mayakalender

16.10.1. Tussen CJDN en Mayakalender

16.10.2. Between CJDN and Maya Calendar

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.

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

16.10.3.1. Van CJDN naar Haab

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 \| = \dmod{J + 65}{365} \\ \{ μ_1, h_d \} \| = \Div(H, 20) \\ h_m \| = μ_1 + 1 \end{align}

Een voorbeeld: Welke Haab-datum komt overeen met 15 december 1965 = CJDN 2'439'110? Dan is \( J = 2439110 \) en

\begin{align*} H \| = \dmod{J + 65}{365} = \dmod{2439110 + 65}{365} = \dmod{2439175}{365} = 245 \\ \{ μ_1, h_d \} \| = \Div(H, 20) = \Div(245, 20) = \{ 12, 5 \} \\ h_m \| = μ_1 + 1 = 12 + 1 = 13 \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\} \).

16.10.3.2. Van CJDN naar Haab

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 − \dmod{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

\begin{align*} H \| = 5 + 20×(13 − 1) = 245 \\ J \| ≡ 245 − 65 ≡ 180 \pmod{365} \end{align*}

Dat klopt met de originele \( J \) waarmee we in het vorige voorbeeld begonnen (2'439'110), want \( 2439110 = 6682×365 + 180 ≡ 180 \pmod{365} \).

Wat is de laatste CJDN in het jaar 1965 die overeenkomt met Haab-datum \( \{ 5, 13 \} \)? Dan zoeken we de laatste \( J ≡ 180 \pmod{365} \) op of voor CJDN \( J_0 = 2439126 \) (die overeenkomt met 31 december 1965), met behulp van formule \eqref{eq:laatste}. We vinden

\begin{align*} J \| = J_0 − \dmod{J_0 − 180}{365} = 2439126 − \dmod{2438946}{365} \\ \| = 2439126 − 16 = 2439110 \end{align*}

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

16.10.4.1. Van CJDN naar Tzolkin

We rekenen CJDN \( J \) als volgt om naar een Tzolkin-datum \( \{ t_t, t_v \} \):

\begin{align} t_t \| = \dmod{J + 5}{13} + 1 \label{eq:trecena2} \\ t_v \| = \dmod{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 \| = \dmod{2439110 + 5}{13} + 1 = 3 + 1 = 4 \\ t_v \| = \dmod{2439110 + 16}{20} + 1 = 6 + 1 = 7 \end{align*}

dus die datum is \( \{ 4, 7 \} \).

16.10.4.2. Van Tzolkin naar CJDN

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 15.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} C_2 \| = C_1 (1 − r_2Q_1) + (x_2 − a_2) r_2Q_1 \notag \\ \| = (t_t − 6)×(1 − 17×13) + (t_v − 17)×17×13 \notag \\ \| = 221 t_v − 220 t_t − 2437 \\ P_2 \| = p_2Q_1 = 20×13 = 260 \end{align}

dus de oplossing is

\begin{equation} J ≡ 221 t_v − 220 t_t − 2437 = −39 t_v + 40 t_t − 97 \pmod{260} \end{equation}

Welke dagen komen overeen met Tzolkin-datum \( \{ 4, 7 \} \)? Dat zijn dagen met \( J ≡ −39×7 + 40×4 − 97 ≡ 50 \pmod{260} \). Dat klopt met \( J = 2439110 \) want \( 2439110 = 9381×260 + 50 ≡ 50 \pmod{260} \).

Omdat er geen jaarnummer in de Tzolkin zit komt deze Tzolkin-datum elke 260 dagen weer terug. We kunnen formule \eqref{eq:laatste} gebruiken om de laatste \( J \) op of voor een bepaalde \( J_0 \) te vinden die overeenkomt met deze Tzolkin-datum:

\begin{equation} J = J_0 − \dmod{J_0 − 40 t_t + 39 t_v + 97}{260} \end{equation}

De laatste Tzolkin-datum \( \{ 4, 7 \} \) die gebeurt op of voor 31 december 1965 (= CJDN 2'439'126) is \( J = 2439126 − \dmod{2439126 − 50}{260} = 2439126 − 16 = 2439110 \).

Voor het aantal dagen \( T \) sinds de laatste \( \{ 1, 1 \} \) geldt

\begin{align} T \| ≡ 40 (t_t − 1) − 39 (t_v − 1) \notag \\ \| ≡ 40 t_t − 39 t_v − 1 \notag \\ \| ≡ 40 t_t + 221 t_v − 1 \pmod{260} \end{align}

dus

\begin{equation} T ≡ \dmod{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 = \dmod{40×4 + 221×7 − 1}{260} = \dmod{1706}{260} = 146 \]

dus de laatste dag daarvoor die \( \{ 1, 1 \} \) had was CJDN \( J = 2439110 − 146 = 2438964 \), en dat klopt, want \( t_t = \dmod{J + 5}{13} + 1 = \dmod{2438969}{13} + 1 = 1 \) en \( t_v = \dmod{J + 16}{20} + 1 = \dmod{2438980}{20} + 1 = 1 \).

16.10.5. 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 15.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} C_2 \| = C_1 (1 − r_2Q_1) + (x_2 − a_2) r_2Q_1 \notag \\ \| = (H − 65)×(1 − 5×73) + (T − 96)×5×73 \notag \\ \| = 365 T − 364 H − 11380 \\ P_2 \| = p_2Q_1 = 365×52 = 18980 \end{align}

dus de oplossing is

\begin{equation} J ≡ 365 T − 364 H − 11380 ≡ 365 T − 364 H + 7600 \pmod{18980} \end{equation}

De Tzolkin en Haab hebben samen een periode van 18980 dagen, ofwel ongeveer 52 jaar.

Welke CJDN komen overeen met \( \{t_t,t_v,h_d,h_m\} = \{4,7,5,13\} \)? Dan is \( H = 245 \) en \( T = 146 \), dus \( J ≡ 365×146 − 364×245 + 7600 ≡ −28290 ≡ 9670 \pmod{18980} \), en dat klopt met de originele \( J = 2439110 \) waar we mee begonnen, want \( 2439110 = 128×18980 + 9670 ≡ 9670 \pmod{18980} \).

Omdat \( g_2 \) niet gelijk is aan 1 komen niet alle mogelijke combinaties van \( H \) en \( T \) voor in de kalender. Je krijgt uit voorgaande formule wel voor alle combinaties van \( H \) en \( T \) een antwoord, maar dat antwoord is alleen bruikbaar voor combinaties van \( H \) en \( T \) die ook echt in de kalender voorkomen. Dat zijn combinaties waarvoor \( H − T ≡ 65 − 96 ≡ 4 \pmod{5} \).

In het voorbeeld dat we al steeds gebruiken is \( H = 245 \) en \( T = 146 \), dus \( H − T = 99 ≡ 4 \pmod{5} \), dus deze combinatie komt inderdaad voor in deze kalender.

16.10.6. De Lange Telling

De Lange Telling telt dagen en heeft een serie steeds langere perioden. De kleinste is 20 dagen, de volgende is 18 keer zo lang (dus 360 dagen), en daarna is elke volgende periode steeds 20 keer zo lang als de vorige. Het getal voor elke periode begint bij 0. Vaak zijn datums in de Lange Telling gegeven met vijf getallen, maar nog langere perioden zijn bekend, tot het negende getal toe. De langst bekende periode komt overeen met ongeveer 63 miljoen jaar. Hieronder gaan we er van uit dat de Lange Telling vijf getallen bevat, en kan het vijfde getal willekeurig groot worden.

De begindatum (0.0.0.0.0) van de Lange Telling komt waarschijnlijk overeen met CJDN \( J_0 = 584283 \) (6 september −3113 in de Juliaanse kalender).

De berekeningen zijn schematisch:

  l₅ ══════════════╗
  l₄ ──────────┐   ║
  l₃ ──────┐   │   ║
  l₂ ──┐   │   │   ║
  l₁ ─(1)─(2)─(3)─(4)═ s ═(+J₀)═ J

De samenvatting van de kalenderniveaus is

(n) \({f}\) \({g}\) \({q}\) \({h}\) \({t}\) \({p}\)
1 20 1 20 0 0 20
2 360 1 360 0 0 360
3 7200 1 7200 0 0 7200
4 144000 1 144000 0 0 144000

Deze kalender is zo simpel dat we hieronder alleen de ingedikte versie van de formules geven.

16.10.6.1. Van Lange Telling naar CJDN

Het omrekenen van Lange Telling naar CJDN gaat als volgt:

\begin{align} J \| = l_1 + 20×(l_2 + 18×(l_3 + 20×(l_4 + 20×l_5))) + 584283 \notag \\ \| = l_1 + 20×l_2 + 360×l_3 + 7200×l_4 + 144000×l_5 + 584383 \end{align}

Welke CJDN komt overeen met Lange Telling \( L = 12.17.12.5.7 \)?

\[ J = 7 + 20×(5 + 18×(12 + 20×(17 + 20×12))) + 584283 = 2439110 \]

16.10.6.2. Van CJDN naar 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} \{ l_5, d_5 \} \| = \Div(J − 584383, 144000) \\ \{ l_4, d_4 \} \| = \Div(d_5, 7200) \\ \{ l_3, d_3 \} \| = \Div(d_4, 360) \\ \{ l_2, l_1 \} \| = \Div(d_3, 20) \end{align}

Welke Lange Telling \( L \) komt overeen met CJDN \( J = 2439110 \)? Dan is

\begin{align*} \{l_5, d_5\} \| = \Div(J − 584283, 144000) = \Div(2438110 − 584283, 144000) \\ \| = \Div(2438110 − 584283, 144000) = \Div(1854827, 144000) = \{ 12, 126827 \} \\ \{l_4, d_4\} \| = \Div(d_5, 7200) = \Div(126827, 7200) = \{ 17, 4427 \} \\ \{l_3, d_3\} \| = \Div(d_4, 360) = \Div(4427, 360) = \{ 12, 107 \} \\ \{l_2, l_1\} \| = \Div(d_3, 20) = \Div(107, 20) = \{ 5, 7 \} \end{align*}

Het antwoord is \( L = 12.17.12.5.7 \).



[AA]

talen: [en] [nl]

//aa.quae.nl/nl/reken/juliaansedag.html;
Laatst vernieuwd: 2022-09-15