Doubele in Bruch konvergieren Matheproblem: (Kettenbruchentwicklung)
-
Hallo liebe Leute!
Leider bin ich auch nicht nach vielen Versuchen und mehrmaligen ausprobieren auf den Fehler in meiner Klasse gekommen. Dieses Problem ist ein mathematisches.
Ich habe Eine Klasse geschrieben die mit Brüchen rechnet und auch doubles in Brüche konvergieren soll aber leider bekomme ich nur Müll wenn ich die Kettenbruchentwicklung anwenden will.Ich poste den relevanten Konstruktor und auf Nachfrage gerne auch die ganze Klasse. Ich hoffe Ihr könnt mir helfen.
Standardkonstruktor:
Fraction::Fraction(long Zaehler, long Nenner) throw (Fraction::DivisionByZero);Hier der double Konstruktor:
Fraction::Fraction(double a) throw (Fraction::domain_error) { /////Errorhandling ist noch nicht implementiert! const short aprox=10; long vec[aprox],i=1; Fraction temp; //Kettenbruchentwicklung: vec[0]=floor(a); a-=floor(a); while(i<aprox && floor(a*1000.0)!=0.0) { a=pow(a,-1.0); vec[i]=floor(a); a-=floor(a); i++; } //Kettenbruchentwicklung_Ende if(i>1) { //////////////////PROBLEMATISCHER_TEIL////////////////////////// temp=Fraction(vec[i-1],1L)+Fraction(1L,vec[i]); i-=2; while (i>0) { temp=Fraction(vec[i],1L)+Fraction(1L,1L)/temp; --i; } nenner=temp.nenner;zaehler=temp.zaehler; //////////////////PROBLEMATISCHER_TEIL_ENDE///////////////////// } else {zaehler=vec[0]; nenner=1;} }Es ist wahrscheinlich nur ein Denkfehler.
Danke schon mal im voraus.
-
Markuhn schrieb:
//////////////////PROBLEMATISCHER_TEIL////////////////////////// temp=Fraction(vec[i-1],1L)+Fraction(1L,vec[i]);vec[i] ist hier uninitialisiert.
-
Hallo Markuhn,
Willkommen im C++-Forum.
Zu diesem Thema hatte ich bereits 2007 einen Beitrag verfasst (s. Gleitkommazahl in Bruch).
Zu Deinem speziellen Problem: s.Antwort von MFK.Gruß
Werner
-
Danke für die schnellen Antworten. Jetzt funktioniert es so wie ich möchte.

@Werner: Dein Link ist Hammer aber ich muss mir erst die Zeit nehmen den durch zuarbeiten

Liebe Grüße,
Markuhn.