Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6593322
  • 博文数量: 227
  • 博客积分: 10047
  • 博客等级: 上将
  • 技术积分: 6678
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-11 10:33
个人简介

网上的蜘蛛

文章分类

全部博文(227)

文章存档

2010年(19)

2009年(29)

2008年(179)

分类:

2009-04-17 21:05:44

忙乎了近一个多礼拜,所有的时间和精力都花在了程序的测试上面。比较写code的时间,这已经是它好多倍了。让我有些措手不及的是,程序没有编译上的错 误,但是测试运行的结果并非像我们预测的那样的完美。我完全不清楚是自己算法本身的缺陷,造成某个问题没有办法很好解决,还是我在编写程序上有了失误。因 为测试的结果有一部分显示很正常,而似乎在处理有些条件下的输入的时候就有了差错了。我们想无头苍蝇那样,撞了很多次壁,也没有弄清楚问题所在,有些沮 丧。

  程序中有一个函数,其自变量d的取值为[min,max],我们要在这个区间中找到是有能让f(x)为零变量,及测试f(x)在这个区间上是否穿越了X 轴。使用的方法很简单,先用粗略的采样区间比如t=(max-min)/10000.0这样的间隔来分别算出各自的值,然后判断相邻的两个数的成绩是否小 于零。当然有时候你的取样间隔就成了关键的问题所在。一种先入为主的观念就是轨迹圆的方程不会很大,所以这个d的取值范围应该很小才对,一直认为他们之间 [max-min]在平分多少份就可以满足需求了。结果这个陷入为主的想法,把我挡在了正解的边缘。

Thread 5 has entered into ^_^
 max and min are 73.04481725355387:0.4966007122005891
 original d is 0.5328748204712658 distance is 0.2412947474691374
 original d is 0.5691489287419425 distance is 0.4509871765772213
 original d is 0.6054230370126191 distance is 0.5994128821785287

而后来的测试结果,令我大吃一惊。max的最大值为73多,所以无论你在平分多少万份都不能达到一个很精确的效果。正常情况下的精确值为10的负8次方。 所以这样一来间隔就很大了,就会略过许多值了。结果可以想象。继续测是发现,在[0.49,73.0]中真正有效值仅为[0.49,16.5],所以这个 73.0首先把你的取样间隔放大,然后在让程序做一些无效的计算。所以要考虑优化算法。

  所以,总结起来,不要盲目去测试和调试程序,如果不知道真正的问题所在,首先确保程序编写没有问题,然后再去检查测试的结果,分析其执行的过程的数据,我想这样是有一定帮助的。

  这是一门好大的学问,只有经验的积累和自己的探索,才能做得又快又好。

阅读(5860) | 评论(0) | 转发(0) |
0

上一篇:New Beginning

下一篇:项目回顾

给主人留下些什么吧!~~