Moin Uwe!
CDec() bezog sich nur auf die mögliche Rechengenauigkeit von 28 Stellen.
Als Beispiel das Schachbrett, auf dem die Anzahl der Reiskörner, mit 1 beginnend, auf jedem Feld verdoppelt wird.
Excel errechnet das falsche:
| A |
1 | falsche Zahl |
2 | 18.446.744.073.709.600.000 |
Mit dem Umweg folgender UDF:
Function Schachbrett() As String
Dim tmpPotenz As Variant
tmpPotenz = CDec(2 ^ 32)
Schachbrett = Format(CStr(CDec(tmpPotenz * tmpPotenz) - 1), "###,###,###,###,###,###,###")
End Function
kann Excel die Pleite des Königs veranschaulichen:
| A |
4 | korrekte Zahl |
5 | 18.446.744.073.709.551.615 |
Zelle | Formel |
A5 | =schachbrett() |
Das hiesige Problem ist ja ein ganz anderes!
Der Modulo-Operator erwartet als Ganzzahl (Dezimalzahlen werden gerundet) einen Long
Dieser ist bereits ab 348^4 überschritten und erzeugt deshalb den Überlauf.
Eine Möglichkeit in Excel ist das von Fennek vorgestellte Gleichungssystem.
Ich bevorzuge bei so etwas zunächst mal Calc.exe :21:
Der jedem Windows-Nutzer bereitgestellte Rechner kommt damit nämlich problemlos klar!
Gruß Ralf