找回密码
 注册
查看: 1867|回复: 3

FORTRAN排错探讨

[复制链接]
发表于 2005-6-15 16:11:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我的一个FORTRAN程序,算出的结果是NaN,请各位编程朋友说说,程序的问题可能出现在哪里?
发表于 2005-6-15 21:49:49 | 显示全部楼层

FORTRAN排错探讨

象你这样问问题,神仙才能回答得出来,也舍不得把原程序给大家看看。
发表于 2005-6-16 13:08:28 | 显示全部楼层

FORTRAN排错探讨

变量是无限大的时候会用NaN来表示。检查一下有没有分母为零的情况。
发表于 2005-6-18 12:44:52 | 显示全部楼层

FORTRAN排错探讨

在linux类型系统下,把浮点fpu的控制字改成遇错就停止,就用下面我编的c语言就可以控制fpu的状态(附件):
/*
A running FORTRAN code may be interrupted for the following cases,
   IM: Invalid operation,
   ZM: Zero-divide,
   OM: Overflow,
   DM: Denormalised operand,
   UM: Underflow,
   PM: Precision (inexact result).
The following code only deals with cases of IM,ZM and OM.
Corresponding changes of the code are needed for other cases.
To use this code, do the following:
1)add "call floating" as the 1st executable statement in your FORTRAN code,
2)"gcc -c -o floating.o floating.c",
3)"g77 FORTRAN_FILE_NAME floating.o -L/usr/i386-glibc21-linux/lib".
That';s it, folks.
Dr. Zhanwen Han, the Yunnan Observatory
zhanwen@public.km.yn.cn
29th-Jan-2001
Revised to fit for glibc2.1 or more by Dr. Xu H.Y., 8th-May-2003
Dr. Huayin Xu, the Yunnan Observatory, xuhuayin@sina.com
*/
  
&#35;include </usr/include/fpu_control.h>
void __attribute__ ((constructor)) floating_ ()
{
  int cwfpu,i;
  i=3;
    switch(i){
      case 1 :  cwfpu=_FPU_DEFAULT & ~(_FPU_MASK_OM);
                break;
      case 2 :  cwfpu=_FPU_DEFAULT & ~(_FPU_MASK_ZM | _FPU_MASK_OM);
                break;
      case 3 :  cwfpu=_FPU_DEFAULT & ~(_FPU_MASK_IM | _FPU_MASK_ZM | _FPU_MASK_OM);
                break;
      case 6 :  cwfpu=_FPU_DEFAULT & ~(_FPU_MASK_IM | _FPU_MASK_ZM | _FPU_MASK_OM |
                                       _FPU_MASK_DM | _FPU_MASK_UM | _FPU_MASK_PM);
                break;
      default:  cwfpu=_FPU_DEFAULT;
    }
  _FPU_SETCW (cwfpu);
}
运行完上面的函数,再用gdb,dbx这样这样的调试器调试运行你的fortran程序,fortran程序停止的地方就是你出错的地方.这种方法可以方便地查上溢,除零,log(-2)的错误.
在windows系统中如何改变fpu字状态我就不大清楚了,不知到visual fortran有没有这样的功能.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表