第42章 WTF 45(1 / 2)

黄一士加入仿真实验室项目组后,第一件事,是学习怎么用版本控制软件 rcs。

这还真是他听都没听说过的软件,都有点用石器打猎的味道了。上一世,他真正开始商用软件开发时,cvs 都只是个传说了。他是从 svn 开始,到 mercurial,到 clearcase,到 git,再后来就不是简单的版本控制了,而是成体系的大套件了。

时师兄是负责审核,最后合并的人。他刚教完黄一士,让他开始熟悉代码,就被庆教授派去出差了。

黄一士进门时,时师兄正在跟大伙吹牛皮。他刚刚从一个实验基地出差回来,兴奋劲还没过去呢:“······xxx 所负责提供靶机,出动一次就要 10 万块。导弹一脱靶,别人都哭丧着脸,就属他们最高兴。把靶机回收,检修一下,下回又可以拿出来挣 10 万块了。”

看到黄一士进来,他立刻停下,从座位上站起来:“小黄,你有一段程序,我一点也看不懂,你来解释一下。”

黄一士一边等他打开电脑,一边好奇地问:“那一段啊?”

时师兄一边寒暄,一边调出程序,指着:“这个函数怎么算的?这个数字是怎么来的啊?”

```

float q_rsqrt( float number )

{

···

i = 0x5f375a86 - (i >> 1);

···

}

```

“这是求平方根倒数的函数,这个数字是试出来的。”

时师兄有点抓狂了:“看名字是这个用途的。我算了一下,不是绝对精确,可是误差极小,也可以用了。就是为什么?为什么啊?!”

其他几个师兄听得有意思,时师兄这种万事通也有看不懂的程序?于是也凑过来看热闹。一看那个函数,就像脸上挨了一拳,往后一倒:“我的天呐!这是啥?算平方根倒数怎么会用移位?这个数字什么意思啊?”

“师兄,这是牛顿迭代法······看,这里,我把浮点数转成长整型,移位就是求以 2 为底数的对数啊。”

“我还是没太明白。我先记下来,去找别人问问去。” 时师兄是个认真的人,绝不容忍有这么个不懂的东西在眼前晃荡。

“但是可以合并进去了吧?”

“可以。这个算法速度非常高,是平常算法的至少 4 倍以上。” 时师兄做事非常认真,已经测过了。旁边响起一片倒抽冷气的声音:“这么快?!”

“移位总是比加减乘除快啊,这是计算机的本质嘛。” 总有事后诸葛亮的。

“也就是现在还行。我们得盯着指令集,x86 是 cisc,迟早会把这个加进去的。到时候,还是直接调用 cpu 指令才行。” 黄一士没提到的是,未来的显卡会接替这些计算,会更快的。

时师兄最后是找了庆教授求教,把教授也为难了好久。不过,庆教授是有办法的人,直接去了数学系的教研室请教“牛顿迭代法”,才算看懂了这几行代码。回来更加得意,觉得自己慧眼识珠,捡到宝了。他决定给黄一士压担子,让他释放出更大的能量出来。

“可是教授,我们到底是在做一个什么东西啊?” 黄一士问了一个关键问题。

时师兄看了教授一眼,开始解释:“小黄,你可能已经听说了,最近我去一个实验基地参观了导弹试验。这种试验,要组织多个研究所的人员,到一个荒凉的武器试验靶场,导弹,靶机这些都是很贵的,有时候还要打很多发,获取一点试验数据。比如吧,我们要试验导弹在飞机进行大过载时,还能否锁定。这个就很难进行实际试验。经常发生的是,靶机还没有开始大过载机动,就被命中了,这就是一个失败的试验,可是,昂贵的导弹和靶机都没了。我们这个软件,最终目的,就是在计算机上模拟导弹射击各种目标,可以极大的节省费用,甚至不用实弹射击,就可以判定这种导弹是否有实用价值,是否值得量产。”

“这可太好玩——,呃,太有意义了!” 黄一士兴奋起来了,“师兄,我的具体任务呢?”

“小黄,你负责底层函数,还有框架部分。我们会给你很高的自由度,你觉得那部分不好,就试试你的想法。“ 庆教授给出了相当的信任,然后转向时芃: ”小黄的代码建立独立的分支,如果主干还不如这个分支,那么向小黄的分支合并。”

“瞧好了吧,您呐!” 黄一士把他俩都逗笑了。

······

“小黄,你怎么弄出那么多用 test 开头的文件?还改了 makefile,这是干什么啊?” 时师兄又看不懂了,开始抓狂。

“师兄,那是测试用的。每个函数,我都写了几个测试,编译时就自动测一下,所以 makefile 也要改啊。” 黄一士把单元测试引进来了,用来保证代码质量。单元测试不能保证没错,但是代码质量比没单元测试的高了好几个等级。

······

“小黄,你这个日志怎么好像往网络里写啊?写到哪里去了?” 抓狂 ing

返回