CGI-BBS > CGI > Perl > 電子日記帳のバグ調査ご協力のお願い


カレッヂ
カレッヂ


質問者 レスキュー  投稿日 4/30(月) 23:41:40
いつもお世話になっています。
電子日記帳で、過去の任意の年において、曜日計算ミスが出ることが分かりました。http://www.rescue.ne.jp/cgi/webdiary/sample/diary.cgi

たとえば、1959年の12月⇒1960年1月で曜日がずれてしまいます。
1960年全体が1日ずれています。1956年の12月⇒1957年1月で曜日がずれてしまいます。
1956年全体が1日ずれています。その間の1958-1959,1957-1958は合っています。

万年カレンダーなので、全体がずれる場合は分かるのですが、なぜ途中で計算が
おかしくなるのか、どうしてもバグが見つかりません。

正確なカレンダーは
http://www.beans-company.ne.jp/demo/calender/
で確認することができます。

もしプログラムのどこが原因なのか、発見された方がいらっしゃいましたら
是非レポートをお願いしたく、ここにお願い申し上げます。

メールでも結構です。rescue@rescue.ne.jp
回答者 おおがみ  [削除]  投稿日 5/1(火) 11:04:23
692行目
$base = (($year - 1) * 365) + (($year - 1) / 4) - (($year - 1) / 100) + (($year - 1) / 400);

$base = (($year - 1) * 365) + int(($year - 1) / 4) - int(($year - 1) / 100) + int(($year - 1) / 400);

とすればよさげですな。


計算部分がどこか示してくれると判りやすいのに...


質問者 レスキュー  [削除]  投稿日 5/1(火) 12:18:04
レポートありがとうございます。
どの部分が影響しているのか不明だったので、どの計算部分かも質問としては
特定しませんでした。なるほど、小数点以下の誤差が発生していたのですね。
それで、数字(西暦)によって小数点以下の変化により、西暦によって
ずれたりずれなかったりしていたようで、ここは何回も見ましたが、
なかなか気がつきませんでした。コロンブスのたまご状態でした。
ありがとうございました。

このページは終了したので返信(回答)は書きこめません

Web裏技