Oneside Flat Web

◆不定期日記ログ◆

■2017-02-16
10ビット突破記念日
 今日は我が娘が誕生して、ちょうど1024日目にあたる。
 1024、それは1と0しか理解しないスイッチングデバイスと十本指の人間が編み出した調和の数。人間の頭脳にもいつかきっとインストールされる、そんな約束の数字。

 十本指……つまり10ビットの情報量でカウントできる数字の限界が1023である。我が娘は本日これを突破し、11ビット目に光が灯った形になる。
 桁を繰り上げるのは大変なのだ。次の桁が用意されていないがためにいきなり最小値に戻ってしまったり、3桁目を表示できないがためにレベル99を突破したときに「あ0」になってしまったりするのである。初代聖剣伝説に至ってはゲームが止まる。そのようなバグもなくここまで成長したことを、まずは素直に喜びたい。

 喜んでいるだけではアレなので、皆様にもこのシンピテキを感じてもらうべく、誕生日から数えて桁上がりが起こる日を計算する装置を一気呵成に作りあげました。自身やご子息ご息女の、次に桁が上がる日を確認してバグに備えてください。
桁上がり記念日計算機
http://one.cside.to/flat/overflow/index.php
 我々の平均寿命がざっくり30000日くらいだということを改めて実感して震えている。89歳まで生きてやっと16ビット目(32768日)に到達する。
 人間のクラスに生存日数のプロパティが用意されていた場合、神はたぶんそれを16ビットのintegerに設定したのではないだろうか。まさか65635日以上生きる個体はいるまい。メモリを節約すべし。そんなふうに我々をプログラミングした可能性がある。
 なので、誰かサイバネ機構を駆使して180歳くらいまで生きてみてほしい。生存日数が65536日目に到達した瞬間、算術オーバーフローが発生し、生存0日目に戻るバグがあるかもしれない。やってみる価値はある。なにしろ人間は数学的には必ず死ぬとは限らないのだ。
 どうでもいいけど「算術オーバーフロー」という響きがやたら強そうに感じてしまうのはFFタクティクスのせいですよね。


 ここから技術的な余談になる。
 このプログラムを書いているときに初めて「2038年問題」にぶちあたって多少難儀した。2038年1月19日になると、時刻を扱うときに使われているUNIXTIMEの桁が溢れて、負の数になってしまうというものだ。これも平たく言ってしまえばオーバーフローの問題である。
 2038年以降の日数を計算するためにDateTimeクラスというものを初めて触ってみたが、現環境では日付の差を計算するdiffというファンクションが動かず、結局UNIXTIMEの数値を強引に足し算して新しいDateTimeクラスオブジェクトを作るという強引な実装になった。
 したがって、このプログラムは入力の段階では2038年問題の影響から抜け出せていない。入力を受け付けないようになっているので、2038年以降生まれの人は諦めてほしい。