设为首页 加入收藏

TOP

13.4.4 将表达式变形避免极值
2013-10-07 00:52:58 来源: 作者: 【 】 浏览:79
Tags:13.4.4 表达式 变形 避免 极值

13.4.4  将表达式变形避免极值

将表达式变形一下,得到:

  1. theta = arcos( 1.0/sqrt( 1.0 + (y/x)2 ) 

当x→±∞时,y/x→0,theta=arcos(1.0),得到theta=0.0,结果正确。因此,这种处理可以避免由于x→±∞时造成的错误。不过这种处理带来另外一个问题,那就是当x→±∞时,(y/x)2→0是个非常小的量,此时由于有效数字有限以及1.0的存在,导致1.0+(y/x)2的精度很低。这将带来计算误差。因此,还可以变形为:

  1. theta = arctan( y/x ) 

这个表达式既避免了x→±∞时的溢出问题,又避免了有效数字不够的问题。不过,这个变形导致值域发生了变化,需要修正:

  1. if( theta < 0.0 )  
  2.     theta += MATH_PI; 

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

从这个算例上看,变形为theta=arctan(y/x)既避免了极值问题,又提高了精度。

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

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇13.1.1 输入检测 下一篇13.2.6 计算绝对值的宏

评论

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