谢谢你的回复。
下面是我出问题的代码部分。
[Fortran] 纯文本查看 复制代码 INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(15,14)
INTEGER :: i, j
REAL (KIND=dp), ALLOCATABLE :: ev(:,:)
REAL (KIND=dp) :: fermi
REAL (KIND=dp) :: kb
REAL (KIND=dp) :: te
ei = (ev(i,j) - fermi) * (1.0d0 /(EXP((ev(i,j) - fermi)/kb / te) + 1.0d0))&
+ kb * te * DLOG(1.0d0 + EXP(0.0d0 - (ev(i,j) - fermi) /kb /te))
write (unit=*, fmt=*) 'kb', kb
write (unit=*, fmt=*) 'fermi', fermi
write (unit=*, fmt=*) 'te', te
write (unit=*, fmt=*) 'ev', ev(i,j)
write (unit=*, fmt=*) '(ev(i,j) - fermi)', (ev(i,j) - fermi)
write (unit=*, fmt=*) 'f_function', (1.0d0 /(EXP((ev(i,j) - fermi)/kb / te) + 1.0d0))
write (unit=*, fmt=*) 'EXP(0.0d0 - (ev(i,j) - fermi) /kb /te)', EXP(0.0d0 - (ev(i,j) - fermi) /kb /te)
write (unit=*, fmt=*) 'DLOG_function', DLOG(1.0d0 + EXP(0.0d0 - (ev(i,j) - fermi) /kb /te))
write (unit=*, fmt=*) 'ei=', ei
其中,ev(i,j)是从主程序传递进来的一个二维双精度数组。
编译并运行程序后,出现下面的结果。
kb 8.617333262145000E-005
fermi -0.531700000000000
te 30.0000000000000
ev -20.4013773387809
(ev(i,j) - fermi) -17.9840108474454
f_function 1.00000000000000
EXP(0.0d0 - (ev(i,j) - fermi) /kb /te) Infinity
DLOG_function Infinity
ei= Infinity
因为EXP函数的结果是Infinity类型的数据,导致后面的DLOG函数结果和ei变量也都变成了Infinity类型的数据。
请问,1. 我对于双精度浮点数据类型的设定是否有误呢?
2. 要如何调整代码,让EXP函数的输出结果合理呢?
谢谢啦。 |