【问题标题】:Fortran 95 double summation does not output correctlyFortran 95 双求和未正确输出
【发布时间】:2017-06-14 05:14:43
【问题描述】:

我正在尝试在 Fortran 95 中编写双重求和,但是,我似乎从未得到正确的输出。它似乎总是输出 Fortran 非常小的实数。这是我的代码:

    program summation
    implicit none
    integer::i,j,m,n
    real::s,s1
    s1=0
      do i=1,100
        do j=1,100
          s1=s1+(1/((i**2)+(j**2)))
        end do
        s=s1+s
      end do
    print*, s
    end program summation

我相信 s 的最终值应该在 6.4 左右。

【问题讨论】:

    标签: sum fortran fortran95


    【解决方案1】:

    您最初从未设置过s。所以你得到了完全的垃圾。

    在你创建s = s + s1 之后,你应该在每次迭代中将s1 重新设置为0。

    您还可以将 1 除以一个更大的整数,因此结果始终为整数 0。您必须使用其中一项 real。在我的示例中,我使用 1. 将 1 变为真实。

    所以

    s=0
    
    do i=1,100
     s1=0
     do j=1,100
       s1=s1+(1./((i**2)+(j**2)))
     end do
     s=s1+s
    end do
    
    print*, s
    

    是可能的,但为什么不把所有东西都加到一个累加器中呢?

    s=0
    
    do i=1,100
     do j=1,100
       s=s+(1./((i**2)+(j**2)))
     end do
    end do
    
    print*, s
    

    【讨论】:

    • 非常感谢!我最初试图在每次迭代时将 s1 重置为 0,并且打印输出为 0,现在我发现我的问题来自需要使其中一个术语成为真实
    猜你喜欢
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多