te l'ho snellito ulteriormente:
il ciclo si ripete finché la semi-differenza tra due successivi valori della serie è minore della precisione richiesta (il chè non è proprio la specifica del tuo esercizio)codice:public class PIApprox { // Scegli la precisione static double approx = 10E-4; public static void main (String[] args) { double previous = 0; double current = 0; int i = 0; do { previous = current; current = previous + (4d/(2*i+1))*(i % 2 == 0 ? 1 : -1); i++; } while (Math.abs(previous-current) / 2 > approx); System.out.println("Iterazioni: "+i+"\tValore: "+(current+previous)/2); } }
Quello che avviene nel ciclo stesso è:
- assegno alla variabile che rappresenta il valore "precedente" (previous) nella serie il valore corrente (current) della serie stessa
- calcolo il valore corrente: la roba nella seconda parentesi vuol semplicemente dire che se il resto della divisione i / 2 è 0 (ovvero i è pari) allora il segno sarà positivo, altrimenti negativo. Ed è semplicemente la traduzione della successione di segni nella serie che definisce pigreco. La prima parentesi invece calcola i vari valori (4, 4/3, 4/5, 4/7 ....)
- aumento il contatore delle iterazioni.

Rispondi quotando