捕获浮点溢出除外

时间:2017-02-09 16:20:52

标签: c exception command-line exception-handling floating-point

我有一个计算(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来实现这一目标。

感谢。

1 个答案:

答案 0 :(得分:0)

我认为你正在寻找类似这样的东西......虽然这是类型char,你可以这么类似我认为......然后你可以在errno == ERANGE elseif条件下输入你想要的任何printf语句。

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;
    }
}