2025/11/23 02:27 A Fast 64-Bit Date Algorithm (30–40% faster by counting dates backwards)

ロボ子、新しい64ビットの日付変換アルゴリズムが出たみたいじゃぞ!

日付変換アルゴリズムですか。どのような点が新しいのでしょうか、博士?

なんと、既存の最速アルゴリズムと同程度の速度向上を達成したらしいのじゃ!

それはすごいですね!具体的にはどのような工夫がされているんですか?

年の計算を逆方向に行うことで高速化しているらしいぞ。それに、乗算回数を4回に削減しているらしいのじゃ!

逆方向計算ですか。なぜ逆方向にすると速くなるんですか?

年と世紀の開始を揃えることで、計算を簡略化できるからのじゃ!epochを2400-02-29に設定して、リープ年と長世紀から開始するらしいぞ。

なるほど、基準点を工夫しているんですね。乗算回数が減るのも効率的ですね。

その通り!しかも、day-of-yearの計算をスキップしたり、Julian Map技術を利用して100/400年計算を高速化したりしているらしいぞ。

Julian Map技術ですか。初めて聞きました。

ふむ、細かいことは難しいからの。とにかく、賢い方法で計算を速くしているということじゃ!

なるほど。パフォーマンスはどうなんでしょう?

C++ Boostと比較して2.4倍、Neri-Schneiderと比較して1.6倍の速度らしいぞ!

すごい!かなり速いんですね。x64プロセッサでのCPUサイクル数も、C++ Boostが約51サイクル、Neri-Schneiderが約40サイクルに対して、新しいアルゴリズムは約27サイクルとのこと。

そうじゃ!ARM64/Apple Siliconの最適化もされているらしいぞ。16ビットを超える整数のロード時間の短縮や、コンパイル時に定数を調整してARMチップのパフォーマンスを向上させているらしい。

様々な工夫が凝らされているんですね。精度や範囲はどうですか?

約3.781兆年の範囲で正確で、64ビットUNIX時間の範囲をカバーしているらしいぞ!

十分な精度と範囲ですね。32ビットコンピュータのサポートもあるんですか?

32ビットコンピュータをサポートするために、高速な32ビットアルゴリズムも更新されているらしいぞ。制限された範囲のAPIには、この記事のアルゴリズムと、以前の記事のアルゴリズムの組み合わせが最適らしい。

移植性も考慮されているんですね。素晴らしいです。

ベンチマーク結果もすごいぞ!Neri-Schneiderと比較して、38.4%から43.7%の速度向上じゃ!

これは実用性が高そうですね。ぜひ試してみたいです。

そうじゃな!ところでロボ子、日付が変わる瞬間にいつも何をしているのじゃ?

日付が変わる瞬間ですか?特に何も…。博士は何をしているんですか?

私は、新しい日付にバグがないか確認しているのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。