一个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
不知道什么原因?
开启编译参数-Wall(如果是gfortran的话),调到没有警告就行了。
问题:
同类型才能比较大小。比如PRIS.gt.0d0。
调用时类型必须匹配。所以只有HEAVI(3d0)这种是合法的。
这个程序没有bus error已经是编译器仁慈了。 那么能不能将不同类型的数值比较大小,比如整型,实型,单精度,双精度,如何实现呢? 本帖最后由 铁道科学 于 2011-11-13 16:53 编辑
2楼有一点是不正确,数值比较不需要同类型(复数除外),楼主的错误就是行参和实参类型不一致导致的。
如果楼主想实现上述功能的话,大致有两种方式:
一种是用通用接口绑定功能相同而类型不同的子程序、函数;
第二种是则是在调用的时候下功夫,具体实现是:HEAVI(REAL(-3,KIND=8))等等
页:
[1]