Algo-rytm prze-stęp-NY

https://xpil.eu/QpazO

Co cztery lata luty jest o dzień dłuższy, niż zwykle. Czy aby na pewno?

Pytanie takie zadał mi niedawno kolega implementujący logikę daty w jednym z procesów. Ja mu na to, że nie do końca. Trzeba sprawdzić podzielność przez cztery, owszem, ale potem jeszcze przez sto albo czterysta.

Kolega się zdziwił wielce, ale zaraz potem zasiadł do gugielnicy i okazało się, że prawie miałem rację.

Czemu prawie?

Bo nie "sto albo czterysta" tylko "sto oraz czterysta"

Ziemia okrąża słońce raz na rok, zgadza się?

I w tym czasie kręci się wokół własnej osi.

Żeby nie było za nudno, ilość obrotów wokół własnej osi, jaką nasza planeta wykonuje w ciągu roku, nie jest liczbą całkowitą. Rok zajmuje bowiem dokładnie 365.242375 obrotów Ziemi wokół własnej osi.

Żeby więc w kalendarzu pozostał porządek (rozumiany w baaaardzo szerokim znaczeniu), trzeba raz na cztery lata skorygować te nieszczęsne ćwierć dnia i zamiast 365 robi się "sztucznie" 366, dodając jeden dzień do najkrótszego miesiąca w roku. Na razie proste.

Ale ponieważ to nie jest dokładnie ćwierć, tylko 0.242375 dnia, faktycznie różnica między dniem "gwiezdnym" a uśrednionym kalendarzowym wynosi 365.25 - 365.242375 = 0.007625. O tyle więcej dokładamy - średnio - do każdego dnia, pomimo tego, że co cztery lata robimy korektę.

Dlatego też raz na sto lat rok, który powinien być przestępny, przestępnym nie jest (a więc na przykład luty 1900 roku miał 28 dni). Po stu latach z naszej rocznej różnicy 0.007625 dnia zrobi się 0.7625 dnia - tyle "dodaliśmy" poprzez wydłużanie lutego co cztery lata, trzeba więc jeden dzień "zabrać" - dlatego okrągłe setki nie są numerami lat przestępnych.

Czyli tak: co cztery lata poprawiamy z górką, co sto lat korygujemy tę górkę - z tym, że górka wynosi 0.7625 dnia na każde stulecie, a korekta - minus jeden dzień. A więc po stu latach mamy błąd na minus (0.7625 - 1 = -0.2375 dnia), cztery takie stulecia i robi się z tego cały dzień opóźnienia (a dokładnie 0.95 dnia). Trzeba go więc znów "oddać", czyli raz na czterysta lat rok jest znów przestępny, pomimo tego, że dzieli się przez sto.

Skrócony przepis wygląda tak:

Weź numer roku. Dzieli się przez 4? Jeżeli nie, rok nie jest przestępny. Jeżeli tak, sprawdź, czy dzieli się przez 100. Jeżeli nie, rok jest przestępny. Jeżeli tak, sprawdź, czy dzieli się przez 400. Jeżeli nie, rok nie jest przestępny. Jeżeli tak, rok jest przestępny.

A jak to wygląda w dłuższym perymetrze?

Rzućmy okiem:

leap

Jak widać, wszystkie te korekty układają się w piłokształtny wykres, który idzie sobie w górę i w dół w dość przewidywalny sposób - jednak ogólny trend jest taki, że całość idzie pomalutku w górę.

Na dzień dzisiejszy (chociaż bardziej by pasowało napisać: w bieżącym roku, ale nie chcę już nadużywać klawisza backspace) różnica pomiędzy faktyczną ilością dni (gwiazdowych) jakie upłynęły od narodzin niejakiego Jezuza (tego od Chrystusów) do dziś, wynosi około 0.372 (czyli prawie dziewięć godzin).

Ostatni rok, kiedy ta różnica była bliska zeru, to 2001 (tylko 0.006 dnia, czyli około jedenastu minut), a przedtem 1968 (około osiem i pół minuty). Następny taki rok to 2034 (trzynaście i pół minuty różnicy) a potem dopiero 2261 (czternaście i pół minuty).

Za kilkanaście / -dziesiąt tysięcy lat trzeba będzie wprowadzić jeden dodatkowy rok nie-przestępny, żeby się znów mniej więcej zgadzało.

No chyba, że w międzyczasie wyniesiemy się na inne planety. Wtedy to dopiero się zrobi bajzel w kalendarzu...

https://xpil.eu/QpazO

1 Comment

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]

Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.