Да кажем, че искам да напиша функция, която приема като вход масив x от едно измерение и връща друг масив y от същото измерение въз основа на него (за да го илюстрирам използвайки функция, която го умножава по 2). Имам две опции за този код:
function times2(x) result(y)
real, intent(in) :: x(:)
real, allocatable :: y(:)
allocate(y(size(x))
y = 2*x
end function
or
function times2(x,n) result(y)
real, intent(in) :: x(n)
integer, intent(in) :: n
real :: y(n)
y = 2*x
end function
Лично аз предпочитам първия, защото е по-лесен за използване от повикващия, но не съм сигурен кой е по-добър по отношение на паметта, да предположим, че масивът x може да бъде огромен, не знам дали е по-добре да бъде отложен масив или автоматичен масив. Във всеки случай, кой е добрият начин да го направите в съвременния Fortran?
sqrt
е функция, което означава, че можете да оценявате изрази катоsqrt(1/(1 + sqrt(x))
. Представете си, чеsqrt
е подпрограма... - person Manuel Pena   schedule 22.02.2019cross(u,v,n)
? (съжалявам, ако съм те разбрал погрешно @roygvib) - person Manuel Pena   schedule 22.02.2019y(size(x))
сx(:)
все още (което, признавам, е това, което си мислех, че сте направили: вероятно съм прескочил действителния код въз основа на най-минималната разлика между автоматично и отложено.) - person francescalus   schedule 22.02.2019