VC++数学函数错误处理

原文链接:

http://blog.sina.com.cn/s/blog_603f3d660100jg63.html

 

 

VC++数学函数错误处理
    数学错误常量有:
      _DOMAIN:函数变量超过定义域;
      _OVERFLOW:结果太大,返回类型难以表示;
      _PLOSS:出现有效位部分丢失;
      _SING:变量异常;函数参数有非法值;
      _TLOSS:出现有效位全部丢失;
      _UNDERFLOW:结果太小难以表示。

 

      _matherr函数处理数学库的浮点函数产生的错误,这些函数出现错误时调用_matherr.
      _matherr的原型: int _matherr(struct _exception *except )
      _exception的结构包含以下成员变量:
      int type 异常类型;
      char *name出错函数名称
      double arg1,arg2函数的第一个和第二个参量
      double retval 函数的返回值
    
      _matherr函数返回0,显示一个错误,并将errno置为适当的值,如果返回一个非0值,不显示错误消息,切保持errno不变。 
      下面举个例子:
       #include <math.h>
       #include <string.h>
       #include <stdio.h>

       void main()
       {
 
           printf("log(-2.0)%e/n",log(-2.0));
           printf("log10(-5.0)%e/n",log10(-5.0));
           printf("log(0.0)%e/n",log(0.0));
       }

       int _matherr(struct _exception *except )
       {
           if(except->type==DOMAIN)
           {
              if(strcmp(except->name,"log")==0)
              {

              except->retval=log(-(except->arg1));
              printf("Special:using absolute value :%s _DOMAIN error/n",except->name);
              return 1;
              }
              else
             
              if(strcmp(except->name,"log10")==0)
              {

              except->retval=log10(-(except->arg1));
              printf("Special:using absolute value :%s _DOMAIN error/n",except->name);
              return 1;
              }

           }
           else
           {
               printf("Normal:");
               return 0;//use default actions

            }

 

       }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值