大きさの極端に違う数字の足し算をする場合にも、計算結果に注意しましょう。
下の例では、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.