主题:请问DCOS,DSQRT,DEXP...函数怎么调用?
scofieldy
[专家分:0] 发布于 2009-11-06 10:29:00
下面是我调用这两个函数时出现的错误提示:
Warning: Arguments' data types are incompatible with intrinsic procedure, assume EXTERNAL. [DSQRT] -----> KTL=-AII*DSQRT(K**2-W**2/CSLX**2)
Error: This name does not have a type, and must have an explicit type. [DSQRT]
-----> KTL=-AII*DSQRT(K**2-W**2/CSLX**2)
变量的数据类型与内部程序不相容是什么意思?DSQRT还要另外定义后再调用?
期待哪位朋友给解答一下,非常感谢!
回复列表 (共8个回复)
沙发
asymptotic [专家分:16630] 发布于 2009-11-06 12:13:00
1. DSQRT 需要双精度变量;
2. 你似乎在程序中用了 external:: DSQRT,把这句话去掉(根据 Warning 猜测)
板凳
yeg001 [专家分:14390] 发布于 2009-11-06 14:11:00
估计是输入的参数类型对不上, 程序自动把他分到EXTERNAL上了.
3 楼
luojiayimeng [专家分:0] 发布于 2009-11-10 22:08:00
是不是你的函数DEXP(x)等,里面的x不是双精度啊,我前几天写程序时也发现这个问题
1program main
2use IMSL
3implicit none
4write(*,*) 2.1*DEXP(1.)
5WRITE(*,*) SQRT(1.)
end
第四行有错,第五行正确
如果写成下面形式
program main
use IMSL
implicit none
real(kind=8):: a=1. !real*8::a=1.
write(*,*) 2.1*DEXP(a)
WRITE(*,*) SQRT(1.)
end
则正确。
究其原因,是因为real的默认类型是单精度的,而DEXP的引数与变数类型都应该是双精度的,故写为dexp(1.)是错误的,应该先定义其中的引数1为双精度实型。
我也不知道这样理解对不对,希望相互讨论。
4 楼
asymptotic [专家分:16630] 发布于 2009-11-12 20:41:00
三楼 luojiayimeng 网友分析得正确,不过
real(kind=8):: a=1. !real*8::a=1.
这一句还是改为
real(kind=8):: a=1.0D0
否则,Rounding-Error 将不约而至。
5 楼
luojiayimeng [专家分:0] 发布于 2009-11-12 21:08:00
谢谢指导啊,刚开始学习,遇到很多问题,还望多多指教啊
6 楼
luojiayimeng [专家分:0] 发布于 2009-11-12 21:13:00
4楼的能不能帮我看看我编的二重积分的程序啊,先谢谢啊
7 楼
gzcfortran [专家分:0] 发布于 2010-11-18 11:56:00
我也遇到dcos,dcosh,dsin,dsinh等函数的使用,哪位高手具体说说这些函数的实际意义啊!不理解,谢谢!
8 楼
yeg001 [专家分:14390] 发布于 2010-11-18 12:58:00
直接查查编译器帮助吧.
d就是双精度的d.
我来回复