プロが教えるわが家の防犯対策術!

学校の実験で計算機における計算誤差の解析を行っています(丸め誤差など)。
計算機によって出力された計算結果の数字がどこまで有効であるか、計算機によって生じる最大誤差を知ることは、真の値を知っていない限り大変だと思います。そこで計算結果に対する信頼性を調べるためにどのような方法をとればよいと思いますか?

実行環境はWindowsXP,C言語で行っています。

A 回答 (6件)

浮動小数点に関する計算の誤差と解釈します。


>計算機によって生じる最大誤差を知ることは、真の値を知っていない限り大変だと思います。
真の値を知る方法としては、完全ではありませんが、perlの無限多倍長浮動小数点パッケージ(BigFloat)、JAVAのBigDecimalクラスを使用すれば、ほぼ望んだ結果が得られると思います。
C言語のfloat(double float)の演算結果と、perl,javaでの演算結果での比較により、計算誤差が求められるはずです。全て、C言語でまかないたいということであれば、Cで作成した多倍長演算のライブラリが(どこかに)あるはずですので、それを探せば良いでしょう。「多倍長」をキーワードにして検索してみてください。
    • good
    • 0

いろいろ親切にアドバイスが挙がっていますが、


#1の方がお示しのように文献を当たって見られるように。

数値計算は特有の問題を含んでおります。
精度を上げるために桁数を増やすのも手段ですが、
計算時間も重要です。
そのため、いろいろアルゴリズムが考えられて来ました。
極めて大きい値と極めて小さい値の計算は、特に除算を含む場合は、誤差を拡大します。
  除算を最後に行うよう、計算順序を変えたりします。
  用語を忘れましたが、scaling とか normalize とか
  もあったような。

科学計算ライブラリとかもありますが、それらの評価も
面白いテーマだと思います。
Cのコンパイラも複数ありますので、その計算結果(精度と時間)もいろいろで
面白い要素を含んでいます。
    • good
    • 0

私の場合には.


目的精度計算の倍の精度で計算して.比較する
です。
ただ.「倍の精度」の計算ルーチンを作るのが地獄ですが.C言語ですと.どなたたが多倍精度の演算ルーチンを公開していますので.比較的簡単でしょう。
ただ.物によっては.地獄が待っています。岩波の数学時点に乗っているような関数の近似計算式の有効桁がせいぜい7-10桁なので.結局収束の割るい定義式から計算する必要があったり.収束が悪いので.20桁の結果を出すために100桁の珪酸が必要だったり.泣けてきますよ。
    • good
    • 0

固定小数点で計算した結果と比較してみるというのはどうでしょう?

    • good
    • 0

C言語っていうと


float型(4バイト)やdouble型(8バイト)で計算するってことですよね?
浮動小数点がどういうビットで並んでいるかを理解していれば
最大誤差もわかります。

http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text …

MSDNより抜粋
Microsoft 固有の仕様 →
double 型は、符号に 1 ビット、指数に 11 ビット、仮数に 52 ビットの合計 64 ビットを使います。その範囲は +/-1.7E308 であり、少なくとも 15 桁の精度があります。
    • good
    • 0

 これ、自然界の数値に対しても、計算機による数値計算においても、一つの学問体系です。

とてもじゃないけど、ここで説明できる代物ではありません。

 とりあえず、調べてみられるなら、「数値計算・誤差解析」あたりのワードで検索をかけてみてください。図書館に行けば、同じく、このテーマの書籍が何冊もあるんじゃないかと思います。
 なにせ、学生の頃、これだけで一つの単位をもらえましたから=^・・;=
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!