fortran - 在参数中使用交替符号求和

标签 fortran fortran90

我正在 Fortran 90 中做一些数值练习。当我尝试在参数中使用交替符号进行求和时,我注意到(以我的方式)Fortran 不知道如何做到这一点。

例如,我想对 ((-1)^k)/2k 的 1 到 10 之间的 k 求和,所以我所做的是

sumk = 0
do k = 1,10
   sumk = ((-1)**k)/(2*k) + sumk
end do

但是输出是 sumk = 1。我做错了什么?

最佳答案

如果k是整数,则您正在执行整数运算。这些可能不会达到您的预期,例如1/2 = 0。当然,使用 float 会导致 0.5,但转换为整数会导致 0

因此,基本上,您添加到 sumk 的部分在您的情况下始终为零,最终导致 sumk=0。为了防止这种情况,您需要用 float 求商:

  sumk = real(((-1)**k))/real(2*k) + sumk

然后,结果是 -0.322817445 (我使用 Wolfram Alpha 进行了验证)。


当然,有多种方法可以改进这一点,例如迭代计算 (-1)**k ,或者将其替换为模运算。

关于fortran - 在参数中使用交替符号求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29870258/

相关文章:

fortran - 与实际过程相关的伪参数与伪过程的伪参数不同

algorithm - 在 FORTRAN 90 中编程 Cholesky 分解时出错

fortran - gfortran 不允许具有不同组件长度的字符数组

Vim突出显示FORTRAN的怪异部分

c++ - 如何在 1 字节字符中存储 2 个数字?

fortran - 来自列的矩阵

c++ - 我可以声明一个位表吗?

fortran - 为什么我们不能通过变量来定义数组大小?

fortran - Fortran 格式描述符的问题

fortran - TINY(x) 内函数