C# Parse longer number than ulong?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Wenn es sich um eine Ganzzahl handelt , gibt es [BigInt].

Währen [Double] bei sehr großen Zahlen nur mit Rundung bis zu 308 Stellen aufnehmen kann, nimmt eine BigInteger-Struktur real bis zu 2.147.483.647 Stellen haben. (Begrenzung von .Net bzgl. Max Stringlengt)

Die Übergabe einer solchen Zahl an eine Variable erfolgt als String.

bigint x = "345776432356788543335678888909976543332278899"

Auch wenn man mit bigint ganz normal +-*/ rechnen kann , empfiehlt sich das Rechnen mit den zugehörigen Methoden . https://docs.microsoft.com/en-us/dotnet/api/system.numerics.biginteger?view=net-5.0#methods

Gerade wenn man mit potentiellen "Nachkommastellen" teilen will ist DivRem unverzichtbar. (Liefert Rest)

Ich hatte vor kurzem ein Powershell-Skript zum Thema Fakultät geschrieben: https://www.gutefrage.net/frage/fakultaet-berechnen-programm-per-cmd#answer-389199199

Geschwindigkeitsrekorde musst Du von Biginterge-Aritmetik nicht erwarten.

Aber wenn man Zeit hat kann man locker mal eine Fakultät 1000000! berechnen. (Ausgabe in Datei, schreiben, das Ergebnis passt nicht in den Conolenbuffer🤪) Wie gesagt , Bigint ist bis zu 2.147.483.647 Stellen genau.

Das Powershell arbeitet ganz normal mit .Net.

Um einfach mal mit solchen Sachen zu Experimentieren brauchst du nicht mit C# zu compilieren...

Einfach mit Powershell oder Powershell-ISE on the Fly testen...

double - ist Fließkommazahl und hat einen Höchstwert von 1.7976931348623157E+308
Das sollte eigentlich reichen :D

Ansonsten gibt's noch BigInteger-Struktur, die ist theoretisch unbegrenzt.

Woher ich das weiß:Berufserfahrung

Erzesel  05.03.2021, 18:28

Wenn du eine schöne große Fakultät berechnen willst, wird jedes Ergebnis über 16 Stellen sehr ungenau, da ab dieser Länge gerundet wird...

1

dafür gibts Bibliotheken mit Langzahl Arithmetik.