我正在 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/