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