Il 09/09/20 02:36, pino mugo ha scritto:
> Questa successione numerica definita per ricorrenza deve dare ovviamente sempre lo stesso valore per ogni termine ( cioè sempre 1/77) , invece da tutti valori diversi!
....
> double s = 1.0/77.0;
...
> for (int i = 1; i <= n; ++i)
> {
> System.out.print(s + " x ");
>
> double r = 78.0 * s - 1;
> s = r;
>
> }
....
"Deve" è una parola forte. Meglio dire:
dovrebbe dare lo stesso valore SE l'aritmetica floating point dei
computer fosse la stessa dei razionali della matematica.
Ma non è così.
Benvenuto nel mondo dei floating point con un numero limitato di bit!
1.0/77.0 non è rappresentabile esattamente con un numero finito di cifre
binarie. Ergo, la rappresentazione binaria introduce un'approssimazione
a livello delle ultime cifre sgnificative che la tua successione
amplifica rapidamente.
Per saperne di più:
https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
Giorgio
PS il tutto è indipendente dal linguaggio!