« 集中力! | トップページ | 復活の呪文って知ってますか? »

2007年9月 7日 (金)

iはさだめ、さだめは偽

おはようございます。本日の当番、プログラマのM.L.K(LはLipのLです)。

昨日の当番の言葉を受け、今回はいかにもプログラマ的なネタで責めていきます。おいてけぼりっぷりを覚悟していやがれでございます。

さて、iと言えば、imaginaly numberのi。いわゆる虚数です。複素数a+biの形式で扱われるのが一般的で、日々お世話になる数学の本でも、ごく当たり前の“数”として、登場します。これは、平方根となる数自体にも平方根が存在する、という意味において、全ての数を網羅しているからです。

ただ、ゲームプログラミングでは、全ての数などという広範囲の数を取り扱うことは、まずありません。
顕著な例で言えば、世に出回っている代数のテキストでは、行列の操作はその要素が複素数であることを前提として記述されていますが、コーディングされる行列の実装では、実数部分のみです。iなんてありません。
虚数をまじめに実装しているのは、クォータニオンぐらいなものでしょうか。そのクォータニオンですら、やるコトをやってしまえば、都合良く変換され、iはなくなってしまいます。
「君も十分楽しんだんだろ?」
で、ポイッですよ。

とは言え、アルゴリズムの親となる数学が複素数を受け入れている以上、その理屈が反映されている実装では、必ず虚数が顔をのぞかせます。
極端に言ってしまえば、平方根が必要なアルゴリズムは、全てそうです。
そして、アルゴリズム的には正確なコーディングしていても、√を求める関数の中身が負数になってしまうケースは、ままに存在します。
虚数単位が0でない複素数のほうが、そうでない数(いわゆる実数)に比べて∞と0ほどの差があるのですから、当たり前と言えば当たり前です。

自身に向かって攻撃をしかけるキャラクタとか、後ろ向きに移動する自転車とか、影より暗いライトとか、油断すれば阿鼻叫喚の地獄絵図ですよ。

もし影響の及ぶ全ての演算に複素数を導入したなら、これらの事態は、一貫したアルゴリズムで記述可能でしょう。ですが、処理コストの都合を考えれば、悲しいかな、おおよそ無理なことです。

√を求める関数にマイナスの数が与えられるとき、プログラマにできることは、FALSEを返すことです。
仕様に沿わない膨大な複素数が入り込まないように注力し、それでもiが現れたとき、全てを複素数で演算した未だ見ぬゲームを夢想しながら、ただFALSEと返すのです。

そして、
「おまえのバグだゴルァ」
と叫ぶのです。

|

« 集中力! | トップページ | 復活の呪文って知ってますか? »

プログラマー」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/217647/16362701

この記事へのトラックバック一覧です: iはさだめ、さだめは偽:

« 集中力! | トップページ | 復活の呪文って知ってますか? »