- ベストアンサー
C#の演算でオーバーフローしてるみたいなのですが....
C#の演算でオーバーフローしてるみたいなのですが.... 8行8列の逆行列を計算するために C#で逆行列を掃き出し法を使って計算するプログラムを作ったんですが,どうやら,途中でオーバーフローしているみたいで困っています. 行列の各成分はdouble型で保持しています. 今まで,オーバーフローするような桁数の計算を プログラムで扱ったことがないので,対策方法がわかりません. みなさんは,オーバーフローにはどのような対策をしているのでしょうか? どなたか,知恵を貸していただけないでしょうか? よろしくお願いします.
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
演算でオーバーフローになるのは、0に限りなく近い値で除算している場合がほとんどです。 例えば、 1-0.1×10 の計算をしたとき、0になるとは限りません。 処理系によっては、0ではなく、10^(-50)のようなの0に限りなく近い値になる場合があります。 それで除算をするとオーバーフローすることがあります。 対策としては、 0に限りなく近い値は0にする という処理をします。 (0除算のチェックは当然していますよね)
その他の回答 (1)
- nag0720
- ベストアンサー率58% (1093/1860)
回答No.2
>具体的には,基準となる「限りなく近い値」はどうやって決めるべきなんでしょうか? どの程度の精度の数値を扱っているかによりますが、 そんなに厳密な計算をしているのでなければ、 double型なら -10^(-50)~10^(-50) single型なら -10^(-20)~10^(-20) は0とするというように適当に決めてもいいのではないでしょうか。
質問者
お礼
ありがとうございました. 非常に参考になりました!!
お礼
nag0720さん,回答ありがとうございます. >(0除算のチェックは当然していますよね) 0除算はチェックしてました. >対策としては、 >0に限りなく近い値は0にする >という処理をします。 ということなのですが,具体的には,基準となる「限りなく近い値」はどうやって決めるべきなんでしょうか?