回 帖 发 新 帖 刷新版面

主题:请问DCOS,DSQRT,DEXP...函数怎么调用?

下面是我调用这两个函数时出现的错误提示:
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个回复)

沙发

1. DSQRT 需要双精度变量;
2. 你似乎在程序中用了 external:: DSQRT,把这句话去掉(根据 Warning 猜测)

板凳

估计是输入的参数类型对不上, 程序自动把他分到EXTERNAL上了.

3 楼

是不是你的函数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 楼

三楼 luojiayimeng 网友分析得正确,不过
 real(kind=8):: a=1.      !real*8::a=1.
这一句还是改为

real(kind=8):: a=1.0D0

否则,Rounding-Error 将不约而至。

5 楼


谢谢指导啊,刚开始学习,遇到很多问题,还望多多指教啊

6 楼

4楼的能不能帮我看看我编的二重积分的程序啊,先谢谢啊

7 楼

我也遇到dcos,dcosh,dsin,dsinh等函数的使用,哪位高手具体说说这些函数的实际意义啊!不理解,谢谢!

8 楼

直接查查编译器帮助吧.
d就是双精度的d.

我来回复

您尚未登录,请登录后再回复。点此登录或注册