设为首页 加入收藏

TOP

13.4.2 通过检测避免极值
2013-10-07 00:52:42 来源: 作者: 【 】 浏览:67
Tags:13.4.2 通过 检测 避免 极值

13.4.2  通过检测避免极值

由于问题出在x→±∞时,因此可以对这种情形进行检测。由于在x→±∞的过程中,x*x+y*y最先出现溢出,于是有:

  1. temp = x*x + y*y;  
  2. if( !_finite(temp) )    // 出现溢出,±∞  
  3. {  
  4.     if( temp > 0.0 )  
  5.         theta = 0.0;  
  6.     else 
  7.         theta = MATH_PI;  
  8. }  
  9. else 
  10.     theta = acos( x/sqrt(temp) ); 

这种处理有一个小缺陷,即认为x*x+y*y发生溢出时theta=0.0,这就是将x当作了+∞处理。由于x*x+y*y出现溢出时,x尚未溢出,这种处理带来一点误差。不过由于这种情况极少见,而且误差很小,一般不会造成不良影响。

算例:x=1.0E+300、y=1.0,theta=0.0(真值是1.0E-300)。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇13.3.1 宏定义(硬编码)方式 下一篇13.4.1 问题的提出

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: