2

"floating point error: overflow"このプログラムは、次の温度値で を返しています。

170 225 275 330 390 445 500 555 610 670 725 775 830 1100 1390 1670

16 乗まで上げてから加算する必要がある巨大な値を考えると、これは明らかです。

この行列は、ガウス消去法を使用して解く必要がある 4 つの方程式のシステムを表し、残りのコードの準備ができています。

Real Mat(4,4),Temp(10), Temp2(10),Sum

Do i=1,16
    Write(*,*)"enter Temperature value T",i
    Read (*,*) Temp(i)
End do

Do i=1,16
    Do j=1,16
        sum=0
        Do k=1,16
           if(i.GT.1)then
                l=(4*(i-1))+j
            elseif(i.eq.1)then
                l=i+j-1
            endif   
            Temp2(k)=Temp(k)**l
            sum=sum+Temp2(k)
        End do
        Mat(i,j)=Sum
    End do
End Do

Do I=1,4
  Write(*,*) (mat(I,J), j=1,4)
End do
 !this just forces the program to stay in the exe wind
    Read(*,*) sum
End    
4

1 に答える 1

5

あなたの配列Tempはたった10要素です。16桁では読めません。Matのみですが、ループとの(4,4)ように呼び出します。(i,j)1..161..16

また、implicit none学生からの採点のために、それがなければプログラムを検討しません。

優れたデバッグ機能を備えたコンパイラを使用し、正しいフラグを設定することをお勧めします。私は使用しますgfortran -g -fbacktrace -fcheck=all -Wallg95も良いです。NAGまた、実行時に未定義の値をチェックするコマーシャル..

于 2012-12-12T21:16:35.940 に答える