Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Java
You last visited: Today at 21:33

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Frage: Quadratwurzel mit annährungsvariable

Discussion on Frage: Quadratwurzel mit annährungsvariable within the Java forum part of the Coders Den category.

Reply
 
Old   #1
 
LenoxArt's's Avatar
 
elite*gold: 0
Join Date: Aug 2011
Posts: 619
Received Thanks: 140
Frage: Quadratwurzel mit annährungsvariable

Hallo Leute,

bin in meinem Studium noch recht frisch in Java drin. Bisher konnte ich alle Aufgaben lösen aber folgende zerstört irgendwie mein Hirn ^^.


Code:
Schreiben Sie ein Programm, welches die Quadratwurzel einer positiven Fließkommazahl näherungs-
weise bestimmt. In Ihrem Programm soll die Genauigkeit, mit der Sie das Ergebnis ermitteln wollen, 
variabel sein und in einer Variablen (z.B. 
double precision = 0.1;
) 
angegeben werden.
Ich versteh nicht genau wie ich die Aufgaben angehen soll.
In einer vorigen Aufgabe musste man feststellen ob eine angebene Zahl eine Quadratwurzel ist oder nicht. Das war recht easy mit der Math.sqrt() funktion und anschließender multiplikation der errechneten Wurzel..

Hoffe ihr könnt mir hier vielleicht etwas auf die Sprünge helfen :/

Hier bspw. wie die Aufgabe der vorigen Woche gelöst wurde von mir.
Code:
                // Einsen in Binär
		System.out.println(Integer.toBinaryString(x));
		System.out.println("Es sind "+Integer.bitCount(x)+" Einsen in der Binärdarstellung vorhanden");
		
		// Quadratzahl testen
		quadz = (int) Math.sqrt(x);
		tmpQ = quadz*quadz;
		if(tmpQ == x) {
			System.out.println("Die Zahl "+x+" ist eine Quadratzahl");
			System.out.println("Quadratwurzel aus "+x+" ist :"+ quadz);
		}
		else {
			System.out.println("Die Zahl "+x+" ist keine Quadratzahl");
		}
		
		// Kubikzahl testen
		kubik = Math.cbrt(x);
		tmpK = kubik*kubik*kubik;
		if(tmpK == x) {
			System.out.println("Die Zahl "+x+" ist eine Kubikzahl");
			System.out.println("Kubikwurzel aus "+x+" ist :"+ kubik);
		}
		else {
			System.out.println("Die Zahl "+x+" ist keine Kubikzahl");
		}
LenoxArt's is offline  
Old 11/13/2018, 17:35   #2
 
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,487
Im Gegensatz zu einigen anderen mathematischen Problemen, lässt sich die Quadratwurzel einer Zahl nicht mit einem einfachen Rechenschritt bestimmen. In der Tat sind alle Implementationen der Funktion Sqrt() nur Näherungsverfahren, manchmal auch unterstützt durch Tabellen damit man nicht zu viel rechnen muss.

Du könntest zum Beispiel ein "eigenes" erfinden. Wie wäre es mit Stumpf ausprobieren. Fang beim Wert der Genauigkeit an und zähle solange in Schritten der Genauigkeit hoch, bis die Quadrierung der Zahl entweder genau der gesuchten Zahl entspricht, oder sich wieder davon entfernt.
Das dieses Verfahren weniger Optimal ist, kannst du dir sicher denken. Schließlich ist die Ausführungszeit Maßgeblich von der effektiven Größe der Zahl und der verwendeten Genauigkeit abhängig. Nichtsdesto trotz ist es ein Näherungsverfahren und da in der Aufgabenstellung nicht explizit gesagt ist, dass es gut sein müss, würde ich behaupten das gilt ;D. Falls das zu meiner Tutorenzeit einer meiner Studis hinbekommen hätte, wäre ich jedenfalls glücklich gewesen ;D.

Ein wenig Klüger ist z.B. das Heron-Verfahren.
> https://de.wikipedia.org/wiki/Heron-Verfahren
Hier kann in nur wenigen Schritten eine hohe Genauigkeit erzielt werden.

Falls du Angst vor Mathe hast, schau dir am Besten nur an, wie das Beispiel funktioniert. Das Ganze ist eine Iterationsgleichung, du brauchst also eine Schleife oder eine Rekursion dafür.
Die Genauigkeit an der Stelle beschreibt die "Änderung von X pro Iteration".

Nachtrag: Just for the lulz hab ich das mal in meiner Lieblingssoftware Matlab () gebaut, weil man da so schön Zeit messen kann.
florian0 is offline  
Thanks
1 User
Old 11/13/2018, 21:28   #3
 
LenoxArt's's Avatar
 
