| 谢谢你的回复。 
 下面是我出问题的代码部分。
 
 
 [Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode 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函数的输出结果合理呢?
 
 谢谢啦。
 |