Ich muss herausfinden, welcher von zwei Brüchen größer als der andere ist. Die Bruchstruktur enthält long
Werte für Zähler und Nenner.Korrekte Art, lange Werte zu multiplizieren
Der naive Ansatz ist wie folgt:
try
{
checked
{
long a = fraction1.Numerator * fraction2.Denominator;
long b = fraction2.Numerator * fraction1.Denominator;
return a.CompareTo(b);
}
}
catch
{
throw new Exception("CompareTo failed");
}
Dies funktioniert für eine Vielzahl von Fällen, in Ordnung, aber durch einen anderen Datentyp für a
und b
die Menge der Fälle Wahl, wo eine Ausnahme reduziert kann ausgelöst werden .
Welcher Datentyp wäre eine gute Wahl (vorzugsweise ohne zusätzliche Bibliotheken)? decimal
? BigInteger
?
'decimal' oder' BigInteger' funktionieren würde, aber nur 'decimal' ist im Rahmen ohne zusätzliche Referenzen, natürlich. –
Um im Bereich von 'Dezimal' zu bleiben, ist die größte Zahl, die ich" quadrieren kann "281,474976,710656, die viel kleiner ist als' long.MaxValue' = 9223372,036854,775807 – David
Whoops - ja, sprach viel zu früh . Das tut mir leid. BigInteger oder zu einem anderen Ansatz wechseln, z. gemeinsame Faktoren finden. –