如何将真正精确的类型传递给Fortran中的函数和子例程?

时间:2018-07-02 10:04:25

标签: fortran gfortran data-kinds

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

我编写了以下测试,并声明了常量a64和b64并将它们与它们的种类值(8)关联。我希望函数 divide_real 如果输入变量a和b为双精度,则输出双精度结果;如果输入为单精度,则输出单精度。可以通过将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

0 个答案:

没有答案