本帖最后由 vvt 于 2017-11-1 08:51 编辑
第一个问题
complex*8 a , b
等效于
complex(4) a , b
在大多数编译器上,等效于 complex a , b ,是单精度的。
您要使用双精度,请用
complex(8) a , b
或 complex(kind=8) a , b !推荐这种
或 complex*16 a , b !不推荐这种
第二个问题
b = cdabs(a) 要求 a 是双精度的,而因为你的第一个问题,导致 a 是单精度,所以会出错。
第三个问题
其实没必要写 cdabs ,直接写
[Fortran] 纯文本查看 复制代码 PROGRAM HOMEWORK0
Implicit None
complex(kind=8) :: a , b
a=sqrt((-4.d0,0.d0))
write(*,*)a
b = abs(a)
write(*,*)b
END PROGRAM HOMEWORK0
就可以了,编译器会根据你的参数类型,自动决定用单精度还是双精度,real还是complex
详解 http://whyd.w.fcode.cn
最后一个问题fortran是如何编译链接的。
如果您是想知道如何操作编译器,令其编译链接。那么不同编译器的操作方式不一样。
如果您是想了解编译器内部是如何实现编译链接的。您可以看《编译原理》,还有 gfortran 的源代码。
祝好!
|