Indietro Indice Successivo



Eps




Scopo: calcolo dell'epsilon macchina
Specifiche: real function eps()
Descrizione: Background del problema

In un sistema aritmetico floating-point a precisione finita ogni elemento ha un proprio intervallo d'elementi neutri: cioè, se x è un numero macchina e y è un numero non nullo, appartenente all'intervallo di rappresentabilità del sistema, può accadere che l'operazione macchina xÅ y dia come risultato x. Se x è uguale a 1, il più piccolo numero positivo e che dia contributo alla somma 1 Åe e cioè tale che:

1Åe = fl(1+e) > 1

è detto epsilon macchina. Si verifica inoltre che, in un sistema aritmetico F(b, t, Emin, Emax) in cui la somma è effettuata con più di t cifre e si usa l'arrotondamento, e=1/2b1-t e cioè è pari alla precisione relativa del sistema.

Pertanto l'importanza dell'epsilon macchina è dovuta al fatto che fornisce un modo per calcolare la precisione t del sistema aritmetico di un elaboratore e quindi anche la sua precisione relativa.

Descrizione dell'algoritmo

L'algoritmo è fondato sull'inizializzazione di una variabile reale al valore 1 e su un ciclo a condizione, nel quale tale variabile è divisa per la base del sistema (b= 2) e sommata a 1. Il ciclo termina quando l'ultimo valore della variabile non dà più contributo alla somma. Il penultimo valore della variabile sarà l'epsilon macchina.

Raccomandazioni sull'uso

nessuna.

Bibliografia: [1], [2]
Parametri di I/O:

input: - nessuno

output:

eps - tipo reale, conterrà l'epsilon macchina

Indicatori d'errore: nessuno.
Routines ausiliarie: nessuna.
Tempo d'esecuzione: complessità asintotica lineare O(t), in funzione della precisione t del sistema aritmetico.
Memoria richiesta: nessun array allocato in memoria.
Accuratezza fornita: dipendente dalla precisione del sistema aritmetico della macchina.
Esempio di programma chiamante:

Program epsd

C programma dimostrativo della funzione eps

real eps
external eps

print*,'"Esempio di utilizzo della funzione eps"
print*
write(*,'(1X,A,E14.7)')" Epsilon macchina ='",eps()
end





Indietro Indice Successivo