現在、fortranで大きな数値計算をしています。

そこで、計算回数が多く、その計算過程において大きい値と小さい値とを何回も計算していると誤差が次第に大きくなっていきます。

A=BとなるようにA(又はB)を求めるときの判別としてabs(A-B)<10**(x)
としています。

このxに-300ぐらいの値をいれ判別したいのですがそれは可能ですか?

もちろん計算には倍精度を使っていますがabs(A-B)が10**(-17)付近になると値が一定になってしまいます。これがfortranの限界なのでしょうか?

A 回答 (3件)

fotranで.尋常な方法ではないのですが.物理制限のみという演算をしたことがあります。


変数を整数配列にして.1桁を1配列に割り当てて.演算ルーチンを作成します。
三角関数や対数程度でしたらば.探せば.加減算で求めるプログラムも公開されていますから.開発は特に困難ではないでしょう。

私の場合には.マンマシンインターフェースとして.対話処理にしたことが災いし.プログラム領域が不足し.オーバーレイ構造にするためには.システム情報が必要となり.一般ユーザーであるために開発を断念しました。システム情報を操作するためには.特権ユーザーである必要があったためです。
    • good
    • 0

> A=BとなるようにA(又はB)を求めるときの判別としてabs(A-B)<10**(x)


> としています。

絶対誤差がいいんですかね。
相対誤差も検討してみてください。
    • good
    • 0

倍精度の有効桁数は16~17桁ですから、大体そこが精度の限界になります。



計算の誤差に詳しいページを示しておきますね。(参考URL)

参考URL:http://www.pu-toyama.ac.jp/joker/1999kouki/c8.htm
    • good
    • 0

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

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