1

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 (ただし倍精度) では、すべて正常に動作します。

4

1 に答える 1

1

解決策は次のとおりです。

if (rate(i).gt.ratemax) then 
  ratemax=rate(i)
  1100 format(1x,A57,D12.4,A27,f6.2,A1,$) 
  write(*,1100) &
  '\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$ ratemax,' Progress:',100.*real(nmix)/real(nmixing),'%' 
于 2011-09-02T14:10:26.037 に答える