【问题标题】:Fortran 90 producing the incorrect answer, produces 0 when the answer should be 1. Am I overlooking anything? [duplicate]Fortran 90 产生不正确的答案,当答案应该是 1 时产生 0。我忽略了什么吗? [复制]
【发布时间】:2020-05-31 21:27:10
【问题描述】:

这是我编写的 Fortran 90 代码。这是我在较大代码中使用的函数,但得到的结果不正确。

我从数学上知道答案应该是 1(或由于计算而接近 1),但我的答案结果是 0。

我做错了吗?有什么我不知道的吗?

这是我保存为 test.f90 的代码,我正在 Windows gfortran 上编译和运行:

program main
    implicit none

    real*8 :: y, t

    t = 0.0
    y = (1/3)*exp(5*t) + (2/3)*exp(-t) + t*t*exp(2*t)

    print*, 'y= ', y

end program main

【问题讨论】:

  • 很好的工作产生了一个小的可重现的测试代码。欢迎来到 SO!

标签: math fortran gfortran fortran90


【解决方案1】:

fortran 认为 1/3 和 2/3 等于 0。你应该在你的数字上加一个点:

program main
implicit none

real*8 :: y, t

t = 0.0
y = (1./3.)*exp(5*t) + (2./3.)*exp(-t) + t*t*exp(2*t)

print*, 'y= ', y

【讨论】:

  • 这个答案真的应该扩大 - 为什么1/32/3等于0,为什么小数有帮助?此外,显然有重复指向...
  • 此外,2./3. 通常是单精度实数,这意味着与2._dp/3._dp(其中dp 是相关类型)相比,结果将不准确。不推荐使用*8*
猜你喜欢
  • 2018-04-06
  • 1970-01-01
  • 2020-06-24
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
相关资源
最近更新 更多