3

次の Fortran プログラムを検討してください。

program main
implicit none

double complex :: a(51,51),b(51,51)
Integer::i,j
real(8)::ht=0.01
real(8) T1,T2

do i=1,51
   do j=1,51
      a(i,j)=cmplx(Sin(0.01*i),Cos(0.01*j))
   end do
end do

call cpu_time(T1)

do i=1,23497
   b(:,:)=(0.,1.)*ht/2.*a(:,:)
end do

call cpu_time(T2)

write(*,*) sum(b)
print '("Time = ",f12.9," seconds.")', T2-T1

end program main

出力は

 (-12.4321907340245,3.30723047182099)
Time =  0.052991000 seconds.

をコメントアウトするwrite(*,*) sum(b)と、出力は次のようになります。

Time =  0.000000000 seconds.

ループが実行されていないようですが、なぜこれが起こるのですか?

4

1 に答える 1

8

ステートメントを削除するwriteと、コンパイラは変数bが使用されていないことを確認できるため、 を割り当てるコードを削除しますb

それが完了すると、その変数aも使用されていないことがわかり、その変数を割り当てるコードが削除されます。

への呼び出し以外は何も残っていませんcpu_time()

于 2013-07-29T22:12:35.390 に答える