\(\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.
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.
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 |
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.
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}
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:
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.
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.
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.
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 |
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 |
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.
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 |
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 |
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:
alleen als het jaartal deelbaar is door 4
maar toch niet als het jaartal deelbaar is door 100
maar toch wel als het jaartal deelbaar is door 400
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.
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 |
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 |
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.
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 |
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 |
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.
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 |
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 |
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.
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 |
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 |
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.
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.
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.
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.
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.
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.
De Maya uit Anahuac (Midden-Amerika) gebruikten drie verschillende kalenders, waarvan er twee (de Tzolkin en de Haab) periodiek waren met vrij korte perioden, en de derde (de Lange Telling) misschien ook wel als periodiek bedoeld was maar die zulke lange perioden heeft dat hij in de praktijk als doorlopend (in plaats van periodiek) kan worden beschouwd.
Verschillende gebieden in Midden-Amerika hadden iets verschillende versies van deze kalenders, met andere namen voor dagen en maanden, andere manieren om jaren aan te geven, en soms telde men dagen vanaf dag 0 in plaats van vanaf dag 1. Hieronder geven we de kalenders van de stad Tikal.
De Haab heeft een dagnummer en een maand, maar geen jaarnummer. Er zijn 18 maanden van 20 dagen, plus een 19e maand van 5 dagen, en dat is samen 365 dagen, en dat noemen we het Haab-jaar. Er zijn geen schrikkeldagen. De maanden hebben een naam, en de dagen hebben een nummer dat begint bij 0.
Wij schrijven een datum in de Haab als \( \{ h_d, h_m \} \) waarin \( h_d \) het dagnummer is (van 0 tot 19) en \( h_m \) het maandnummer (van 1 tot 19).
Er zit geen jaarnummer in de Haab dus komt een gegeven Haab-datum \( \{ h_d, h_m \} \) elke 365 dagen weer terug. We moeten daarom extra informatie gebruiken om de goede te kiezen. We kunnen als volgt de laatste CJDN \( J \) vinden die overeenkomt met deze Haab-datum op of voor een bepaalde CJDN \( J_0 \):
\begin{align} H \| = h_d + 20 (h_m − 1) \\ J \| = J_0 − \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.
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 \).
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.
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 \]
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 \} \).
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 \} \).
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 \).
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
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.
gemiddeld elke maand in deze kalender begint op nieuwe maan.
het kalenderjaar in deze kalender gemiddeld begint op de noordelijke zonnewende (21 december in de Gregoriaanse kalender).
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.
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 |
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 |
De Chinese kalender is een lunisolaire kalender. De datum van het Chinese Nieuwjaar hangt af van de positie van de Zon en de Maan, maar een preciese manier om die posities uit te rekenen is niet vastgelegd. Hieronder beschrijf ik een paar aspecten van de Chinese kalender.
In de traditionele Chinese kalender heeft elk jaar een naam uit een kringloop van 10 "hemelse stammen" en een naam uit een kringloop van 12 "aardse takken". Voor elk volgende jaar gaan zowel de hemelse stam als de aardse 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.
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*}
We kunnen veel kalenderformules afleiden door rechte lijnen te vinden die met afronding de juiste resultaten geven.
We gebruiken speciale notatie voor sommige zaken.
\( C(x) \) heeft waarde 1 als aan test \( x \) voldaan is, en anders 0. Bijvoorbeeld, \( C(3 \gt 2) = 1, C(3 \lt 2) = 0 \).
\( x∥y \) stelt dat \( x \) een veelvoud is van \( y \). Bijvoorbeeld, \( 8 ∥ 4 \) want 8 is een veelvoud van 4.
\( x⊥y \) stelt dat \( x \) geen veelvoud is van \( y \). Bijvoorbeeld, \( 7 ⊥ 4 \) want 7 is geen veelvoud van 4.
\( \dfloor{x} \) is de vloerfunctie die het dichtstbijzijnde hele getal niet groter dan \( x \) oplevert, dus in de richting van \( −∞ \). Bijvoorbeeld, \( \dfloor{5.3} = 5, \dfloor{−2.8} = −3, \dfloor{7} = 7 \).
\begin{equation} \dmod{x}{p} ≡ x \bmod p ≡ x − p\dfloorratio{x}{p} \label{eq:mod} \qquad (p \gt 0)\end{equation}
is de modulusfunctie die het niet-negatieve verschil geeft tussen \( x \) en het dichtstbijzijnde veelvoud van positieve \( p \) dat niet groter is dan \( x \). Er geldt altijd (als \( p \gt 0 \))
\begin{align} x \| = \dfloorratio{x}{p} + \dmod{x}{p} \\ x \| = \dfloor{x} + \dmod{x}{1} \\ \dmod{x}{p} \| = p\left\lfloor \frac{x}{p} \right\rceil_1 \label{eq:mod1top} \\ 0 \| \le \dmod{x}{p} \lt p \\ \dmod{x + np}{p} \| = (x + np) − p\dfloorratio{x + np}{p} \notag \\ \| = x + np − p\dfloor{\dfrac{x}{p} + n} \notag \\ \| = x + np − p\dparen{\dfloorratio{x}{p} + n} \| \quad (n∥1)\notag \\ \| = x − p\dfloorratio{x}{p} = \dmod{x}{p} \label{eq:modn} \end{align}
Bijvoorbeeld
\({x}\) | \({4\dfloorratio{x}{4}}\) | \({\dmod{x}{4}}\) |
---|---|---|
−2 | −4 | 2 |
−1 | −4 | 3 |
0 | 0 | 0 |
1 | 0 | 1 |
2 | 0 | 2 |
3 | 0 | 3 |
4 | 4 | 0 |
5 | 4 | 1 |
\begin{equation} \ddom{x}{p} ≡ x \bdom p ≡ p\dceilratio{x}{p} − x \qquad (p \gt 0) \label{eq:dom} \end{equation}
is de "domulus"-functie die het niet-negatieve verschil geeft tussen \( x \) en het dichtstbijzijnde veelvoud van positieve \( p \) dat niet kleiner is dan \( x \). Ik verzon de notatie \( \bdom \), dat is \( \bmod \) maar dan achterstevoren gespeld. Ik verzon ook de naam "domulus", vergelijkbaar met "modulus" maar met "dom" in plaats van "mod". Er geldt altijd (als \( p \gt 0 \))
\begin{align} x \| = p\dceilratio{x}{p} − \ddom{x}{p} \\ x \| = \dceil{x} − \ddom{x}{1} \\ \ddom{x}{p} \| = p\left\lceil \frac{x}{p} \right\rfloor_1 \label{eq:dom1top} \\ 0 \| \le \ddom{x}{p} \lt p \\ \ddom{x + np}{p} \| = p\dceilratio{x + np}{p} − (x + np) \notag \\ \| = p\dceil{\dfrac{x}{p} + n} − x − np \notag \\ \| = p\dparen{\dceil{\dfrac{x}{p}} + n} − x − np \| \quad (n∥1) \notag \\ \| = p\dceil{\dfrac{x}{p}} − x = \ddom{x}{p} \label{eq:domn} \end{align}
Bijvoorbeeld
\({x}\) | \({4\dceilratio{x}{4}}\) | \({\ddom{x}{4}}\) |
---|---|---|
−2 | 0 | 2 |
−1 | 0 | 1 |
0 | 0 | 0 |
1 | 4 | 3 |
2 | 4 | 2 |
3 | 4 | 1 |
4 | 4 | 0 |
5 | 8 | 3 |
\( \{ m, n \} = \Div(x,y) \) is een functie die twee uitkomsten \( m, n \) geeft zodat \( x = my + n \) met \( m \) een heel getal, \( 0 \le n \lt y \gt 0 \) en
\begin{align*} m \| = \dfloorratio{x}{y} \\ n \| = \dmod{x}{y} = x \bmod y \end{align*}
Een paar handige relaties (voor \( p \gt 0 \)):
En hun bewijzen:
\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}
\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}
\( \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} \)).
\( \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}
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} \).
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 \).
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}
\( \ddom{−x}{p} = \dmod{x}{p} = −\ddom{x}{p} + pC(x⊥p) \) volgt uit de vorige als je elke \( x \) vervangt door \( −x \).
\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}
\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.
\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}
\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}
\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.
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}
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}
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}
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}
\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}
\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}
\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}
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.234e20, 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.
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.
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 \).
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.
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.
Zoek voor \( j \) van 1 tot en met \( (g/R_1) − 1 \).
Voor elke \( j \), zoek voor \( k \) van 0 tot en met \( n_* − 1 \).
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.)
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.
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.
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.
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 \).
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.
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).
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}
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}
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 |
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 |
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 |
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 |
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}
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.
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*}
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 \).
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 \).
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\} \).
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 |
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.
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 \),
Zet
\begin{align*} C_1 \| = x_1 − a_1 \\ P_1 \| = p_1 \end{align*}
Voor \( i \) van 2 tot en met \( n \):
Bereken \( g_i = \gcd(P_{i−1}, p_i) \), de grootste gemene deler van \( P_{i−1} \) en \( p_i \).
Vind \( n_i, m_i \) zodat
\[ g_i = n_i P_i + m_i p_i \]
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*}
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} \).
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} \).
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 |
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 |
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 |
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 |
Deze samenvatting noemt dagen en maanden, maar geldt ook voor andere tijdseenheden. We onderscheiden vier verschillende moeilijkheidsgraden: van 1 tot 4 worden de formules ingewikkelder maar kunnen ze ook meer gevallen aan.
De 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.
Kalendertype 2 is gelijk aan kalendertype 1, behalve dat ook verschuiving van het patroon van maandlengtes toegestaan is.
Kalendertype 3 is gelijk aan kalendertype 2, maar nu kan het lengteverschil tussen de maandlengtes meer dan één zijn.
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:
\( q \) is het aantal dagen in de kortste maand. \( q \) is een heel getal groter dan nul.
\( p \) is de gemiddelde lengte van het oneindige aantal maanden dat deze kalender beschrijft (zelfs als door een vlakke combinatie met een andere kalender in de praktijk slechts een beperkt aantal maanden gebruikt wordt). \( p \) is groter dan nul, maar is meestal geen heel getal.
\( f \), \( g \) zijn de teller en noemer uit \( p = f/g \). Het zijn hele getallen groter dan nul.
\( h/g \), \( h_i/g_i \) is de fractie van het oneindige aantal maanden dat de afwijkende maandlengte (ongelijk aan \( q \)) heeft. \( h, h_i, g_i \) zijn hele getallen groter dan nul.
\( r \), \( r_i \) is het verschil tussen een maandlengte en de basismaandlengte \( q \). Het zijn hele getallen groter dan nul.
\( t/g \), \( t_i/g_i \) geeft aan over hoeveel maanden het patroon van maandlengtes verschoven wordt ten opzichte van het simpelste geval. Het zijn hele getallen. Alleen de waarden 0 tot \( g \) zijn belangrijk; waarde \( t + g \) heeft hetzelfde effect als waarde \( t \).
\( γ_i = g/g_i \) is een factor die nodig is als niet alle \( g_i \) gelijk zijn.
\( m \) is het doorlopende maandnummer. Het is een heel getal, en kan negatief, nul, of positief zijn.
\( σ \) is het doorlopende dagnummer van het begin van maand \( m \). Het is een heel getal, en kan negatief, nul, of positief zijn.
\( ξ \) is een correctie die je bij het maandnummer \( m \) op moet tellen om een betere schatting te krijgen voor het maandnummer. Dit is alleen van belang voor kalendertypes 3 en 4.
\( d \) is het aantal dagen sinds het begin van de huidige maand, \( d = s − σ \).
# | 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.
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
a, m en d zijn het jaartal, maandnummer en dagnummer, samen de kalenderdatum, en staan helemaal links.
J is het CJDN en staat helemaal rechts.
(1): cijfers tussen haakjes geven een bewerking aan die dan per nummer verderop uitgelegd wordt. De bewerking komt meestal overeen met een kalenderniveau, en is in beide richtingen gemakkelijk.
[3]⇒: cijfers tussen rechte haakjes zijn als cijfers tussen kromme haakjes maar in dit geval is de bewerking maar in één richting gemakkelijk. Die richting wordt door een pijltje zoals ⇒ aangegeven.
(+J₀), (−1): dingen met een + of − ervoor tussen haakjes geven aan dat de aangegeven hoeveelheid erbijgeteld of erafgetrokken moet worden, als je van links naar rechts gaat. Bijvoorbeeld, (−1) betekent: trek er 1 van af, als je van links naar rechts gaat (van datum naar CJDN). Als je van rechts naar links gaat (van CJDN naar datum) dan is de bewerking precies omgekeerd, dus dan betekent (−1) juist dat je er 1 bij op moet tellen.
Andere letters (met een subscript) geven tussenresultaten aan. De tussenresultaten met namen met een a erin (zoals a₁) zijn gemeten in jaren, die met m zijn gemeten in maanden, die met d, s of J zijn gemeten in dagen, en die met een c erin zijn gemeten in eenheden van meerdere jaren.
De enkele ─ en dubbele ═ lijnen tussen de symbolen geven aan welke bewerkingen welke invoer en uitvoer hebben. De dubbele lijnen geven doorlopende waarden aan die in principe elk heel getal kunnen zijn, zoals het jaartal of het CJDN. De enkele lijnen geven grootheden aan die maar een heel beperkt aantal verschillende waarden kunnen hebben, zoals het dagnummer in de maand.
Bewerkingen met grotere eenheden staan hoger in het diagram dan die met kleinere eenheden.
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.
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:
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.
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.
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 |
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}
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 |
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.
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.
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 |
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 |
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}
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}
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}
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}
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 |
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 |
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}
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.
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\} \).
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.
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 |
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:
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.
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.
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.
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:
146097 dagen in 400 jaar → \( p = f/g = 146097/400 \). Dit levert 85 stukken met elke 4 jaar een schrikkeljaar, maar ook 12 stukken met elke 5 jaar een schrikkeljaar. Dat komt niet overeen met de Gregoriaanse kalender, dus met dit geval kunnen we de Gregoriaanse kalender niet berekenen.
146097 dagen in 100 perioden van 4 jaar → \( p = f/g = 146097/100 \). Dit levert 2 stukken met elke 33 perioden (van 4 jaar) een schrikkeldag minder (1460 dagen in plaats van 1461 dagen), en 1 stuk met 34 perioden. De Gregoriaanse kalender heeft 2 stukken met elke 25 perioden (van 4 jaar) een schrikkeldag minder en dan een stuk van 50 perioden met aan het eind een schrikkeldag minder. Ook niet geschikt, dus.
36524 dagen in 100 jaar → \( p = f/g = 36524/100 \). Dit levert 20 stukken met elke 4 jaar een schrikkeljaar, maar ook 4 stukken met elke 5 jaar een schrikkeljaar. Ook niet geschikt, dus.
146097 dagen in 4 perioden van 100 jaar → \( p = f/g = 146097/4 \). Dit levert 3 perioden van 36524 dagen en 1 periode van 36525 dagen, en dat klopt wel.
36525 dagen in 100 jaar → \( p = f/g = 36525/100 \). Dit levert 25 stukken met elke 4 jaar een schrikkeljaar. Dat klopt, behalve dat we soms al na 36524 dagen stoppen.
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:
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}
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}
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}
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}
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}
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}
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 |
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 |
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}
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}
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}
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}
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}
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}
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 |
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:
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}
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}
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}
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}
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.
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 |
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}
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}
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}
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}
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 |
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.
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 |
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.
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:
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}
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}
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}
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}
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}
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}
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 |
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 |
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}
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}
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}
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}
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}
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}
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 |
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:
alleen als het jaartal deelbaar is door 4
maar toch niet als het jaartal deelbaar is door 100
maar toch wel als het jaartal deelbaar is door 400
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 |
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:
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}
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}
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}
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}
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}
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}
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}
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}
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.
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.
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}
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}
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}
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}
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}
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}
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}
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}
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.
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
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 |
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*}
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}
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}
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.
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 |
Eerst trekken we de CJDN \( J_0 \) van lopende dagnummer 0 er van af.
\begin{equation} s = J − J_0 = s − 1448273 \end{equation}
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}
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}
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.
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
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 |
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*}
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}
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}
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 |
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 |
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}
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}
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}
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 |
De Joodse kalender is een zongebonden maankalender, net als de Babylonische kalender. De Joodse kalender is veel ingewikkelder dan de Babylonische, want
de Joodse kalender heeft vier regels die het begin van het jaar kunnen vertragen, om bepaalde kalenderdagen niet op bepaalde dagen van de week te laten vallen.
het kalenderjaar in de Joodse kalender kan zes verschillende lengtes hebben.
de Joodse kalender heeft drie verschillende plekken waar een schrikkeldag of -maand toegevoegd kan worden.
het Joodse nieuwjaar valt niet aan het begin van de eerste maand maar aan het begin van de zevende maand.
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
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 |
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 |
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 |
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 |
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.
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.
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}
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 |
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 |
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 |
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 |
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 |
Nu gaan we de andere kant op. De kalender is zo ingewikkeld dat we niet simpelweg de berekeningen van datum naar CJDN kunnen omkeren.
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 |
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:
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} \} \).
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} \} \).
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.
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}
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}
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 |
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 |
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 |
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:
Het kalenderjaar in de lunisolaire kalender moet ongeveer hetzelfde zijn als het kalenderjaar in de moderne (Gregoriaanse) kalender.
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.
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).
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.
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 |
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*}
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 | |
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*}
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.
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:
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 \]
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*}
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*}
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 |
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 |
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*}
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*}
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*}
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 |
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 |
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 \]
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*}
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*}
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 |
De Maya uit Anahuac (Midden-Amerika) gebruikten drie verschillende kalenders, waarvan er twee (de Tzolkin en de Haab) periodiek waren met vrij korte perioden, en de derde (de Lange Telling) misschien ook wel als periodiek bedoeld was maar die zulke lange perioden heeft dat hij in de praktijk als doorlopend (in plaats van periodiek) kan worden beschouwd.
Verschillende gebieden in Midden-Amerika hadden iets verschillende versies van deze kalenders, met andere namen voor dagen en maanden, andere manieren om jaren aan te geven, en soms telde men dagen vanaf dag 0 in plaats van vanaf dag 1. Hieronder geven we de kalenders van de stad Tikal.
De Haab heeft een dagnummer en een maand, maar geen jaarnummer. Er zijn 18 maanden van 20 dagen, plus een 19e maand van 5 dagen, en dat is samen 365 dagen, en dat noemen we het Haab-jaar. Er zijn geen schrikkeldagen. De maanden hebben een naam, en de dagen hebben een nummer dat begint bij 0.
Wij schrijven een datum in de Haab als \( \{ h_d, h_m \} \) waarin \( h_d \) het dagnummer is (van 0 tot 19) en \( h_m \) het maandnummer (van 1 tot 19).
Om een CJDN \( J \) om te rekenen naar een Haab-datum \( \{ h_d, h_m \} \) moeten we eerst \( H \) uitrekenen, het aantal dagen sinds het begin van het huidige Haab-jaar (met \( H = 0 \) voor de eerste dag van het Haab-jaar).
\begin{align} H \| = \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\} \).
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*}
De Tzolkin heeft een periode van 20 dagen (de venteina) met een naam voor elke dag, en een periode van 13 dagen (de trecena) met een nummer voor elke dag (te beginnen bij 1).
Wij schrijven een datum in de Tzolkin als \( \{ t_t, t_v \} \), waarin \( t_t \) het dagnummer in de trecena is (van 1 tot 13) en \( t_v \) het dagnummer in de venteina (van 1 tot 20).
De trecena en venteina lopen allebei tegelijk op, dus na dag \( \{ 2, 7 \} \) komt dag \( \{ 3, 8 \} \) en dan \( \{ 4, 9 \} \), enzovoort. Omdat 13 en 20 relatief priem zijn komen alle mogelijke combinaties van venteina en trecena voor in deze kalender, dus na 13×20 = 260 dagen herhalen de datums zich weer.
We rekenen CJDN \( J \) als volgt om naar een Tzolkin-datum \( \{ t_t, t_v \} \):
\begin{align} t_t \| = \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 \} \).
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 \).
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.
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.
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 \]
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.quae.nl/nl/reken/juliaansedag.html;
Laatst vernieuwd: 2022-09-15