忍者ブログ
20080511~ 13と7と11の倍数の論理積は13と7と11の積の倍数である。 和ァ・・・
[958] [957] [956] [955] [954] [953] [952] [951] [950] [949] [948]
以前紹介したツェラーの公式(サマーウォーズから)

西暦と日付から曜日を算出する式なんだけど(ただしグレゴリオ暦に絞る)

先日ブログサーフィンしてたらなんか、

「ツェラーの公式を誤って紹介しているブログが多すぎる」

だったかな?そんな感じの文面を見かけた気がして

ちょっと心配になったので、友達の家に遊びにいったついでに

友達の家のエクセルで計算してみたんだよ

そしたら1900年の1月と2月だけ1日分合わないんだよ

その日は結局原因もわからずじまい・・・




その後数日すっかり意識もせず過ごしてたんだけど

ある日突然思い出したことがあって

曜日の判定ってどうやったっけ?っていうものだった

当時はシリアル値をweekday関数にぶち込んでたんだけど

別にこれってシリアル値がオブジェクト的に曜日の情報を持ってるわけじゃなくて、シリアル値をただ単に7で割ってその余りを曜日に対応させてるだけなんだよね


エクセルのシリアル値って1から始まる整数の表示形式を日付に変えるだけで1900年の1月1日から始まるようにできてるんだけど

じゃあ1900/01/01って何曜日なんだろう?ってふと気になって調べてみると日曜日って出るんだよ。

ツェラーの公式もそうなんだけど、一般的に曜日を数字にするときって
日曜を1とする方法と月曜を1にする方法の2通りに大別されて、どっちかっていうと日曜を1とする方法のほうが一般的みたいなんだけどね

シリアル値を開始した1900年の1月1日(整数にすると1)がちょうど日曜(1に相当)ってできすぎてね?って思ったわけ。

weekday(シリアル値)=mod(シリアル値,7)+d
のd=0だったっていう話。


てっきり僕は、シリアル値を7で割ったあまりに1~6までのどれかを足して曜日にすると思ってただけに、そのまんま足さずにあっさり曜日に変換できたって事実にちょっと妙な偶然というかそんな変な違和感を感じて
1900年1月1日の曜日をググってみたんだよ
(曜日を1~7にするにしても0~6にするにしても7で割ったあまりってことには変わりはないよ)


そしたら、1900年1月1日って日曜日じゃなくて月曜日だっていうじゃんか!

ちょっと調査を続けてたら、エクセルには「存在しないはずの1900年2月29日」が存在してたらしい!!

だから1900年の1月と2月の曜日だけがズレたんだよ!


じゃあなんで1900年だけなのかってことを考えてみると
なんとなーくかつての2000年問題と似たようなにおいを感じてね


というのも、2000年問題っていうのが

1.年が4で割り切れる年は閏年とする
2.(1)のうち、年が100で割り切れる年は閏年としない
3.(2)のうち、年が400で割り切れる年は閏年とする

のうちの1と2だけを2000年に適用させたことによる問題だったんだけど

エクセルの1900年はもっとひどくて1しか適用してなかったみたいな風にも見えるんだよ

だから1900年が誤ってうるう年と認識されて、2月29日が存在することになったんじゃないか

って風にも見えちゃうんだよねぇ


このバグの変更はすごくデリケートなところだと思うんだ

バグをなくそうとすると、途中からエクセルの根幹を書き換えなきゃならなくなるわけで、そうすると旧エクセルと新エクセルの互換性がなくなってしまうんだよね

というか、微妙に互換性を保ってるほうが問題でね

「なんだ旧エクセルファイル使えるじゃん」って無意識に使っていたら曜日のデータが全部間違ってたことに25年後に気づいた

なんてことになったらまずいからね

むしろバグを解消する際にファイル形式を改めるべきかもしれないね
(でもエクセル2007でも解消してないらしい)


調べてみたら、エクセルが出回る前に広く使われていた表計算ソフト「ロータス123」との互換性を与えるためにあえてバグを残したって書いてあった。


つまり結構昔からこのバグが存在しているにも関わらず、わりとしょーもない諸事情により取り除くことができない状態が今もって続いているみたいなんだね


っていうことは、当時はパソコンあるいは表計算ソフトが100年使われることもないだろうとかってそんな風に思われていたのかな?

あるいは、未来の日付には注意してたんだけど、過去の日付に対してはちょっと油断してた

とかそんな雰囲気だったのかもしれないね


にほんブログ村 科学ブログ 自然科学へ
にほんブログ村

拍手[0回]

PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


トラックバック
この記事にトラックバックする:


忍者ブログ [PR]
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
ブログランキング
ブログランキング参戦中
にほんブログ村 アニメブログ 深夜アニメへ
にほんブログ村 漫画ブログ SF・ファンタジー漫画へ
にほんブログ村 科学ブログ 自然科学へ
よかったらポチッとお願いします^^
最新CM
[12/30 buy steroids credit card]
[09/26 Rositawok]
[03/24 hydraTep]
[03/18 Thomaniveigo]
[03/17 Robertaverm]
最新TB
プロフィール
HN:
量子きのこ
年齢:
43
性別:
男性
誕生日:
1981/04/04
職業:
WinDOS.N臣T
趣味:
妄想・計算・測定・アニメ
自己紹介:
日記タイトルの頭についてるアルファベットは日記の番号です
26進数を右から読みます
例:H→7番目、XP→15(P)×26+23(X)=413番目。
A=0とする仕様につき一番右の桁はAにできませんのでご了承くださいズコー
バーコード
ブログ内検索
アクセス解析