デジタルちんぶろぐ

デジタルな話題

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  268  : 記事  0  : コメント  4375  : トラックバック  79

ニュース


技術以外は
ちんぶろぐ

記事カテゴリ

書庫

日記カテゴリ

2010年を閏年と判定してしまう計算はどうやっていたのか興味があります。

  • 閏年は4で割り切れる年で且つ100で割り切れない年
  • 100で割り切れる年は閏年ではない。但し400で割り切れる年は閏年

です(よね?)。上記ルールをそのままプログラムで書くと以下のようになるでしょう。

  if((year % 4) == 0) {
    if((year % 100) == 0) {
      if((year % 400) == 0) {
        return true;
      }
      return false;
    }
    return true;
  }
  return false;

最初に思い浮かんだのが1970年を起点として

(年数-1970)%4

で計算しているというものです。これだと(2010-1970)%4=0で閏年と判定されてしまいそうですが、PS3の販売は2006年なので2008年の閏年で判定ミスが出なかったことがおかしいです。

そこで次に考えたのが100を10と間違えてしまったプログラムです。単なるケアレスミスですが、コンパイルエラーになるわけでもないしテストしていなければ気付かないという可能性はあります。
しかし、10と100を間違えたところで100で割り切れて400で割り切れない年は閏年ではないので2010年を閏年と判定することは無いと思います。
そこで更に考えたのが100を10と間違えて且つ判定を勘違いしていた。つまり100(10)で割り切れていても閏年と判定してしまっていたのではないか?ということです。上記コードの赤字になっている部分2箇所を間違えてしまっていたんじゃないかなー?
というのが僕の想像したPS3閏年判定ミスです。

幾らなんでも違うだろうな…^^;

考えていたときに書いた閏年判定ショートコーディング。

   return !(year%400)||(year%100)&&!(year%4);  // 正常版
   return !(year%400)||!(year%10)||!(year%4);    
// 想像したPS3版

投稿日時 : 2010年3月3日 1:26

コメント

# re: PS3の閏年判定ミスを勝手に想像する 2010/03/03 12:47 やじゅ
一部では、2000 + 0x10 = 2016年(2010年問題) と推測されてるみたいです。


# PS3の閏年判定ミスを勝手に想像する 2010/03/03 12:54 囚人のジレンマな日々
PS3の閏年判定ミスを勝手に想像する

# PS3の閏年判定ミスを勝手に想像する 2010/03/03 12:55 囚人のジレンマな日々
PS3の閏年判定ミスを勝手に想像する

# re: PS3の閏年判定ミスを勝手に想像する 2010/03/03 13:51 あんどちん
>> やじゅさん
以前やじゅさんが書かれていた2010年問題と同じ原因ということですね。
なるほど。その可能性もありますね。

# re: PS3の閏年判定ミスを勝手に想像する 2010/03/04 10:06 x^y^z
ハードいじらなくなって長いのですが、RTCチップのデータの返し方はチップによって色々で、月は16進だけど年はBSDで、みたいな妙なものもあったように記憶しています。

同じケアレスミスでも、コードレビューですぐにわかる桁の間違えよりは、RTCのインタフェースの誤解の方がありそうに思えます。ソフト単体のテストではカバーできませんし。

# re: PS3の閏年判定ミスを勝手に想像する 2010/03/05 9:46 あんどちん
> x^y^zさん
そうですね。RTCが問題の原因の可能性は大きいと思います。新型PS3で起きなかったのはRTCが変更されたからと考えれば納得できますね。旧型はBCDで読み出すタイプで新型はBinaryで読み出すタイプであれば。

気になるのはRTCが2010/2/29という日付を出力していたのかGMTを日本時間へ変換する時に2010/2/29へ変換してしまったのかですが、2010/3/1 9:00で直ったという報告があるようですので10(BCD)->0x10->16で2016年と間違えて、ローカル時間へ変換する際に+9:00して日付が2/29になってしまったという可能性が高いと思います。


# CyyCXsuDpuqzzXagSFm 2012/01/04 6:19 http://www.kosherbeefjerky.net/
9udIys Honestly, not bad news!...

Post Feedback

タイトル
名前
Url:
コメント: