Wochentag in 3 Befehlen: Neuer Algorithmus schlägt Compiler-Ausgabe
A faster way to calculate the day of the week
Die Umwandlung eines Tageszählers in den Wochentag klingt trivial, ist aber überraschend komplex. Dieser Artikel stellt eine Reihe extrem schneller Funktionen vor, die alle bisherigen Lösungen übertreffen – oft mit nur einer Multiplikation plus zwei Zyklen Latenz. Überraschend: Der ISO-Wochentag (1–7) lässt sich mit denselben Befehlen berechnen wie der Unix-Wochentag (0–6), nur mit anderen Konstanten. Die Techniken verallgemeinern auf x % (2^N − 1) und bieten neue schnelle Modulo-Methoden für Divisoren wie 24 und 60, relevant für die Zeitmessung. Ein Highlight ist eine 3-Befehls-Sequenz, die über den gesamten vorzeichenbehafteten 32-Bit-Bereich korrekt ist.
Ein überraschendes Ergebnis wird präsentiert: Der Wochentag kann im ISO-Format ([1‥7] statt [0‥6]) mit exakt denselben Befehlen berechnet werden, nur mit angepassten Konstanten (und ohne Geschwindigkeitseinbuße).