首页 > 都市言情 > 苏联撤专?我反手掏出人工智能!

苏联撤专?我反手掏出人工智能! 第222节

  陈序年没有再多待,退出计算室,回了自己的办公室。

  笔记本锁进抽屉之前,他又翻了翻后面几页,定点数溢出的处理技巧写在第五页,状态方程查表的插值子程序优化写在第六页。

  这些东西他不打算一次全抛给梁启明,等他撞上了再给,记得才牢。

  接下来三天,陈序年办公室的门几乎没关过。

  梁启明每隔几个小时就派小周或者老李过来问一个问题。

  问题杂七杂八,从指令编码格式到地址计算规则,从纸带输入输出的控制字符到子程序调用时堆栈指针怎么保存。

  陈序年一个一个答,该讲透的讲透,该让他们回去自己试的就丢一句你试试看。

  有些问题陈序年当场就能回答,有些他会让小周等一下,自己先在草稿纸上画一遍逻辑,确认没有歧义之后再把结论写给他带回去。

  他不能出错,梁启明的编程能力在快速增长,如果他给的提示本身有误,梁启明排查的时候反而会浪费更多时间。

  第四天,梁启明的第一批程序上了纸带。

  何建军操作打孔机,梁启明念二进制码,何建军按键打孔。

  一条指令十六位,念一遍打一遍,念错了就废一段纸带重来。

  整个过程需要两个人配合的严丝合缝,念的人不能含糊,打的人不能走神,一千多条指令念下来,嗓子都是哑的。

  第一盘纸带打了四个小时。

  下午两点,梁启明把纸带装进读入设备,按下运行键。

  纸带哒哒哒的被吞进去,控制面板上的指示灯开始闪烁。

  闪了四十下,全暗了。

  “停了。”

  王德明凑过来看面板上的程序计数器。

  “跑到第四十一条指令的时候停的。”

  梁启明扒开纸带输出端,撕下一小段结果带,对着灯光辨认孔位。

  “第四十一条是个跳转指令,跳转地址算错了。”

  梁启明脸色发青。

  “我把子程序的起始地址写成了十进制,忘了转成十六进制。”

  他回到桌前,在草稿纸上重新算了一遍地址,改了三条指令,让何建军重新打孔。

  第二次运行,跑到了第一百二十条停住,存储器访问越界。

  一个变量的地址偏移量多算了两个字,程序直接读进了未初始化的空间,取出来的数据完全没有意义。

  梁启明查了偏移量计算表,找到了那个多余的加法,改掉,重新打孔。

  第三次,跑到了第二百八十条,停在迭代子程序的入口,原因是寄存器分配冲突。

  主程序和子程序用了同一个寄存器暂存中间结果,子程序一进去就把主程序存在那个寄存器里的值给覆盖了,等子程序跑完返回主程序,主程序拿到的已经是一个被篡改过的数。

  梁启明趴在桌上查了整整一个下午,他把十七个子程序的寄存器使用情况全部列出来,画了一张汇总表,逐个子程序重新分配寄存器,确保没有冲突。

  这张表画了三遍才定稿,前两遍都发现有交叉的地方。

  第四次,程序跑通了整个主循环的第一步。

  “第一步出来了!”

  小周从纸带输出端撕下结果,用铅笔飞快的把二进制转成十进制,又翻出手算的验证数据对照。

  “温度、密度、压力都对上了!辐射通量偏了百分之二!”

  “百分之二在容许范围内。”

  梁启明长出一口气,靠在椅背上揉了揉太阳穴。

  “继续跑,看后面会不会发散。”

  程序往下跑了二十步,在第二十一步崩了。

  梁启明盯着纸带输出的数据看了半天。

  “温度值溢出了。”

  他回头看陈序年,陈序年站在门口,手里端着一只搪瓷杯。

  “定点数溢出。”

  陈序年走进来,把搪瓷杯放在桌上。

  “温度从几千度跳到几万度,数值量级变了四个数量级,你的标度因子没跟着调。”

  “标度因子?”

  陈序年从口袋里掏出笔记本,翻到第五页,放在梁启明面前。

  “十六位定点数,有效数字只有四到五位,你要表示的物理量跨了十几个数量级,一个固定的标度因子根本兜不住,每一步运算结束后,要检查结果的量级,如果超出了当前标度因子的表示范围,就要做一次重新定标。”

  梁启明看着笔记本上的内容,额头上青筋跳了一下。

  “这就是说,每一条乘法和除法指令后面,都要跟一段定标检查的代码?”

  “对。”

  “那程序长度至少要翻一倍。”

  “所以我一开始估计一千二百条。”

