Fortran计算浮点数的总和,得不到精确的精度

时间:2015-04-23 12:25:46

标签: fortran fortran90

我是Fortran90的新手,我编写了一个简单的程序来添加两个浮点数,如下所示:

program Numbers_sum

  implicit none

  REAL :: sum
  sum = 1.6+2
  print*,"Sum =", sum
  end

我的答案为Sum = 3.5999999

为什么没有3.6。我怎样才能使这个程序得到确切的答案?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

无法在有限位数的基数2中写入3.6。这是write(*, '(F11.6)') sum

但是,您可以通过选择正确的格式来隐藏舍入错误:

REAL(KIND=8) :: var

如果您想以更高的精度计算,可以使用:

program numbers_sum
  implicit none
  integer, parameter :: dp = selected_real_kind(P=12)
  real(kind=dp) :: sum1
  sum1 = 1.6_dp + 2
  print *, "Sum = ", sum1
end

或者,如果你想要做得恰到好处:

{{1}}

但即使这样也不会完全消除四舍五入。

干杯

相关问题