设为首页 加入收藏

TOP

13.1.2 中间结果检测
2013-10-07 00:53:01 来源: 作者: 【 】 浏览:73
Tags:13.1.2 中间 结果 检测

13.1.2  中间结果检测

理论上,最好每次运算或操作以后都进行检测以尽快发现异常。但这意味着几乎每条语句后面都跟随着检测代码,虽然稳定了,但效率太低,代码也太啰唆,一般没有必要。不过,在一些影响效率和稳定性的关键处添加检测代码还是必要的。

通常一个计算函数只完成一件相对简单的任务,但这件简单的任务往往也需要分几个阶段完成,例如输入检测阶段、预处理阶段、初始化阶段、循环阶段、规范输出阶段等。在从一个阶段进入另一个阶段时,可能有需要附加检测代码的关键之处。不过,如果函数比较简单(例如基本函数),每个阶段均比较简单,这类关键之处并不多。

对于级数计算或迭代代码而言,一个更常见的关键之处是循环。如果在循环中出现了差错(例如溢出或超出函数定义域),那么除了代码效率低(做了大量无需做的计算)之外,很可能因终止条件判断出现问题导致死循环。例如,下列代码:

  1. do{      
  2.     yn = yn1;  
  3.     sn = sin( yn );  
  4.     cn = cos( yn );  
  5.     yn1 = yn - ( sn - x*cn  )/( cn + x*sn );  
  6. }while( fabs( yn1 - yn ) >= PRECISION/2.0 ); 

如果yn1是NaN值,那么while语句中的终止条件将永远无法满足,程序进入死循环。加入中间结果检测代码是一种比较可靠的方法,针对上述代码有:

  1. do{      
  2.     yn = yn1;  
  3.     sn = sin( yn );  
  4.     cn = cos( yn );  
  5.     yn1 = yn - ( sn - x*cn  )/( cn + x*sn );  
  6.     if( !_finite( yn1 ) )  
  7.         break;  
  8. }while( fabs( yn1 - yn ) >= PRECISION/2.0 ); 
【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇13.2.1 进行浮点比较 下一篇13.1.1 输入检测

评论

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