小编him*_*aft的帖子

MATMUL 结果与双精度显式计算不相等?

对不起,一个看似愚蠢的问题。在用内在函数替换矩阵上的 for 循环操作时,我正在测试计算效率。当我检查两种方法的矩阵乘积结果时,我很困惑这两种输出不一样。这是我使用的简化代码

program matmultest
    integer,parameter::nx=64,ny=32,nz=16
    real*8::mat1(nx,ny),mat2(ny,nz)
    real*8::result1(nx,nz),result2(nx,nz),diff(nx,nz)
    real*8::localsum
    integer::i,j,m
    do i=1,ny
        do j=1,nx
            mat1(j,i)=dble(j)/7d0+2.65d0*dble(i)
        enddo
    enddo
    do i=1,nz
        do j=1,ny
            mat2(j,i)=5d0*dble(j)-dble(i)*0.45d0
        enddo
    enddo
    do j=1,nz
        do i=1,nx
            localsum=0d0
            do m=1,ny
                localsum=localsum+mat1(i,m)*mat2(m,j)
            enddo
            result1(i,j)=localsum
        enddo
    enddo
    result2=matmul(mat1,mat2)
    diff=result2-result1
    print*,sum(abs(diff)),maxval(diff)
end program matmultest
Run Code Online (Sandbox Code Playgroud)

结果给出

   1.6705598682165146E-008   5.8207660913467407E-011
Run Code Online (Sandbox Code Playgroud)

real8当我integer稍后测试时,差异不为零,但为零。我想知道是因为我的代码在某处出错还是MATMUL()单精度的数值精度?

我使用的编译器是 GNU Fortran (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

谢谢!

fortran gfortran

2
推荐指数
1
解决办法
135
查看次数

标签 统计

fortran ×1

gfortran ×1