Potenzieren ohne pow() - 5^(2k+1)
-
Hallo zusammen,
während meiner Klausurvorbereitung bleibe ich die ganze Zeit bei der folgenden Aufgabe hängen:
Es muss eine unendliche Reihe von k = 0 gerechnet werden bis die Rechnergenauigkeit erreicht wurde, also das neue und das alte Ergebnis sich nicht mehr unterscheiden.
Dabei kommt unter anderem in einem Zähler der Term 5^(2k+1) vor.
Wie soll ich jetzt mit so etwas vorgehen ohne die Funktion pow() anzuwenden? Dies führ nämlich in der Klausur zu Punktabzug.Einerseits brauche ich für die Summe/Reihe ja schon eine Schleife und in dieser Schleife muss ich irgendwie noch die Potenz berechnen...
Hier ist die Reihe, um die es geht:
[url]http://up.picr.de/32155578je.jpg
-
1. du könntest eine eigene Funktion mit einer Schleife schreiben.
oder
2. du rechnest mit dem Wert, den du noch vom vorhergehenden Durchlauf hast weiter.
-
Wenn du das iterativ berechnest, benötigst du in den aufeinanderfolgenden Schleifendurchläufen die Werte 1/5, 1/5^3, 1/5^5, ... Du könntest also einfach eine Variable für diese 5er-Potenzen am Anfang mit 1/5.0 initialisieren und in jedem Durchlauf durch 25 teilen.
-
wenn das alles int sind, also int = pow(int, int)
dann schau mal hier:
https://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int
-
Ich habe das Prinzip glaube ich verstanden, allerdings gibt er noch nicht das richtige Ergebnis aus:
#include <math.h> #include <stdio.h> int main() { double neu,alt,k,z1,z2,nenner; int i=0; neu=4./5-1./239; nenner=-1; z1=5*5*5; z2=239*239*239; k=1; do { alt=neu; neu=(nenner/(2*k+1)) * (4./z1-1./z2); z1=z1*5*5; z2=z2*239*239; nenner=nenner*(-1); k=k+1; i=i+1; } while(neu!=alt); printf("Anzahl der Summanden = %d\n",i+1); printf("Pi Machin = %lf\n",4*neu); printf("Pi arctan = %.16lf\n",4*atan(1.)); return 0; }
-
Okay hab es jetzt sofort schon selbst gesehen, musste nur noch neu = neu + ... usw. schreiben da es sich ja um eine Reihe handelt