プロが教える店舗&オフィスのセキュリティ対策術

C#の演算でオーバーフローしてるみたいなのですが....

8行8列の逆行列を計算するために
C#で逆行列を掃き出し法を使って計算するプログラムを作ったんですが,どうやら,途中でオーバーフローしているみたいで困っています.
行列の各成分はdouble型で保持しています.


今まで,オーバーフローするような桁数の計算を
プログラムで扱ったことがないので,対策方法がわかりません.
みなさんは,オーバーフローにはどのような対策をしているのでしょうか?


どなたか,知恵を貸していただけないでしょうか?
よろしくお願いします.

A 回答 (2件)

演算でオーバーフローになるのは、0に限りなく近い値で除算している場合がほとんどです。



例えば、
1-0.1×10
の計算をしたとき、0になるとは限りません。
処理系によっては、0ではなく、10^(-50)のようなの0に限りなく近い値になる場合があります。
それで除算をするとオーバーフローすることがあります。

対策としては、
0に限りなく近い値は0にする
という処理をします。

(0除算のチェックは当然していますよね)
    • good
    • 0
この回答へのお礼

nag0720さん,回答ありがとうございます.

>(0除算のチェックは当然していますよね)
0除算はチェックしてました.

>対策としては、
>0に限りなく近い値は0にする
>という処理をします。

ということなのですが,具体的には,基準となる「限りなく近い値」はどうやって決めるべきなんでしょうか?

お礼日時:2010/09/10 04:25

>具体的には,基準となる「限りなく近い値」はどうやって決めるべきなんでしょうか?



どの程度の精度の数値を扱っているかによりますが、
そんなに厳密な計算をしているのでなければ、
double型なら -10^(-50)~10^(-50)
single型なら -10^(-20)~10^(-20)
は0とするというように適当に決めてもいいのではないでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございました.
非常に参考になりました!!

お礼日時:2010/09/10 18:37

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