程序编好,能够直接运行而且完全正确,基本不可能,这就有调试程序的问题。主要有一
下几个方面:
其一,在每个子程序被调用的时候留个心眼,写个输出语句,表示程序已经运行到了这里
这样一个小提示会给调试带来巨大的方便,如果程序运行出错,至少你可以知道它是在运
行到哪里出的错,这样,直接去检查那个程序就可以了。不必重头开始检查。
其二,注意对中间计算结果的输出。有时候,而且是很多的时候,程序编译成功,运行也
没有问题,就是结果不对,这肯定是计算原理有问题,此时,输入一些重要步骤的中间结
果,往往可以检查出问题所在。同时,就算查出了问题所在,也可以不删除这段输出中间
计算结果的代码,有可能后面还会有用处,此时,在每行输出语句前加一个感叹号,把代
码变成注释的绿体字就可以了。等到再次需要输出的时候,直接删除一个“!”比再写一遍
输出代码,当然要简单的多。
其三,对 WATCH 功能的应用,FORTRAN 提供的这个功能很实用,可以查很多问题,尤
其是程序中间计算值,这个和上述的中间结果的输出有点相似。但两者的不同是前者可以
进行中间结果的输出控制,就是只有符合了某个条件的才能被输出,这样可以便捷程序的
调试,同时对中间结果输出后可以直接用 STOP 停止程序的运行,这样对于大型程序来说,
节省了很多后面继续计算的时间——因为前面的结果已经不对了,后面的算也是白算。
其四,对中间结算结果输出形式的控制,一般来说,FORTRAN 计算结果可以输出到文件
里面和计算界面两个地方。对较大的计算结果,可以输出到文件里面,反之较少的结果可
以直接输出到屏幕上,为了增强数据的可读性,最好进行有格式的数据输出,以利于相同
性质的数据的比较。输出到屏幕上的结果直接用 WRITE(6,*)就可以(无格式),对于输出
到文件里面的数据,可以省些事情,直接用 WRITE(X,*)就可以,其中 X 是一个任意的正
整数,最好大于 10,也不用事先对这个 X 设备进行说明,程序会将结果输出到一个
FORT.X 的文件里面,例如 10,就是 FORT.10,此时,用 NOTEPAD 或者 ULTRA-EDIT 都
可以把它打开——FORT.10 实质上就是一个.DAT 的文件,你可以把它重命名。
3.对数据计算时的误差控制。
以前觉得小数点后的误差不是那回事,没有太在意,可经过实战,终于明白了小小的误差
完全可以改变整个计算的结果。因此,如果程序能够输入结果而不正确时,除了寻找算法
的问题,不要忽略的误差。一般认为,FORTRAN 的 REAL 变量小数点后 8 位数字误差定
义已经足够,而事实上,这个精度可能在一些情况下不满足,这个时候,需要用更精确的变
量类 型—— REAL(8), 同理,当要 判断两个数是 否相等的时候 ,一 定要慎用 相等判断
(.EQ.)这个比较运算符,因为任何数据,别看着在现实中它们一定相等,在程序中就不
一定了。一旦经过了计算,就不可避免的产生了舍入误差,对于整数和有限几位循环的有
理数都问题不大,可一旦是一个无理数或者无限循环的小数,只有在判断了小数点后的每
一位都相等的时候,程序才判断为相等成立。这个相等的标准是非常苛刻的,所以一般情
况下,可行的方法是将两个数相减,再取其绝对值,当这个绝对值小于一个预先设定的误
差范围 ε,比如 0.001 时,就判断为相等成立。这样以来,便可避免这个问题