第201章 第一次计算结果

  陈序年把笔记本收回来,翻到之前记录程序指令规模的那一页,在旁边添了几个数字。

  “你原来写的那版大概七百条,加上定标代码,差不多就是一千二百条。”

  梁启明闭了下眼又睁开,抓起了铅笔。

  “我重写。”

  重写用了五天。

  这五天里梁启明几乎没离开过计算室,他让小周从宿舍把行军床搬了过来,靠在墙角,上面铺了一条毛毯。

  困的撑不住了就趴在桌上睡半个小时,闹钟一响立刻爬起来接着写,有时候闹钟还没响他就醒了,盯着天花板发几秒呆,又低下头继续。

  小周和老李两人轮班,一个帮着校对地址,一个帮着核对二进制码。

  校对地址的工作量比写代码还大,梁启明重写了内存分配方案,所有子程序的入口地址全部变了,调用关系要重新理一遍。

  小周用一张大纸画了一棵调用树,贴在墙上,每改一处就用红笔标注,改完再用蓝笔确认。

  何建军守在打孔机旁边,随时准备上纸带,梁启明改一段代码,他就打一段,两人之间的配合已经很默契。

  念码的语速越来越快,何建军的手指跟的上。

  有几次梁启明念到一半停下来,何建军就等着,手悬在打孔机上方不动,等对方想清楚了再继续念。

  整个过程里何建军从不催,也不问。

  陈序年每天去看两次进度,早上一次,晚上一次,每次过去都带一个窝头或者半杯热水,放在梁启明桌角。

  梁启明有时候根本没注意到,等回过神来窝头已经凉透了,水也凉了,陈序年也不说什么,下一次去的时候把凉窝头收走,再放一个新的。

  第三天的时候碰到了一个棘手的问题。

  定标代码里有一段循环,需要反复读取存储器里同一块区域的数据,读一次、算一次、写回去、再读出来,这个过程对存储器的时序要求很高,梁启明在纸上摹拟了好几遍,总觉得在某些极端情况下可能出现读写冲突。

  他去找陈序年讨论。

  陈序年看了时序图,沉吟了一会儿,提了一个建议,在读和写之间插入两个空指令周期,让存储器有时间完成前一次写入的全部动作。

  梁启明回去改了,问题解决了。

  第十二天,程序第一次完整跑通了小规模测试算例。

  网格减半,径向十格,轴向十五格,一百五十个网格点,程序从头跑到尾,没有崩溃,没有溢出,纸带输出了一长串数据。

  梁启明和小周、老李三个人花了一整天时间,把数据翻译成物理量,跟手算的抽查点逐一对照。

  “十五个抽查点,十三个完全吻合,两个偏差在千分之三以内。”

  梁启明把对照表放在陈序年面前。

  陈序年扫了一眼那两个偏差点的位置,都在边界附近。

  “边界条件的离散精度不够,网格加密之后会改善。”

  他说。

  “可以上正式算例了。”

  “明天开始。”

  梁启明说完,忽然靠在椅背上,嘴巴张了张,没说出声,眼皮一合,当场睡了过去。

  小周赶紧把他扶到旁边的行军床上,梁启明倒下去就没了动静,鼾声很响。

  陈序年给他盖了条毯子,走出计算室。

首节上一节222/280下一节尾节目录txt下载

上一篇:在自由美利坚冒充气功大师

下一篇:开局召唤康娜,你告我雇佣童工?

推荐阅读