Obliczanie średniej geometrycznej - wynik NaN

0
import java.util.Scanner;

public class SredniaGeometryczna {
	public static double obliczPierwistekNStopnia(double a, int n){
		double wynik=0;
		//x^n-1
		double temp = Math.pow(wynik, n-1);
		double e = 0.000000001;
		while (Math.abs(a - temp*wynik) >= e)
		{
			wynik = 1/n*((n-1)*wynik + (a/temp));//nowe przyblizenie
			temp = Math.pow(wynik, n-1);
		}
		return wynik;
	}
	public static void main(String[] args) {
		int iloscLiczb = 0;
		double iloczyn = 1;
		double sredniaGeometryczna = 0;
		String input="";
		while(true){
			Scanner sc = new Scanner(System.in);
			System.out.println("Aby przerwać nacisnij k.\n Podaj liczbe: ");
			input = sc.nextLine();
			if(input.equals("k")){
				System.out.println("Zakonczyles podawanie liczb.");
				break;
			}
				
			else{
				iloczyn *= Integer.parseInt(input);
				iloscLiczb++;
			}
			
		}
		sredniaGeometryczna = obliczPierwistekNStopnia(iloczyn, iloscLiczb);
		System.out.println("Iloczyn liczb: " + iloczyn);
		System.out.println("Średnia geometryczna: " + sredniaGeometryczna);
		//Średnia geometryczna n liczb, to pierwiastek n-tego stopnia z iloczynu tych liczb.
	}
}
Aby przerwać nacisnij k.
 Podaj liczbe: 
4
Aby przerwać nacisnij k.
 Podaj liczbe: 
5
Aby przerwać nacisnij k.
 Podaj liczbe: 
5
Aby przerwać nacisnij k.
 Podaj liczbe: 
9
Aby przerwać nacisnij k.
 Podaj liczbe: 
k
Zakonczyles podawanie liczb.
Iloczyn liczb: 900.0
Średnia geometryczna: NaN

Powinno wyjść około 3.9. Jak to poprawić ?

poprawienie znaczników <code> - fp

1

Pewnie gdzieś dzielisz przez 0 :)

0

Zagadka - jaką wartość ma "temp" przy obracaniu nią w instrukcji "while"?

3

Dlaczego tak skomplikowanie liczysz pierwiastek?

sredniaGeometryczna = Math.pow(iloczyn, 1.0/iloscLiczb);
0

A jeszcze prostsze i bezpieczniejsze policzyć wg:
ŚredniaGeometryczna(T)=exp(Avg(log(T))
Prawdopodobnie chodzi o to że iloczyn jest zbyt duży dla wybranego typu, zaś powyższy sposób eliminuje tą wadę.

0

może problem z funkcją parseInt() ? użyj Match.floor() albo parseInt(int,10)

1 użytkowników online, w tym zalogowanych: 0, gości: 1