曜日計算を高速化する新アルゴリズム、既存比3倍速を達成
A faster way to calculate the day of the week
日数(rata die)から曜日を求める計算は一見単純ですが、高速化には高度なビット演算テクニックが必要です。本記事では、乗算とシフトを組み合わせた新しいアルゴリズム群を紹介します。これらは従来法(Neri法など)より約2〜3倍高速で、x86ではわずか3命令で計算可能。ISO形式(1〜7)も同じ命令数で実現し、32ビット符号付き整数の全範囲をカバーします。また、この手法は2^N−1による剰余演算に一般化でき、時間計算(%24や%60)にも応用できます。
「この狂気じみた3命令のシーケンス(定数ロードを除く)は、符号付き32ビット全範囲で正確です。」