Fortran Coder

标题: IVF中实参虚参类型不一致 [打印本页]

作者: wenqiang0606    时间: 2018-9-25 20:06
标题: IVF中实参虚参类型不一致
使用的一个软件包,是linux下写的,使用了不同数据类型的实参虚参的传递,但是IVF不支持,应该怎么办?跟大家请教一下,谢谢暂时通过取消接口检查解决的问题,但是结果跟Linux下运行出来的结果不太一样。

这个是软件说明的文档。




作者: li913    时间: 2018-9-26 13:05
结果不一致,很难说哪里的问题。你最好把linux下的makefile拿出来看看,采用相同的编译参数。
作者: wenqiang0606    时间: 2018-9-26 15:51
li913 发表于 2018-9-26 13:05
结果不一致,很难说哪里的问题。你最好把linux下的makefile拿出来看看,采用相同的编译参数。 ...

好的,我再看看,主要是不太清楚怎么允许这种数据传递,同时不出错
作者: chiangtp    时间: 2018-9-26 16:54
[Fortran] 纯文本查看 复制代码
PROGRAM a
  REAL :: x
  CALL b(x)
CONTAINS
  SUBROUTINE b(i)
      INTEGER ::i
  END SUBROUTINE b
END PROGRAM a

a 與 b 之間為 explicit interface, (type inconsistent) -> (compile-time fatal error, all compilers)

[Fortran] 纯文本查看 复制代码
PROGRAM aa
  REAL ::xx
  CALL bb(xx)
END PROGRAM aa
SUBROUTINE bb(ii)
  INTEGER :: ii
END SUBROUTINE bb

aa 與 bb 之間為 implicit interface, (type inconsistent) -> (compile-time fatal error or warn 是 compiler or compile-time-option dependent)

aa 與 bb 放在兩個不同的file (aa.f90, bb.f90), 分開compile (王不見王, 沒有type inconsistent的問題), 就OK

==========================
IVF结果跟Linux下运行出来的结果不太一样
==========================
怎的(不太一样)?

不一樣的程度遠高於precision的容忍度, 你 call FFTPack 的 "codes" 出錯的機會極大
uninitialised variables, array out-of-bounds, unsaved local variables, ...
作者: wenqiang0606    时间: 2018-9-26 17:06
chiangtp 发表于 2018-9-26 16:54
[mw_shl_code=fortran,true]PROGRAM a
  REAL :: x
  CALL b(x)

就是计算的结果有时候不太一样,但有时候又是一样的。
谢谢版主!
作者: chiangtp    时间: 2018-9-26 19:47
怎的(不太一样)?

1.23456789, 1.23456987,  for 4-byte REAL, 這算正常

否則, 你 call FFTPack 的 "codes" 出錯的機會極大
作者: wenqiang0606    时间: 2018-9-26 19:55
chiangtp 发表于 2018-9-26 19:47
怎的(不太一样)?

1.23456789, 1.23456987,  for 4-byte REAL, 這算正常

我只是单纯看的结果,那个软件是进行矩阵分解C=BP的,分解出来的矩阵B是C的某些列,IVF和Linux的对应的列数是不一致的。
虽然结果不太一样,但感觉应该都是对的
作者: chiangtp    时间: 2018-9-26 20:04
non-zero (A, B) 的不一樣

相對誤差 abs(A-B)/abs(A or B)
< 1.0E-6 (for 4-Byte), or,
< 1.0E-15 (for 8-byte)

的 REAL computations, 都算正常
作者: wenqiang0606    时间: 2018-9-26 20:18
chiangtp 发表于 2018-9-26 20:04
non-zero (A, B) 的不一樣

相對誤差 abs(A-B)/abs(A or B)

也就是可能跟编译器的精度有关?
作者: liudy02    时间: 2018-10-19 18:46
什么叫使用不同数据类型的实参虚参的传递啊……
作者: wenqiang0606    时间: 2018-10-20 10:29
本帖最后由 wenqiang0606 于 2018-10-20 10:30 编辑

就是实参和虚参类型不一致。。
作者: wenqiang0606    时间: 2018-10-20 10:31
liudy02 发表于 2018-10-19 18:46
什么叫使用不同数据类型的实参虚参的传递啊……

就是实参虚参数据类型不一致
作者: liudy02    时间: 2018-10-20 18:15
啥,FORTRAN还能支持实参虚参类型不一致?编译器能编译?
作者: 咔咔皮    时间: 2020-10-29 11:50
您好,能问一下vs中IVF怎么取消接口检查吗?找了很久都找不到




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2