曜日を求める(8bit範囲で)

マイコンを使って年月日から曜日を求めたいケースがありました。普通の環境ならC言語を前提とすれば<time.h>にあるmktime関数とlocaltime関数を使うことで実現できます。


裏では曜日を求めるアルゴリズム(色々あります)のどれかを使って求めていると思います。


今回は対象がマイコンということもあり、機能を限定することでコンパクトなアルゴリズムに改変してみました。


sakamoto's methodを元にしました。日時範囲はGPS時刻を前提とすることで1980年以降とし、また2099年まで使えればよい割り切りをしています。すると、うるう年の計算が100で割り切れて400で割り切れない年を考慮する必要がなくなり、簡略化されました。また型を最小のunsigned charで統一してみました。


検証はRubyのRspecでやってみています。


上記CコードとRubyでのDate#wdayとの一致を見ています。なおテストの実装にあたっては、RubyInlineを使ってRubyの中でC言語コードを直接扱ってみました。

July 04, 2024 11:40 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク

コメント

コメントする