同じくらいの大きさの数字の引き算をすると、桁落ちが生じます。桁落ちによって、計算精度が著しく落ちるので、注意しましょう。
水温、気温などの勾配を計算する場合、桁落ちが生じやすいです。
例をあげます。
a1 = 12.345672
a2 = 12.345661
を引き算した結果(d=a1-a2)は、
d = 0.000010
となり、dの有効数字は1桁になってしまいます。
d=0.000010の1の前の0は位取りのための数字で、有効数字とは関係ありません。
プログラム例 (underflow.f90)
program underflow! Description:! ! Author: am!! Host: aofd30! Directory: /work2/am/12.Work11/21.Climatology/08.Area_Ave/src!! Revision history:! 2011-05-05 08:52! Initial Version!! References! http://e-words.jp/w/E6A181E890BDE381A1.html! http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000528.html! use! implicit none real a1,a2 write(*,'(a)')'Program underflow starts.'! write(*,*)'' a1=12.345672 a2=12.345661 d=a1-a2 print '(a,f12.6)','a1 = ',a1 print '(a,f12.6)','a2 = ',a2 print * print '(a,f12.6)','d = a1-a2 = ',d print '(a,e14.6)','d = a1-a2 = ',d write(*,'(a)')'Done program underflow.' write(*,*)end program underflowコンパイル例
$ ifort -o underflow underflow.f90
実行例
$ underflow
Program underflow starts.
a1 = 12.345672
a2 = 12.345661
d = a1-a2 = 0.000010
d = a1-a2 = 0.104904E-04
Done program underflow.