2

该程序返回"floating point error: overflow"具有以下温度值的 a:

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 -Wall. g95也不错。也是商业NAG的,它甚至在运行时检查未定义的值..

于 2012-12-12T21:16:35.940 回答