Hallo,
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 äußerte hier mich zu einem Überlauf allgemein, nicht zur Fakultätsberechnung. Ich bezog mich explizit auf signed int.
Wenn ich das jetzt in einer weiteren Schleife (die von 1-39 zählt) aufrufe kommen folgende Ergebnisse:
die ich ein klein wenig ergänze:
Zweierpotenz Zweierpotenz
im Faktor im Produkt
1: 1
2: 2 1 1
3: 6
4: 24 2 3
5: 120
6: 720 1 4
7: 5040
8: 40320 3 7
9: 362880
10: 3628800 1 8
11: 39916800
12: 479001600 2 10
13: 1932053504
14: 1278945280 1 11
15: 2004310016
16: 2004189184 4 15
17: 4006445056
18: 3396534272 1 16
19: 109641728
20: 2192834560 2 18
21: 3099852800
22: 3772252160 1 19
23: 862453760
24: 3519021056 3 22
25: 2076180480
26: 2441084928 1 23
27: 1484783616
28: 2919235584 2 25
29: 3053453312
30: 1409286144 1 26
31: 738197504
32: 2147483648 5 31
33: 2147483648
34: 0 1 32
35: 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.
Nicht zufällig.
Jede Multiplikation mit einer Zahl, die eine Zweierpotenz als Teiler hat, führt dazu, dass sich die Anzahl der niederwertigsten Nullbits entsprechend erhöht. Ist 2^32 als Teiler enthalten, so sind alle 32 Bits einer 32-Bit-Integer aufgebraucht, siehe beigefügte Angaben.
Freundliche Grüße
Vinzenz