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) |
REAL |
REAL |
Radice quadrata di |
|
ABS(X) |
REAL /INTEGER |
Stesso tipo input | Valore assoluto di |
|
ACHAR(I) |
INTEGER |
CHAR(1) |
Restituisce la rappresentazione ASCII di I |
|
SIN(X) |
REAL |
REAL |
Seno di |
|
SIND(X) |
REAL |
REAL |
Seno di |
|
COS(X) |
REAL |
REAL |
Coseno di |
|
COSD(X) |
REAL |
REAL |
Coseno di |
|
TAN(X) |
REAL |
REAL |
Tangente di |
|
TAND(X) |
REAL |
REAL |
Tangente di |
|
EXP(X) |
REAL |
REAL |
Calcola |
|
LOG(X) |
REAL |
REAL |
Logaritmo naturale di |
|
LOG10(X) |
REAL |
REAL |
Logaritmo in base 10 di |
|
IACHAR(C) |
CHAR(1) |
INTEGER |
Fornisce il carattere ASCII corrispondente a I |
|
MOD(A,B) |
REAL /INTEGER |
Stesso tipo input | Funzione resto (modulo) di |
|
MAX(A,B) |
REAL /INTEGER |
Stesso tipo input | Restituisce il maggiore tra |
|
MIN(A,B) |
REAL /INTEGER |
Stesso tipo input | Restituisce il minore tra |
|
ASIN(X) |
REAL |
REAL |
Inverso del seno, |
|
ASIND(X) |
REAL |
REAL |
Inverso del seno, |
|
ACOS(X) |
REAL |
REAL |
Inverso del coseno, |
|
ACOSD(X) |
REAL |
REAL |
Inverso del coseno, |
|
ATAN(X) |
REAL |
REAL |
Inverso della tangente, |
|
ATAND(X) |
REAL |
REAL |
Inverso della tangente, |
|
ATAN2(Y,X) |
REAL |
REAL |
Inverso della tangente a 4 quadranti, |
|
ATAN2D(Y,X) |
REAL |
REAL |
Inverso della tangente a 4 quadranti, |
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
y = SIN(theta)
Dopo questa istruzione, la variabile y
conterrà il seno di
Le funzioni trigonometriche in Fortran (senza la lettera “D” nel nome) si aspettano che l'argomento sia in radianti. Se
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()
vsSIND()
). - 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.