情報落ち
大きさの極端に違う数字の足し算をする場合にも、計算結果に注意しましょう。
下の例では、a1=250000.0に何回、a2=0.001を足しても和は、sum= 250000.0のままです。
プログラム例(underflow2.f90)
program underflow2
! Description:
!
! Author: am
!
! Host: aofd30
! Directory: /work2/am/12.Work11/21.Climatology/11.jcope_daily_cut/src
!
! Revision history:
! 2011-05-05 10:15
! Initial Version
real :: a1=250000.0
real :: a2= 0.001
write(*,'(a)')'Program underflow2 starts.'
! write(*,*)''
sum=0.0
print *,'a1=',a1
print *,'a2=',a2
sum=a1
do i=1,100
sum=sum+a2
if(mod(i,20) == 0)then
print *,'i=',i,' sum=',sum
endif
enddo
write(*,'(a)')'Done program underflow2.'
write(*,*)
end program underflow2
コンパイル例
$ ifort -o underflow2 underflow2.f90
実行例
$ ./underflow2
Program underflow2 starts.
a1= 250000.0
a2= 1.0000000E-03
i= 20 sum= 250000.0
i= 40 sum= 250000.0
i= 60 sum= 250000.0
i= 80 sum= 250000.0
i= 100 sum= 250000.0
Done program underflow2.