Ich schreibe eine Klasse, die eine genaue Unterteilung der BigInteger-Klasse in C # benötigt.
Beispiel:
%Vor%Das Problem ist, dass es eine Integer ist, natürlich hält es keine Dezimalwerte. Wie kann ich das überwinden, um das reale Ergebnis von 0,5 zu erhalten (gegebenes Beispiel).
P.S. Die Lösung muss in der Lage sein, jeden BigInteger genau zu teilen, nicht nur das Beispiel!
Im obigen Beispiel sind die Zahlen immer noch klein genug, um in double
konvertiert zu werden. In diesem Fall können Sie also
Wenn x
und y
für ein double
zu groß sind, aber immer noch vergleichbar, ist dieser tolle Trick vielleicht hilfreich:
Aber im Allgemeinen, wenn die BigInteger
sehr groß sind und ihr Quotient ebenfalls sehr groß ist, ist dies ohne den Import einer Drittanbieter-Bibliothek schwer zu bewerkstelligen.
Wenn Sie die volle Genauigkeit beibehalten möchten, verwenden Sie eine Implementierung von rationalen Elementen (das Java-Äquivalent wäre die Fraction-Klasse aus der Apache Commons Math-Bibliothek). Es gibt verschiedene Implementierungen, die herumlungern, aber die leichteste Lösung für .NET 4.0 (wie es System.Numerics.BigInteger eingebaut hat) wäre die folgende:
%Vor%Damit dies funktioniert, benötigen Sie den System.Numbers.BigInteger von .Net 4.0 System.Numerics.dll und dem BigRational Implementierung von CodePlex.
Es gibt eine Rational-Struktur auch in der Microsoft Solver Foundation 3.0 implementiert. Zum Zeitpunkt des Schreibens war die Website www.solverfoundation.com defekt, daher ein Link zum Archiv.
Wie Sie vielleicht wissen, wird die Division von Ganzzahlen keine Dezimalwerte ergeben, daher wird Ihr Ergebnis auf 0 gekürzt. Nach diese Frage große Doppel-Implementierung finden Sie hier , aber die letzte Version davon war im Jahr 2009. Wenn Sie schauen weiter können Sie einen neueren finden oder dieser ist einfach fertig.
Klingt wie ein Job für Fixed Point (anstatt Fließkomma).
Verschieben Sie den Zähler einfach um die Anzahl der benötigten Teilbits wie folgt:
%Vor%Das würde 10 Bits nach dem Punkt geben (ungefähr 3 Dezimalstellen).
Tags und Links biginteger .net c# division