首页 > 解决方案 > 如何将真正精度的类型传递给 Fortran 中的函数和子例程?

问题描述

我想让 Fortran 中的子例程和函数支持实数的单精度和双精度,以及各种变量的其他类型,与 Fortran 中的内在函数相同。如果 x 是双精度,sin(x) 会给我们正弦函数的双精度值,而单精度是 x 是单精度。

我编写了以下测试,并声明了我的常量 a64 和 b64 并将它们与它们的 kind 值 (8) 相关联。如果输入变量 a 和 b 为双精度,我希望我的函数divide_real输出双精度结果,如果输入为单精度,则输出单精度。这可以通过将 rk 参数包含为函数的输入来实现,但编译器抱怨 rk 未声明或者是不简化为常量表达式的变量(GNU 编译器)。

关于如何让它工作的任何提示?

 program test_kinds
 implicit none
 real(kind=4)    :: a32,b32
 real(kind=8)    :: a64,b64,divide_reals

 a64=atan(0.40)
 b64=atan(0.30)

 a32=a64
 b32=b64

 write(*,*) '32 bits :: ',divide_reals(a32,b32,4)
 write(*,*) '64 bits :: ',divide_reals(a64,b64,8)
 end program test_kinds

function divide_reals(a,b,rk)
implicit none
integer,intent(in)  :: rk
real(kind=rk),intent(in) :: a,b
real(kind=rk)            :: divide_reals

divide_reals=a/b
end function divide_reals

标签: fortrangfortrandata-kinds

解决方案


推荐阅读