zzting 发表于 2011-11-11 21:10:01

一个fortran77的自定义函数的疑问?

本帖最后由 zzting 于 2011-11-11 21:22 编辑

请教个问题,看看我这个函数,fortran77写的:
FUNCTION HEAVI(PRIS)
         REAL*8 PRIS   
   IF(PRIS.GT.0.0) THEN
       HEAVI=1.0
    ENDIF
C
         IF(PRIS.LT.0.0) THEN
                HEAVI=0.0
    ENDIF
RETURN
       END

调用的时候出现下列情况:
HEAVI(-3)=1.00000000000000,      HEAVI(-3.0D0)=0.000000000000000E+000,   HEAVI(-3.0)=1.00000000000000
HEAVI(3)=1.00000000000000,      HEAVI(3.0D0)=1.000000000000000E+000,   HEAVI(3.0)=1.00000000000000
不知道什么原因?

wangmianzhi 发表于 2011-11-12 02:11:21

开启编译参数-Wall(如果是gfortran的话),调到没有警告就行了。

问题:
同类型才能比较大小。比如PRIS.gt.0d0。
调用时类型必须匹配。所以只有HEAVI(3d0)这种是合法的。

这个程序没有bus error已经是编译器仁慈了。

zzting 发表于 2011-11-13 11:43:56

那么能不能将不同类型的数值比较大小,比如整型,实型,单精度,双精度,如何实现呢?

铁道科学 发表于 2011-11-13 16:52:07

本帖最后由 铁道科学 于 2011-11-13 16:53 编辑

2楼有一点是不正确,数值比较不需要同类型(复数除外),楼主的错误就是行参和实参类型不一致导致的。

如果楼主想实现上述功能的话,大致有两种方式:
一种是用通用接口绑定功能相同而类型不同的子程序、函数;
第二种是则是在调用的时候下功夫,具体实现是:HEAVI(REAL(-3,KIND=8))等等
页: [1]
查看完整版本: 一个fortran77的自定义函数的疑问?