Fakultät in c

01/31/2013 17:26 Blackbeach#1
Unzwar versuche ich die Fakultät von Zahlen größer 12 auszurechnen jedoch kommt da nur quark raus..

zur zeit sieht meine formel wie folgt aus..


unsigned long long fakul(int n){

if(n <= 1){
return 1;
}
else{
return n*fakul(n-1);
}
}

bis zu einem bestimmten wert kriege ich vernünftige werte raus aber ab höheren zahlbereichen klappt es leider nicht so gut..

würde mich über schnelle hilfen freuen..
01/31/2013 17:44 nkkk#2
der code ist absolut richtig. wahrscheinlich castest du irgendwo zu int, das geht natürlich nicht weil 13! so gross ist das es in int nicht mehr reinpasst.
01/31/2013 17:51 Raz9r#3
Der Datentyp unsigned long long ist i.d.R. 64 Bit lang und da unsigned kann er Werte bis maximal 2^64 - 1 = 18446744073709551615 darstellen

Es gilt:
factorial(20) < 2^64 - 1 < factorial(21)

Kurz gesagt heißt das, dass du mit dem Datentyp unsigned long long nur Fakultäten bis einschließlich 20! darstellen kannst, alles weitere würde einen Überlauf ergeben und damit nicht mehr den richtigen Wert.
01/31/2013 17:56 snow#4
Unter OS X ging das sogar bis 60! oder so. :o

@Blackbeach: Code sollte soweit korrekt sein, liegt dann wohl daran, dass die Zahlen zu groß werden..
Ab welcher Fakultät fängt das Programm denn an, falsche Ergebnisse auszuspucken?
01/31/2013 18:01 Blackbeach#5
hab mein problem gefunden^^ trotzdem danke für die schnelle hilfe. :)


bitte einmal closen :)