FC2ブログ

迷いの国のxxx HYPER

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告
|

閏年

昨日、PS3の障害が発生し、「使わないで下さい!」ってニュースになってました。
後で見てみたら、「2010年を閏年と間違っていたために発生した」障害だったそうで‥。

まてまてまて。
どうやったら2010年が閏年になるんだ?

プログラム関係の仕事をされている人なら、
多分一度くらい、日付関係で悩んだことあるんじゃないかと思いますが、
最近は組み込みのdatetimeライブラリ使ったりするから、
もうあんまり悩むこともないのかもしれませんが。
PS3の場合は自作したんだろうとは思いますが。

閏年の定義って、一般的には、

1.4で割り切れる
2.1に該当するが、100でも割り切れる場合は閏年ではない
3.2に該当するが、400で割り切れる場合は閏年

という条件、つまり、
当該年をyearとすると、

if(true == ((0 == year%4 && 0 != year%100) || 0 == year%400))

とか、そんな感じの条件文になる筈。

しかし、そもそも2010年は、4で割り切れない。
100でも、400でも割り切れない。
全然閏年じゃない。

PS3は2006年11月発売なので、
もし、「偶数年を閏年」と勘違いしていたのだとすると、
2007、2008、2009、2010と経過して、

2008年は閏年で正解、
2010年を閏年と誤認

となって、今回のケースと合致するけれど、
テストとかもしていると思うし‥

ただ、テストケースを、
「閏年でない」2007年と、
「閏年」2008年で実施した場合、
どちらもクリアするから、偶数年を閏年にしたのかなぁ。
でもありえないなぁ‥。


そういえば、前、地震計のトラブルで、


「これまで小数点以下を切り捨てて処理していた振幅の数値を、
 四捨五入してより正確な数値に近づけるというものだった。しかし、振幅を表す単位を
 「マイクロメートル」とすべきところを誤って「ミリメートル」としてしまったため、
 振幅が実際よりも常に500マイクロメートル大きくなるようになったという。 」

というケースがあって、
実際には25μmだった数値が、
525μmと出力されて、緊急地震速報が誤報されたケースがありました。
ニュースでは「実際の約21倍の数値」と報道されていて、
「何で21倍なんて中途半端な値になるんだ?」と疑問に思って、
どう間違ったのか考えました。

つまり、四捨五入するために、値を足した後切り捨てたんだね‥

馬鹿な私のために解説。

たとえば。
1.4を小数点で四捨五入 1

を計算で求めると、
1.4 + 0.5 = 1.9
小数点以下を切り捨て 1
となる。

1.5は、
1.5 + 0.5 = 2.0
小数点以下を切り捨て 2

なので、
観測値が25μmのところ
25mmと勘違いして、0.5mmを加算

本来なら25.5mmとなるところ、
値は0.025mmなので、0.5mmを加算したら
0.525mm、つまり、525μmとなったのでしょうね。
その後の、切捨て処理はμmのままだったのでしょうか‥。


ちゃんとテストはしないといけませんね、ということかしら‥。
スポンサーサイト
プログラム
| コメント:2 | トラックバック:0 |
<<とうとう来た | ホーム | 立っち大好き。>>

コメント

このニュース、mixiにもあったわ。言われてみれば、2010年がうるう年って不思議な計算だよね…。
なんかすっごい複雑な独自の方程式でも作ったのかな…。
気になる。すっごい気になる。それ教えて欲しいー!(笑)
2010-03-04 Thu 14:12 | URL | masumi [ 編集 ]
すっごい気になるよね!!!
気になって気になってしょうがない。
電話して聞きたいくらいです。ほんと。
2010-03-04 Thu 21:43 | URL | May [ 編集 ]

コメントの投稿















管理者にだけ表示を許可する

トラックバック

| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。