Buongiorno a tutti,
vi posto i due file Java(due classi) che implementano l'algoritmo di Archimede tramite una funzione ricorsiva.
codice:
import java.math.BigDecimal;
import java.math.BigInteger;
public class PGreco {
private long N;
private void setMax(long N){
this.N = N;
}
PGreco(long n) {
setMax(n);
}
double Pi(double l, long n) {
//Formula per il calcolo del lato del poligono con 2n lati
//a partire da quello di n lati (esagono)
//l = Math.sqrt(2 - Math.sqrt(4 - l * l));
//Razionalizzando diventa:
l = l / Math.sqrt(2 + Math.sqrt(4 - l * l));
if (n>2)
return Pi(l, n/2);
else {
double P = 6 * l * N;
return P;
}
}
void stampa(){
double l = Math.sqrt(2-Math.sqrt(3));
System.out.println( Pi(l, N) );
}
}
class Calcolo {
public static void main(String[] args) {
long n = (long)Math.pow(2,15000);
new PGreco(n).stampa();
}
}
MI chiedo se con l'uso di BigDecimal é possibile ricavare teoricamente un buon numero di cifre.
Tuttavia non saprei come eseguire la radice quadrata...Forse uso Java 8....
Avrei un'altra domanda: E' consigliabile la ricorsione o meglio il ciclo iterativo?