Hi,
Hello,
Was mich aber noch ein wenig verwundert ist, dass bei einem stattgefundenen Überlauf immer 0 herauskommt.
Immer? Bist Du Dir sicher?
Bei unsigned int als Faktoren
Mit negativen Zahlen sind Fakultäten ja nicht definiert.
Ich hab mal eine kleine Routine geschrieben, in der ich die Fakultät in einer Subroutine mit einer for-Schleife ausrechnen lasse:
unsigned int fak(unsigned int b)
{
unsigned int a = 1;
for(unsigned int i = 1; i < b; i++)
{
a *= i;
}
return a;
}
Wenn ich das jetzt in einer weiteren Schleife (die von 1-39 zählt) aufrufe kommen folgende Ergebnisse:
1: 1
2: 2
3: 6
4: 24
5: 120
6: 720
7: 5040
8: 40320
9: 362880
10: 3628800
11: 39916800
12: 479001600
13: 1932053504
14: 1278945280
15: 2004310016
16: 2004189184
17: 4006445056
18: 3396534272
19: 109641728
20: 2192834560
21: 3099852800
22: 3772252160
23: 862453760
24: 3519021056
25: 2076180480
26: 2441084928
27: 1484783616
28: 2919235584
29: 3053453312
30: 1409286144
31: 738197504
32: 2147483648
33: 2147483648
34: 0
35: 0
36: 0
37: 0
38: 0
39: 0
Ab 35 kommt 0, man sieht aber, dass der Überlauf schon viel früher stattgefunden hat. Es gibt wohl eher bei 34 zufällig einen Überlauf, so dass genau 0 rauskommt. Wenn man dann noch was damit multipliziert bleibt das Ergebnis natürlich immer 0.
Verwendeter Compiler: G++ 4.2.3 unter Ubuntu
mfG,
steckl