【发布时间】:2020-09-26 10:32:50
【问题描述】:
考虑代码:
subroutine func(i) bind(c)
use, intrinsic :: ISO_C_BINDING, only: c_float
implicit none
real(c_float), value :: i
print *, i, "+", i, "=", i + i
end subroutine
program main
use, intrinsic :: ISO_C_BINDING, only: c_float
implicit none
real(c_float) :: i = 1.0
call func(i)
end program
它显示5.61379690E-30 + 5.61379690E-30 = 1.12275938E-29,这当然是错误的。仅当我添加显式接口时,它才会输出正确的结果:
subroutine func(i) bind(c)
use, intrinsic :: ISO_C_BINDING, only: c_float
implicit none
real(c_float), value :: i
print *, i, "+", i, "=", i + i
end subroutine
program main
implicit none
interface
subroutine func(i)
real, value :: i
end subroutine func
end interface
real :: i = 1.0
call func(i)
end program
然后我得到1.00000000 + 1.00000000 = 2.00000000,这是正确的。
但是是什么导致了这里的错误?为什么需要一个不添加任何新信息的额外界面?
我使用 gfortran,GCC,版本 7.4.0
【问题讨论】:
标签: floating-point fortran ieee-754