000
17.01.2008, 20:25 Uhr
~amsel
Gast
|
Hallo an alle,
ich möchte den Binomialkoeffizienten von relativ großen zahlen erreichnen. Dazu habe ich von https://sourceforge.net/project/showfiles.php?group_id=130028 mir die BigInt Klasse runtergeladen. Kann damit auch einige große Zahlen Multiplizieren und dividieren. Doch bei meiner Version vom Binomialkoeffizienten tretten abundzu Fehler auf. Diese jedoch nur bei bestimmten Parametern. Hier ersteinmal 2 Versionen meiner Funktion:
Version 1:
C++: |
RossiBigInt Binkof ( unsigned long b1, unsigned long b2) { RossiBigInt p1(0), p2(0) ,p3(0), p4(0), erg(0); unsigned int b3; p1=Faku(b1); cout<<"\nn!= "<<p1; p2=Faku(b2); cout<<"\nk!= "<<p2; b3=b1-b2; p3=Faku(b3); p4=p2*p3; cout<<"\nk!*(n-k)!= "<<p4; erg = p1 / p4; cout<<"\nerg= "<<erg; return p1; }
|
Version 2:
C++: |
RossiBigInt Binkof ( unsigned long b1, unsigned long b2) unsigned long b3, b4; RossiBigInt p1(1), p2(0), erg (0); b3= b1-b2; if (b3<b2){b4=b2;} else{b4=b3;b3=b2;} cout <<"\tb4= "<<b4<<" b3= "<<b3; for (unsigned long x=b4+1;x<b1+1;x++){ cout <<"\nx= "<<x; p1=p1 * x; } cout<<"\np1= "<<p1; p2=Faku(b3); cout<<"\np2= "<<p2; erg=p1 /p2; cout<<"\nerg= "<<erg; return erg; }
|
In der Funktion verwende ich noch meine Funktion Faku:
C++: |
RossiBigInt Faku(unsigned long f) { RossiBigInt erg(1); RossiBigInt t(0); for (int x=0;x<f;x++){ t++; erg=erg*t; } return erg; }
|
Bei der ersten Version bekomme ich den Fehler mit den Parametern b1=50, b2=20 und in der 2 Version bei b1=50, b2=21.
Leider gibt es auch Parameter die in beiden Funktionen zum Fehler führen. Aber zb. b1=500, b2=250 funktioniert (bei einer auf alle fälle, ob bei beiden bin ich mir gerade nciht sicher).
ich habe Windows XP prof und benutze MSVS2005 prof.
Der Fehler tritt jedesmal bei der division zur berrechnung von erg auf.
Kann mir vielleicht jemand sagen wo mein Fehler ist oder wo ich suchen kann?
Ich habe keine Idee und sehe es nicht. Wenn noch irgendwelche notwendigen Infos fehlen dann bitte bescheidsagen.
Riesendankeschön für jeden Tipp
amsel |