elite*gold: 0
Join Date: Aug 2011
Posts: 619
Received Thanks: 140
Danke dir, tatsächlich steht in der Überschrift der Aufgabe auch drin, dass es mit Schleifen gelöst werden soll.
Was mich an der Aufgabe nur verwundert, dass diese die Komplexität aller vorigen Aufgaben (inklusive Bonusaufgaben) sowie den Rest des Aufgabenblattes übertrifft
Ich schau mir dieses Heron verfahren mal an

Quote:
Originally Posted by florian0 View Post
Im Gegensatz zu einigen anderen mathematischen Problemen, lässt sich die Quadratwurzel einer Zahl nicht mit einem einfachen Rechenschritt bestimmen. In der Tat sind alle Implementationen der Funktion Sqrt() nur Näherungsverfahren, manchmal auch unterstützt durch Tabellen damit man nicht zu viel rechnen muss.

Du könntest zum Beispiel ein "eigenes" erfinden. Wie wäre es mit Stumpf ausprobieren. Fang beim Wert der Genauigkeit an und zähle solange in Schritten der Genauigkeit hoch, bis die Quadrierung der Zahl entweder genau der gesuchten Zahl entspricht, oder sich wieder davon entfernt.
Das dieses Verfahren weniger Optimal ist, kannst du dir sicher denken. Schließlich ist die Ausführungszeit Maßgeblich von der effektiven Größe der Zahl und der verwendeten Genauigkeit abhängig. Nichtsdesto trotz ist es ein Näherungsverfahren und da in der Aufgabenstellung nicht explizit gesagt ist, dass es gut sein müss, würde ich behaupten das gilt ;D. Falls das zu meiner Tutorenzeit einer meiner Studis hinbekommen hätte, wäre ich jedenfalls glücklich gewesen ;D.

Ein wenig Klüger ist z.B. das Heron-Verfahren.
> https://de.wikipedia.org/wiki/Heron-Verfahren
Hier kann in nur wenigen Schritten eine hohe Genauigkeit erzielt werden.

Falls du Angst vor Mathe hast, schau dir am Besten nur an, wie das Beispiel funktioniert. Das Ganze ist eine Iterationsgleichung, du brauchst also eine Schleife oder eine Rekursion dafür.
Die Genauigkeit an der Stelle beschreibt die "Änderung von X pro Iteration".

Nachtrag: Just for the lulz hab ich das mal in meiner Lieblingssoftware Matlab () gebaut, weil man da so schön Zeit messen kann.

Habs jetzt so gelöst, danke dir !
Code:
import java.util.*;

public class Quadratwurzel {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//Initialisierung
		
		Scanner einlesen = new Scanner(System.in);
		double ausgabe, zahl, precision;
		
		// Einlesen
		
		System.out.println("Bitte geben Sie eine Zahl ein: ");
		zahl = einlesen.nextDouble();
		System.out.println("Bitte geben Sie die Präzision ein: ");
		precision = einlesen.nextDouble();
		
		// Ausgeben
		
		ausgabe = square(zahl, precision);
		System.out.println(ausgabe);

	}
	
	public static double square (double x, double precision) {
		double a = x;
		double b = precision;
		
		for(int i=1; i<= 100; i++) {
			b = (a+b)/2;
			a = x/b;
			System.out.println(a);
		}
		
		return a;
		
		
	}

}
LenoxArt's is offline  
Reply


Similar Threads Similar Threads
FRAGE FRAGE FRAGE FRAGE FRAGE FRAGE FRAGE
03/21/2011 - Technical Support - 5 Replies
Hi Leute, Habe ein Problem mit meinen PC. Habe Win 7 drauf will ihn formatieren also komlett reseten auf werkseinstellungen. Eine Recovery CD ist net dabei ( ist ein Notebook falls es wichtig ist xD ). Habe es mit dem format c probiert dann klick ich das an öffnet sich nur ein schwarzes kleines fenster das sich sofort wieder schließt. Wahrscheinlich falsche ruprik für solche probleme verschiebt mich einfach xDD. Danke im Vorraus ;) MFG
FRAGE*FRAGE*FRAGE*FRAGE PLS!!
10/05/2010 - WarRock Trading - 1 Replies
Hey lieber Com, unzwar habe ich mal eine frage an euch... Wenn man z.B premium silber für 13 tage noch hat,und dann gold premium kauft ist dann das silber premium weg?:confused::confused::confused:
! FRAGE FRAGE FRAGE !
09/13/2010 - Metin2 Trading - 6 Replies
Hi ich scueh eine person, die mir einen P-Server der über Hamachi läuft per Team Viewer erstellt... Ich habe die Serverfiles von computerkrank gedownlaodet... Nur bekomme ich es nicht hin damit einen Server zu erstellen Als Belohnung gibt es 10€ Paysafecard



All times are GMT +1. The time now is 21:35.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.