2012-10-17

バグりポイント

研究で書いてるプログラムとか競技コードとかで同じようなバグを何度も埋め込んでハマっていて, さすがにまずいと思うので教訓を込めてポイントをメモしときます.

オーバーフローに注意しろ
扱う値が普段はucharとかintに収まっていても,計算したら溢れる可能性があるので注意すること. 距離は2乗が絡むので危ないのは分かりやすいが,実はノルムを計算する前の引き算でオーバーフローすることもあるので要注意.
境界条件に注意しろ
境界条件は紙に書くとかassert書くとかして入念にチェックする. 実際に境界値を代入して手動で計算するのも手.
最大値の設定に注意しろ(特に競技)
問題から推測できる最大の値+αを最大値として採用すること. INT_MAXとかはオーバーフローの危険があるし,計算量も見積りづらいので避ける. また,理論値ぴったりだと境界条件で死んだりするので+αするのが望ましい. 最大値がギリギリっぽいときは躊躇わずに1つ大きい型を使うべきかも.
オブジェクトの生成コストに注意しろ(特に競技)
vectorとかは割と生成にコストがかかる. 何回も呼び出されるような関数ではvectorを生成せず,静的に配列を取っておいたり使い回したりすべき. 競技ならメンテナンス性とか置いといていいので,とりあえずvector使わずに済ませるのもアリ. 競技でなければプロファイラかければ分かるからそれほど気にしなくて良いかも…….
ここにはかつてコメントが表示されていました

2012-10-07

ナーヴギアについて真面目に考えてみた

ソードアートオンラインに登場するナーヴギアについて真面目に考えてみました. 自分はこれ書いてる時点で原作4巻までしか読んでいないので,後の方で補完される設定があるかもしれませんがとりあえず今思ったこととして書きます.

ナーヴギアの詳細な機能については原作1巻の冒頭に詳しく書いてありますが、まとめると

  • ナーヴギアは頭をすっぽり覆い、筋肉への信号を延髄部分で取得してVR世界の動きに反映する
  • このとき、何らかの方法で筋肉への信号は遮断され、肉体には伝わらない
  • 五感も同様にナーヴギアが支配し、現実の情報は入ってこない(これは明記されていないと思いますが、作品の随所でこうでないと説明できない描写があります)

というものです。

作中ではこの技術によって、現実とほとんど区別の付かないリアリティでVR世界を体感できるとしています。 また、脳から筋肉への信号を遮断する理由は、VR世界で体を動かした時に現実でも同じように動くと、物にぶつかったりして危険だからとされています。 確かに現実と全く同じ意識でゲーム中の体を動かせれば最高の没入感を得られるでしょう。 その上で五感も遮断しておけば能動的、受動的な感覚ともに完全に支配できるので、VRとしてはこの上なく理想的な環境であるといえます。 しかしこれは、肉体が現実に存在している以上、どうすることもできない致命的な欠陥があります。

まず「筋肉への信号を遮断する」というのは言うまでもなく大変危険をはらんでいます。 ナーヴギア使用時には筋肉を使えなくなるため、仮に立った状態でフルダイブするとその瞬間崩れ落ちたり倒れたりすることになると考えられます。 椅子に座っていても同様でずり落ちるでしょう。 しかも筋肉を動かせず、そもそも現実の情報が入ってこないため、受け身を取ることすらできずに体と頭を床や家具に打ち付けることとなります。 したがって、ナーヴギア使用時には必ずベッド等に寝転んで使用しなければなりません。 これは原作でもそのようにしている描写があります。

しかし寝転んでいるからといって安全だと言うわけでもありません。 端的には地震や火事など、予期しないトラブルが発生した時にそれを感知する手段がなく、また感知できたとしても現実の肉体をすぐに動かすことはできないため、初動が遅れたり適切な対応が取れなかったりして、最悪死ぬことになってしまいます。 またこのような例外的な事態でなくても、ずっと同じ姿勢で寝ていると鬱血の危険がありますし、それでなくとも排泄物は垂れ流しになってしまうと考えられます。

このような事態を避けるためには、最低限聴覚と触覚程度は現実と共有したままにしておき、筋肉への信号も維持することが必要であると考えられます。 これは明らかに元々の意図、特にVR世界で肉体を自由に動かすというものから外れてしまいますが、安全を確保するためには仕方がない点です。

ただし、原作3巻では羽という人間に本来存在しない器官を、擬似的に筋肉があるものとして脳で操作する場面があります。 脳には当然羽を動かす領域は存在しないので、これは筋肉を動かすイメージをフィードバックしているのだと思いますが、それが可能ならナーヴギアのシステムも腕や脚の筋肉を動かすイメージだけで完結させることができるのではないでしょうか。 このときは元のシステムほどの没入感を得ることは難しいかもしれませんが、それでも視覚を現実から切り離したコントロール下に置き、その他の感覚も利用することで十分な効果を挙げることは不可能ではないと思います。

ここにはかつてコメントが表示されていました