くだすれC++Builder(超初心者用)その3

このエントリーをはてなブックマークに追加
22デフォルトの名無しさん
質問です
先日BCB6からBDS2006に乗り換えようと、よく判らずも、色々といじっていたのですが、
doubleをintへキャストする部分があるのですが、そこで
例外クラス EInvalidOp 不正な浮動小数点数演算命令の例外を発生するようになりました。
BCB6のときにはそのようなことはなかったのですが・・・

double d = 1e+300;
int a = (int)d; //ここで発生

1e+300というのはお恥ずかしながら無謀な数字ですが、とりあえずBCB6ではa=0という結果で問題なかったもので・・・
こういうものということで、あらかじめ条件わけをしてあげる必要があるということでしょうか?
Xp pro + BDS2006 proです。
2322:2007/03/28(水) 22:28:55
まだハマッています;;
VCで同じようなことをして見ましたが、VCでは例外のエラーは発生せず、
結果として上記のソースで言えばa=0が返ってきました。

で、やっている事はよろしくない事なんだろうと思って、少し勉強をして、例外を捉えたら無視してやろうという考えで
try catchというのを使ってみることにしました。

double d;
int a;
d=1e+300;
try { a=(int)d; } catch (Exception &e) {
Memo1->Lines->Add("例外発生"+e.Message);
a=0;}
こんな感じで・・・でも動作が変なんです。BDS2006でコンパイルした方だけ。
ボタンを押すごとに上記を呼び出します。
1回目はエラー発生せず(注)
2回目エラー⇒catchで捕る。あと1回目から繰り返し
(注)ここでマウスカーソルをタイトルバー上へ持ってくるとcatchで捕まらないエラー発生、ダイアログが現れます。

比較として0で割った場合の例外の実験もして見ましたが、こちらは毎回catchで捕まるみたいです。いったい何が問題なのでしょう?
BCB6とBDS2006の実行ファイルとソースをアップします。よろしくお願いします。
ttp://puka-world.com/php/upload/large/img-box/1175087636206.zip