~級数展開の不思議-桁落ち 現場数学(その2)

更新日

投稿日



♦ 発想の転換で“桁落ち”回避


 有限桁数の計算機を使って計算することによって起こる深刻な問題の例を挙げましょう。まずは、簡単そうに見える級数展開の問題を考えます。例えば、e-10を求めたいとします。それには、指数関数の級数展開

 

 を用いて、C、BASIC、Fortranとか何らかの言語でプログラムを作成し、xに-10を代入して計算を実行すれば良いだけのはずです。パソコンでも、あっという間に収束し、

 e-10=0.00055095・・・    (2)

 という値が得られます。簡単ですよね?しかし、e-10の本当の値は、何と一桁も違って、

 e-10=0.0000454・・・     (3)

 なのです。プログラムを何度見直しても間違ってはいません。では、何故、どこも間違っていないのに全く異なる答えが出るのでしょうか?その原因は「桁落ち」です。実は(1)の公式で、xに負の大きな値を指定すると、展開の最初の数項にわたって正と負の大きい値が交互に現れ、それらの差し引き合計として、極めて小さい値が得られるのです。32ビットの精度で計算した途中結果は以下のようになります。

     -9.00000000
     41.00000000
  -125.6666560
   290.99975600
  -542.33349600
   846.55517600
-1137.57178000
 1342.58691000
-1413.14478000
  1342.58667000
 -1162.62256000
    925.05297900
   -680.85205100
    466.22338900
   -298.49365200
    179.45434600
   -101.69165000
      54.50067140
         ・
     ・
     ・
        0.00055852
        0.00054884
        0.00055153
        0.00055080
        0.00055099
        0.00055094
        0.00055096
        0.00055095
        0.00055095
        0.00055095

 と約40項目で収束します。ところが、32ビットの数値を10進数で記述すると、実は6桁程度しか精度がないのです。そのため、途中の13桁ほど書いている部分の小数点以下には意味がないことが分かります。すなわち、収束して得られた値である0.00055095・・・という数値には何の意味もないのです。
 では、どうやって、 e-10の値を正しく求めるのでしょうか?倍精度で解決。これも一つの手です。しかし、そういう力ずくではなく、実に発想の転換によって可能となるのです。つまり

 

 を使うのです。正の値の指数関数の級数展開は問題なく収束します。その逆数を求めることによって、正しい値が得られるのです。
 似ている他の問題として、正負が交互に現れる交代級数の和の値の求め方として、正の値と負の値を別々に集めて計算し、その結果得られた2つの値の差によって桁落ちを免れた正しい値を得るという方法も良く使われます。

 

 も有名な例題です。この問題には、倍精度も何も効きません。何倍精度であろうと収束した結果は全て間違いなのです!ご存知のように、(5)の結果は無限大で、数値計算で求めることは出来ません。

...



♦ 発想の転換で“桁落ち”回避


 有限桁数の計算機を使って計算することによって起こる深刻な問題の例を挙げましょう。まずは、簡単そうに見える級数展開の問題を考えます。例えば、e-10を求めたいとします。それには、指数関数の級数展開

 

 を用いて、C、BASIC、Fortranとか何らかの言語でプログラムを作成し、xに-10を代入して計算を実行すれば良いだけのはずです。パソコンでも、あっという間に収束し、

 e-10=0.00055095・・・    (2)

 という値が得られます。簡単ですよね?しかし、e-10の本当の値は、何と一桁も違って、

 e-10=0.0000454・・・     (3)

 なのです。プログラムを何度見直しても間違ってはいません。では、何故、どこも間違っていないのに全く異なる答えが出るのでしょうか?その原因は「桁落ち」です。実は(1)の公式で、xに負の大きな値を指定すると、展開の最初の数項にわたって正と負の大きい値が交互に現れ、それらの差し引き合計として、極めて小さい値が得られるのです。32ビットの精度で計算した途中結果は以下のようになります。

     -9.00000000
     41.00000000
  -125.6666560
   290.99975600
  -542.33349600
   846.55517600
-1137.57178000
 1342.58691000
