Как передать вид на реальную точность функциям и подпрограммам на Фортране?
Я хочу, чтобы мои подпрограммы и функции в Фортране поддерживали одинарную и двойную точность для вещественных чисел и другие виды для различных переменных, так же как и встроенные функции в Фортране. sin(x) даст нам значение синусоидальной точности двойной точности, если x - это двойная точность, в то время как одинарная точность - это x с одинарной точностью.
Я написал следующий тест и объявил свои константы a64 и b64 и связал их с их добрым значением (8). Я хочу, чтобы моя функция div_real выводила результат двойной точности, если входные переменные a и b двойные, и выводила одинарную точность, если входные данные имели одинарную точность. Это возможно путем включения параметра r k в качестве входных данных для функции, но компилятор жалуется на то, что r k не объявлен или является переменной, которая не сводится к постоянному выражению (компилятор 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