Funzioni intrinseche in Fortran

Le funzioni sono enti fondamentali in matematica e programmazione: ricevono uno o più valori di ingresso (argomenti) ed elaborano un risultato unico.

Nelle applicazioni scientifiche e tecniche, spesso necessitiamo di operazioni più avanzate di una semplice somma o moltiplicazione, come funzioni trigonometriche, logaritmi, funzioni iperboliche, ecc.

In Fortran, molte di queste funzioni più comuni sono fornite nativamente come funzioni intrinseche (intrinsic functions). Le funzioni meno comuni possono essere implementate come funzioni esterne o funzioni interne, discusse in seguito. Una funzione Fortran accetta uno o più argomenti e restituisce un singolo valore di output; ciò la rende facilmente integrabile nelle espressioni.

Funzioni Intrinseche

In Fortran, una funzione viene utilizzata scrivendo il suo nome e passando gli argomenti tra parentesi.

Il calcolatore invoca una routine separata che elabora il risultato e lo sostituisce al posto della funzione nell'espressione originale.

La maggior parte delle funzioni più comuni è già integrata nel linguaggio, quindi non serve implementarla manualmente.

Di seguito sono riportate alcune delle funzioni intrinseche più comuni in Fortran:

Funzione Equivalente Tipo Input Tipo Output Commenti
SQRT(X) \sqrt{x} REAL REAL Radice quadrata di x (valido per $ x \ge 0 $)
ABS(X) \|x\| REAL/INTEGER Stesso tipo input Valore assoluto di x
ACHAR(I) INTEGER CHAR(1) Restituisce la rappresentazione ASCII di I
SIN(X) \sin(x) REAL REAL Seno di x (x in radianti)
SIND(X) \sin(x) REAL REAL Seno di x (x in gradi)
COS(X) \cos(x) REAL REAL Coseno di x (x in radianti)
COSD(X) \cos(x) REAL REAL Coseno di x (x in gradi)
TAN(X) \tan(x) REAL REAL Tangente di x (x in radianti)
TAND(X) \tan(x) REAL REAL Tangente di x (x in gradi)
EXP(X) e^x REAL REAL Calcola e elevato alla x
LOG(X) \ln(x) REAL REAL Logaritmo naturale di x (x>0)
LOG10(X) \log_{10}(x) REAL REAL Logaritmo in base 10 di x (x>0)
IACHAR(C) CHAR(1) INTEGER Fornisce il carattere ASCII corrispondente a I
MOD(A,B) REAL/INTEGER Stesso tipo input Funzione resto (modulo) di A diviso B
MAX(A,B) REAL/INTEGER Stesso tipo input Restituisce il maggiore tra A e B
MIN(A,B) REAL/INTEGER Stesso tipo input Restituisce il minore tra A e B
ASIN(X) \sin^{-1}(x) REAL REAL Inverso del seno, x in radianti
ASIND(X) \sin^{-1}(x) REAL REAL Inverso del seno, x in gradi
ACOS(X) \cos^{-1}(x) REAL REAL Inverso del coseno, x in radianti
ACOSD(X) \cos^{-1}(x) REAL REAL Inverso del coseno, x in gradi
ATAN(X) \tan^{-1}(x) REAL REAL Inverso della tangente, x in radianti (-\pi/2 \le x \le \pi/2)
ATAND(X) \tan^{-1}(x) REAL REAL Inverso della tangente, x in gradi (-90 \le x \le 90)
ATAN2(Y,X) \tan^{-1}(y/x) REAL REAL Inverso della tangente a 4 quadranti, x in radianti
ATAN2D(Y,X) \tan^{-1}(y/x) REAL REAL Inverso della tangente a 4 quadranti, x in gradi
Tabella 1: Funzioni intrinseche comuni in Fortran

Utilizzo delle Funzioni Intrinseche in Fortran

Per usare una funzione intrinseca, basta nominare la funzione seguita dagli argomenti racchiusi tra parentesi.

Ad esempio, possiamo calcolare il seno di un valore \theta con:

y = SIN(theta)

Dopo questa istruzione, la variabile y conterrà il seno di \theta.

Le funzioni trigonometriche in Fortran (senza la lettera “D” nel nome) si aspettano che l'argomento sia in radianti. Se \theta è in gradi, dobbiamo convertirlo a radianti prima di passarlo alla funzione:

y = SIN(theta * (3.141593 / 180.))

Oppure definire una costante:

INTEGER, PARAMETER :: DEG_TO_RAD = 3.141593 / 180.
...
y = SIN(theta * DEG_TO_RAD)

Un argomento di funzione può essere:

  • Una costante: y = SIN(3.141593)
  • Una variabile: y = SIN(x)
  • Un'espressione: y = SIN(PI * x)
  • Il risultato di un'altra funzione: y = SIN(SQRT(x))

Le funzioni si possono usare dovunque si possa usare un valore numerico o costante (ma mai sul lato sinistro di un'assegnazione, perché le funzioni non memorizzano dati).

Alcune funzioni Fortran sono generiche: ad esempio, ABS(X) restituisce un valore assoluto. Se X è REAL, ABS(X) è REAL; se X è INTEGER, ABS(X) è INTEGER. Altre funzioni sono specifiche, cioè accettano un solo tipo di input e/o producono un solo tipo di output.

In Sintesi

In questa lezione abbiamo visto che:

  • Le funzioni intrinseche di Fortran sono fornite dal linguaggio per svolgere calcoli comuni (trigonometria, radici quadrate, logaritmi, ecc.).
  • Per usare una funzione, si scrive il nome e si passano gli argomenti tra parentesi. Il compilatore sostituisce l'invocazione con il risultato calcolato.
  • Alcune funzioni trigonometriche si aspettano radianti, altre si aspettano gradi (ad esempio SIN() vs SIND()).
  • Esistono funzioni generiche (stesso nome, ma tipo di ritorno dipendente dal tipo dell'argomento) e funzioni specifiche (un unico tipo di input/output).
  • Non è possibile usare una funzione sul lato sinistro di =, perché non è un'area di memoria scrivibile.