-1413.14478000
  1342.58667000
 -1162.62256000
    925.05297900
   -680.85205100
    466.22338900
   -298.49365200
    179.45434600
   -101.69165000
      54.50067140
         ・
     ・
     ・
        0.00055852
        0.00054884
        0.00055153
        0.00055080
        0.00055099
        0.00055094
        0.00055096
        0.00055095
        0.00055095
        0.00055095

 と約40項目で収束します。ところが、32ビットの数値を10進数で記述すると、実は6桁程度しか精度がないのです。そのため、途中の13桁ほど書いている部分の小数点以下には意味がないことが分かります。すなわち、収束して得られた値である0.00055095・・・という数値には何の意味もないのです。
 では、どうやって、 e-10の値を正しく求めるのでしょうか?倍精度で解決。これも一つの手です。しかし、そういう力ずくではなく、実に発想の転換によって可能となるのです。つまり

 

 を使うのです。正の値の指数関数の級数展開は問題なく収束します。その逆数を求めることによって、正しい値が得られるのです。
 似ている他の問題として、正負が交互に現れる交代級数の和の値の求め方として、正の値と負の値を別々に集めて計算し、その結果得られた2つの値の差によって桁落ちを免れた正しい値を得るという方法も良く使われます。

 

 も有名な例題です。この問題には、倍精度も何も効きません。何倍精度であろうと収束した結果は全て間違いなのです!ご存知のように、(5)の結果は無限大で、数値計算で求めることは出来ません。

   続きを読むには・・・


この記事の著者

川添 良幸

市販の材料設計シミュレーションプログラムでは満足できない御社技術者に、本当に意味のある物理の基本に基づいた設計法を伝授します。我々の計算と実験結果が合わない場合は実験の方に問題があると言えるレベルを達成しています。

市販の材料設計シミュレーションプログラムでは満足できない御社技術者に、本当に意味のある物理の基本に基づいた設計法を伝授します。我々の計算と実験結果が合わな...


「SQC一般」の他のキーワード解説記事

もっと見る
~速算:暗算計算と九去法 続・現場数学(その20)

  ♦ 計算を身近なケースから考える   1. 電卓よりはるかに速く~ 速算と暗算の活用  本シリーズのタイト...

  ♦ 計算を身近なケースから考える   1. 電卓よりはるかに速く~ 速算と暗算の活用  本シリーズのタイト...


~ 「フラクタル次元」 現場数学(その16)

  ♦ 単純そうに見え、実は奥が深い次元のお話 1.次元  空間には1次元、2次元、3次元とあり、時間も加えれば4次元があ...

  ♦ 単純そうに見え、実は奥が深い次元のお話 1.次元  空間には1次元、2次元、3次元とあり、時間も加えれば4次元があ...


基本統計量について(平均値・中央値・分散・標準偏差など)

 数値データを分析するにあたり、情報の特徴を知るために基本的な統計量がありますので、今回はその中のいくつかについて説明します。 1.平均値(mean、a...

 数値データを分析するにあたり、情報の特徴を知るために基本的な統計量がありますので、今回はその中のいくつかについて説明します。 1.平均値(mean、a...


「SQC一般」の活用事例

もっと見る
第1種の誤りと第2種の誤り

 「あわて者の誤り」と「ぼんやり者の誤り」をご存知ですか、あわて者の誤りは正式には『第一種の誤り』(Type Ⅰ error)と呼称し、ぼんやり者の誤りは...

 「あわて者の誤り」と「ぼんやり者の誤り」をご存知ですか、あわて者の誤りは正式には『第一種の誤り』(Type Ⅰ error)と呼称し、ぼんやり者の誤りは...


信頼できる結果を得るために統計的手法の活用を

昔の事になりますが、配属された職場の先輩の下である実験を手伝いました。先輩は図1のような計画をたてました。2つの量的因子A、Bの効果を確認する実験でした。...

昔の事になりますが、配属された職場の先輩の下である実験を手伝いました。先輩は図1のような計画をたてました。2つの量的因子A、Bの効果を確認する実験でした。...


ビックデータ時代と米国大統領戦

 ビックデータ時代を考える事例として、今回の第45代米国大統領選挙を見てみます。第45代の米国大統領に、ドナルド・トランプ氏が決まりましたが、トランプ氏当...

 ビックデータ時代を考える事例として、今回の第45代米国大統領選挙を見てみます。第45代の米国大統領に、ドナルド・トランプ氏が決まりましたが、トランプ氏当...