Wurzel mit Heronverfahren und Genauigkeit berechnen
-
Oh stimmt... Danke. Wieder viel zu kompliziert gedacht.
Aber es müsste doch if(y>=0) sein oder? Also der Exponent :xmas1:
-
Roger292 schrieb:
Aber es müsste doch if(y>=0) sein oder? Also der Exponent :xmas1:
Klar. :xmas1:
-
#include <stdio.h> double wurzel(double zahl, double genau); double selfpow(double x, int y); double fullpow(double x, int y); int main() { double zahl = 0; double genau = 0; printf("%lf\n",selfpow(10.0,1)); printf("Bitte Zahl eingeben, deren Wurzel berechnet werden soll:\n"); scanf("%lf",&zahl); printf("\n\nBitte Anzahl der gültigen Stellen hinter dem Komma eingeben:\n"); scanf("%lf",&genau); printf("Die Wurzel von %lf ist %lf.\n\n",zahl,wurzel(zahl,genau)); return 0; } double wurzel(double zahl,double genau) { double x = zahl; double xn = 2*zahl; while((xn-x)>(fullpow(10.0,-genau))) { xn=x; x=1.0/2.0*(xn+(zahl/xn)); }; return x; } double selfpow(double x, int y) { int i= 1; while(i<y) { x*=x; i++; }; return x; } double fullpow(double x, int y) { if(y>=0) return selfpow(double x, int y); else return 1.0/selfpow(double x, int y); }
Danke danke hier ist jez der Code, aber mein Compiler meckert rum, das da unten ne ) vor Typ fehlen würde und, dass bei fullpow nicht genügend Argumente für den Aufruf von selfpow vorhanden sind.
-
Schon gefunden
Hatte die vollständige deklaration da unten mit int und double xD
Ich danke euch :). Wie immer sehr hilfsbereit und informativ auch bei dummen Fehlern. Dann mach ich mich mal an die Nullstellenberechnung von x^5-x-1 yay
aber ich bin optimistisch.^^
-
Dein selfpow rechnet aber nicht richtig.
Für selfpow(2,3) kommt 16 raus.
-
Och neee -.- hmm wo isn der Fehler?
Achja und wenn ich z.b.
printf("Die Wurzel von %lf ist %.2lf.\n\n",zahl,wurzel(zahl,genau));
hab, dann ist die Genauigkeit in der Ausgabe durch das .2 definiert. Wie kann ich dort denn den Wert von der variablen genau einsetzen?
EDIT: Wahrscheinlich wegen x*=x oder DirkB?
Ok habs verbessert:
double selfpow(double x, int y) { int i= 1; double xneu = x ; while(i<y) { xneu*=x; i++; }; return xneu; }
Aber warum gibt er mir folgende Ausgabe für printf("%lf",selfpow(2,3));
8.0000000.000000?????
-
%lf bei printf ist auch falsch.
-
Warum? Rückgabewert von selfpow ist ein double.
-
Du hast printf() und nicht scanf(). Da gibt es Unterschiede.
%f steht bei printf() für double und float.Das liegt daran, dass printf() eine variable Argumentenliste hat. Da wird float auf double erweitert.
-
aha... Ok das wusste ich nich.
Wenn ich jez
printf("Die Wurzel von %f ist %.2f.\n\n",zahl,wurzel(zahl,genau));
hab, dann ist die Genauigkeit in der Ausgabe durch das .2 definiert. Wie kann ich dort denn den Wert von der Variablen "genau" einsetzen?
Könnt ihr mir da helfen? :xmas2:
-
Ganz so einfach ist das nicht, denn genau ist eine Fließkommazahl.
Du kannst aber mit dem *printf("Die Wurzel von %f ist %.*f.\n\n",zahl,2,wurzel(zahl,genau));
die Anzahl der Stellen mit einer Integerzahl/variablen angeben (hier die 2).
Du musst jetzt nur noch aus genau die Anzahl der Stellen berechnen (oder umgekehrt)