こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

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


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


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

投稿日時 - 2010-09-10 03:01:28

QNo.6171406

すぐに回答ほしいです

質問者が選んだベストアンサー

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

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

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

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

投稿日時 - 2010-09-10 03:45:37

お礼

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

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

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

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

投稿日時 - 2010-09-10 04:25:31

ANo.1

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

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

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

投稿日時 - 2010-09-10 15:33:51

お礼

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

投稿日時 - 2010-09-10 18:37:12