BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース 無限を表現する: 開発者にとって不可能なこと

無限を表現する: 開発者にとって不可能なこと

原文(投稿日:2022/04/05)へのリンク

開発者は、その日々の業務の中で、不可能なことに直面する場合がある。無限大を直接的に表現することや、あるいは物理的に独立したコンピュータ上に無限大の精度を保持することは不可能だ。ストレージや表現には限界があり、この不可能性を無視するか、あるいは意識するかによって、バグやシステムの挙動が期待とは異なるものになる可能性がある。

Kelvin Henney氏はQCon London 2022で、6つの不可能(Six Impossible Things)について基調講演を行った。

ソフトウエア開発においては、"これをやることがどの程度難しいか"を調べようとしたり、自分のやっていることが"予想以上に難しい"と感じたりするのはよくあることだ。しかしながら、本当に不可能なこともある、とHenney氏は主張する。

ここでいう不可能とは、"とんでもなく困難である"、"納期や予算的に達成できない"、"非現実的だ"、という意味ではありません。宇宙の仕組みに関する私たちの理解から言って、実際に不可能である、という意味なのです。

不可能な例としてHenney氏が最初に挙げたのは、"無限の表現が可能である"、ということだ。これが不可能であることの最も明確な発現は、メモリにせよストレージにせよ、スペースが不足するということだ、として、氏は次のように説明する。

メモリやストレージが無限であるというのは、ハードウェアが安価に入手可能なことや、ガベージコレクションや仮想メモリといったメカニズムが生み出す幻想です。それらは幻想に過ぎません。ストレージは有限なのです。

この有限性がプログラマに与えるもうひとつの影響は、データ表現もまた有限である、ということだ。多くの場合において先程の幻想が機能するため、実際にはビット数に制限のある整数が、真の整数として算術の公理に正しく従うと考える罠に陥ることが多いのだ、とHenney氏は指摘する。これは時として、正の32ビット値2つを加算した結果が負の値になるという、Bentley氏のバグのケースのような重大なバグを発生させる。

バイナリ検索のアルゴリズムは、1983年にJon Bentley氏が著書"Writing Correct Programs"でその正確性を"証明"したにも関わらず、2006年の標準Javaライブラリに関するバグレポートによって、不正確であることが証明されている。

不可能なことと、それが開発者にもたらす結果について、Kevlin Henney氏にインタビューした。

InfoQ: "6つの不可能"というメタファは、どのようにして生まれたのでしょう?

Kevlin Henney: 引用と、可能性の限界への関心が合わさったものです。

引用は、Lewis Carrollの"鏡の国のアリス(Through the Looking-Glass)"にある、アリスと白の女王(White Queen)の会話からのものです。

アリスは笑って、"試しても無駄よ"、と言った。"不可能なことは、信じられないわ。"

"それは、あなたが十分に練習していないからよ"、と女王は言った。"私があなたの年頃だった時には、毎日30分、練習したものだわ。ええ、時には朝食前に6つも、あり得ないことを信じていたのよ。"

InfoQ: "無限の表現が可能である"ということは、ソフトウエア開発者にどのような結果をもたらすのでしょう?

Henney: 無限大に代わる値を定義することは可能ですが、これは代用表現です。物理的に独立したコンピュータ上において、無限大や、あるいは無限の精度を表現する方法は存在しません。これは単に、すべての整数値を表現することが不可能であるということではありません。例えば、0と1の間という制限の中でも、すべての実数を表現することはできない、という意味なのです。

私たちは、浮動小数点や固定小数点、有理数(rational number)など、さまざまな型を使って近似していますが、0と1の間には無理数や、合理的な表現精度を越えた数値が無限に存在しています。これをさらに難しくしているのは、ひとつのサイズがすべての場合に当てはまらない、ということです。エンジニアリングアプリケーションにおいて実数の近似として浮動小数点数を用いているように、ある状況においては満足できるソリューションが、為替操作のような、固定小数点数の方が適切な状況では十分に機能しない、という場合があるのです。

完璧なソリューションは存在しません。ただし、完璧でなくても、ほとんどの場合は大丈夫ですし、これらの制約や近似が問題にならない場合もあります。問題なのは、多くの開発者がそのような制約や近似といった、自分たちが使っている型の性質に気付いていない点にあります。通貨の計算に浮動小数点数を使用して、そこで発生した問題に驚くという状況が、いつまでたっても続いているのです。

作者について

この記事に星をつける

おすすめ度
スタイル

BT