Ich habe eine Anwendung, mit der ich große Zahlen und sehr genaue Zahlen verwenden kann. Dafür brauchte ich eine präzise Interpretation und IntX funktioniert nur für Ganzzahlen.
Gibt es eine Klasse im .net-Framework oder sogar eine dritte Partei (vorzugsweise frei), die das tun würde?
Gibt es einen anderen Weg, dies zu tun?
Sie können die frei verfügbare, willkürliche Genauigkeit verwenden, BigDecimal from java.math
, welches Teil der ist J # redistributable package von Microsoft und ist eine verwaltete .NET-Bibliothek.
Platzieren Sie einen Verweis auf vjslib in Ihrem Projekt und Sie können etwas wie folgt:
%Vor%Gibt Folgendes für die Debug-Konsole aus:
1234567890123456789011223344556677889901.0000009876543210000987654321
Beachten Sie, dass .NET 2010 wie bereits erwähnt eine BigInteger Klasse enthält in der Tat war es bereits in früheren Versionen verfügbar, aber nur als interne Klasse (dh Sie brauchen etwas Reflexion, um es zum Laufen zu bringen).
Wenn Decimal für Sie nicht funktioniert, versuchen Sie, Code von irgendwo zu implementieren oder zu verwenden. Rational
arithmetic verwendet große Ganzzahlen. Das liefert die Präzision, die Sie brauchen.
Ich habe lange nach einer Lösung gesucht und bin heute auf diese Bibliothek gestoßen:
Vierfaches Präzisionsdoppel in C #
Signierte 128-Bit-Fließkomma-Datentypbibliothek mit 64 effektiven Bits Genauigkeit (vs. 53 für Doubles) und einem 64-Bit-Exponenten (vs. 11 für Doubles). Quads haben eine größere Genauigkeit und eine größere Reichweite als Doubles und sind besonders nützlich, wenn sie mit sehr großen oder sehr kleinen Werten arbeiten, wie sie in probabilistischen Modellen verwendet werden. Ab Version 2.0 werden alle Quad-Arithmetik überprüft (unterläuft 0, überläuft bis +/- unendlich), hat spezielle PositiveInfinity-, NegativeInfinity- und NaN-Werte und folgt denselben Regeln wie .Net Doppelarithmetik- und Vergleichsoperatoren (zB 1 / 0 == PositiveInfinity, 0 * PositiveInfinity == NaN, NaN! = NaN), was es zu einem bequemen Drop-In-Ersatz für Doubles im bestehenden Code macht.
Dezimal ist ein 128-Bit (16 Byte) Werttyp, der für hochpräzise Berechnungen verwendet wird. Es ist ein Fließkommatyp, der intern als Basis 10 anstelle von Basis 2 (d. H. Binär) dargestellt wird. Wenn Sie sehr präzise sein müssen, sollten Sie Dezimal verwenden - aber der Nachteil ist, dass Dezimal 20 mal langsamer ist als die Verwendung von Schwimmern.