13.4.2 通过检测避免极值

2013-10-07 00:52:42 · 作者: · 浏览: 70

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】

回书目   上一节   下一节