2017-02-09 14 views
1

私は(1e200)^ 2を計算するシンプルなCプログラムを持っています。これは、最大でdoubleが1e308程度であるため浮動小数点オーバーフロー例外が発生するはずです。浮動小数点オーバーフロー例外をキャプチャするには

double square(double x){ 
    return x*x; 
} 

int main(){ 
    double x = 1e200; 
    double y= square(x); 
} 

私の質問は以下のとおりです。

(1)どのようにプログラムを実行するときに、例外が端末にプリントアウトすることができるように、コマンドラインを介して例外をキャプチャすることができますか?

(2)プログラムの実行中に浮動小数点例外信号を出力する追加の命令を挿入することで、例外をどのようにキャプチャできますか?一般性のために、この目標を達成するためにy==infを使用しないことをお勧めします。

ありがとうございました。

+0

エラーの自動チェック方法については、[こちら](http://stackoverflow.com/q/15655070/478288)を参照してください。 – chrisaycock

+0

'if(y == inf){printf(" overflow ");}'のようなものですか? –

+0

@ KamiKaze AFIKでは、実装は 'inf'を使う必要はありません。 –

答えて

0

私はこのようなものを探していると思います...これはchar型ですが、あなたはそう考えていると思います。そして、あなたが望むprintf文をerrno == ERANGE elseif条件。

int check_for_non_number(char *input) 
{ 
    errno = 0; 
    char *endptr; 
    double xnum = strtod(input, &endptr); 
    // IF endptr FOUND A NON-VALID ENTRY AND THAT ENTRY IS NOT THE NEW LINE CHARACTER THEN ITS AN ERROR 
    if((*endptr) && (*endptr != '\n')) 
    { 
     return 1; 
    } 
    else if (errno == ERANGE) 
    { 
     printf("OPERAND IS OUT OF RANGE"); 
     return 1; 
    } 
    // ELSE IF endptr FOUND A NON-VALID ENTRY AND THAT ENTRY IS THE NEW LINE CHARACTER THEN RETURN 2 TO CHECK IF IT SHOULD BE A NEW LINE 
    else if((*endptr) && (*endptr == '\n')) 
    { 
     return 2; 
    } 
    else 
    { 
     return 0; 
    } 
} 
関連する問題