Как передать вид на реальную точность функциям и подпрограммам на Фортране?

Я хочу, чтобы мои подпрограммы и функции в Фортране поддерживали одинарную и двойную точность для вещественных чисел и другие виды для различных переменных, так же как и встроенные функции в Фортране. 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

0 ответов

Другие вопросы по тегам