2011-02-07 65 views
0

代码部分如下所示;重新编译旧的Fortran程序并获取此错误

DO i = 1 , no2 + 1 
    IF (Isign.EQ.1) THEN 
     Ans(i) = fft(i)*Ans(i)/no2 
    ELSEIF (Isign.EQ.-1) THEN 
     IF (ABS(Ans(i)) .EQ. 0.0) 
&   PAUSE ' deconvolving at responce zero in convlv' 
     Ans(i) = fft(i)/Ans(i)/no2 
    ELSE 

编译器给我这个错误; IF(ABS(i))。 0.0)表达式之间 ^ 类型不一致的(^)和(^)

IF (ABS(i)).EQ. 0.0) 
      ^
invalid form for IF statement at (^) 

谁能告诉我如何正确地写这个“Intrisic功能”行来解决这个问题? 我是新来的编程和任何帮助将是伟大的!如果 重要,我正在使用GNU G77编译器?由于

+1

编译器推测会给你一个错误的行号。显示的是第一行吗?表面上与其中之一相似。如果没有,找到有错误的行并修复它。 – 2011-02-07 18:13:35

回答

1

我看到比那些留下更多的权利括号在第二个错误语句

IF (ABS(i)).EQ. 0.0) 

此外,什么是答案的类型和种类(i)和0.0?我记得fortran对于类型转换可能有点奇怪。

+1

随着源代码更好地显示,我们现在可以看到圆括号的平衡。答案可能是数组“Ans”的类型不是真实的,类型为“0.0”。将常数改为与“Ans”相同的类型。附:精确比较浮点值是有风险的。 – 2011-02-07 16:54:00

0

声明请。他们创造了一个不同的世界!

东西相较于小数零是一个非常不好的做法。它与 应该被制造得足够小相比,它几乎总是比较好的。

如上所述,尝试编写一个小的可编译示例,其中 产生相同的错误并发布它。