Fortran で遺伝的アルゴリズムを作成して、一般的なフィットネス関数を long double 精度で計算できるようにしました。最初のバージョン (倍精度) は、プログレス バーを実装した gfortran 用に作成されました。
gfortran はreal*16
計算を実行できないため、ifort でコンパイルする必要があります。すべて正常に動作しますが、この場合 (ifort) 進行状況バーが正しく動作しません。つまり、サイクル全体が完了したときにのみ、進行状況バーが std 出力に出力されます。
プログレスバーのコードは次のとおりです。
if (rate(i).gt.ratemax) then
ratemax=rate(i)
write(*,"(1x,A57,D12.4,A27,f6.2,A1)",advance="no") &
'\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b ff: ', &
ratemax,' Progress:',100.*real(nmix)/real(nmixing),'%'
end if
私は 64 ビットの Intel Xeon を使用しており、ifort のオプションは次のとおりです。
ifort -O2 -assume bscc FFevalLD.f90 func.o -o FFevalLD
gfortran を使用するときは、次のようにコンパイルします。
gfortran -ffree-form -O2 -fbackslash FFeval.f func.o -o FFeval
gfortran (ただし倍精度) では、すべて正常に動作します。