テーブルメーカーのジレンマ (数表作成者のジレンマ)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/08/08 14:23 UTC 版)
「端数処理」の記事における「テーブルメーカーのジレンマ (数表作成者のジレンマ)」の解説
ウィリアム・カハンは端数処理の(あまり意識されていなかった)難しさを示し、「テーブルメーカーのジレンマ」というフレーズを提案した。これは「#2回以上の丸めの禁止」の節で『「もしかしたら」の部分をはっきりさせなければ、正しい丸めができない』と説明した内容の「はっきりさせる」ために必要なコストについて(実は)「オーダーを見積もる」ことすら不可能だ、という話である。カハンが指摘した後には、具体的に著しく「悪い例」としてどういう値があるか、といったサーベイなどが行われている。 その一例を示しながらカハン曰く、 そこにおいてオーバーフロー・アンダーフローをしないとき正しく丸められた y^w を全ての2つの浮動小数点数の引数に対して計算するのにどれだけのコストがかかるかだれも知らない。一方、評判の良い数学ライブラリは初等超越関数を多くの場合わずかに1/2ulpを超えるのに収まりほとんど常に十分1ulpに収まるように計算する。なぜ y^w は平方根のように1/2ulpに収まるよう丸められないのだ? なぜならばどれだけの計算がかかるかだれも知らないからだ...。超越的な表現を計算して既定の桁数に正しく丸めるのにどれだけの余分な桁数を保持しなければならないかを予想する一般的な方法はない。ある有限の桁数が最終的に十分であるという(正しいとしても)事実すらも深い定理かもしれない。 この事実の帰結として、標準規格では以下のようになっている。IEEE754(1985年版)では、四則演算(加減乗除)、融合乗加算、平方根、剰余(浮動小数点剰余)については、「無限の精度で演算してそれを正しく丸めた結果」と一致することを要求し、また規格に合致していると保証する実装ではそのことを保証しなければならない。一方で、より複雑な関数(演算)に対しては1985年版の仕様では同様な要求は示されず、それらに対しては典型的には「最終bitの範囲内(いわゆる「1ULP」)」の正しさは保証され無い。2008年版ではいくつかの更新があった。 Gelfond–Schneider理論およびLindemann–Weierstrass理論を用いることにより、標準の初等関数の多くは非零の有理数の引数に対して結果が超越的になる(有限回の代数演算では表せない)ことが証明されている。そのような関数の値を正しく丸めることは(原理的には)常に可能であるが、正しく丸められた値を導くために途中の計算をどれくらい高い精度で行う必要があるかの限界を事前に決めることにも多くの計算時間を必要とするかもしれない。 いくつかのパッケージは正しい丸めを提供する。 GNU MPFRパッケージは正しく丸められた任意精度の結果を与える。 他のいくつかのパッケージは倍精度において正しい丸めの初等関数を実装している。 IBMのlibultim (最近接丸めのみ) Sun Microsystemsのlibmcr (4つの丸めモードについて) Arénaireチーム(LIP, ENS Lyon)によるCRlibm (4つの丸めモードをサポートし、それは証明されている。) それについて丸められた値がどれだけの桁を計算してもdeterminedになりえないような計算可能な数が存在する。特定のインスタンスは与えられることはないが、存在は停止問題の決定不能性から導かれる。たとえば、もしも「ゴールドバッハの予想(4以上の任意の正の偶数は必ず2つの素数の和で表せる)」が真であって、しかし証明不可能な命題であると仮定すれば、次の式の値を(切り上げて)整数に丸めた結果を決定することはできない。 10^−n ここでnは4より大きい偶数で2つの素数の和にはならない最小のもの、あるいはもしそのような偶数が無ければ0とする 丸めた結果はもしそのような偶数nが存在すれば1、存在しなければ0である。しかし「予想」が証明不可能であっても丸められる前の値であれば与えられた任意の精度で近似できる。
※この「テーブルメーカーのジレンマ (数表作成者のジレンマ)」の解説は、「端数処理」の解説の一部です。
「テーブルメーカーのジレンマ (数表作成者のジレンマ)」を含む「端数処理」の記事については、「端数処理」の概要を参照ください。
- テーブルメーカーのジレンマのページへのリンク