2011-01-13 7 views
6

Wie lässt sich der Quotient aus zwei C# BigIntegers am besten bei möglichst hoher Genauigkeit konvertieren? Meine aktuelle Lösung ist:Ermitteln des Quotienten zweier BigIntegers als doppelt

Math.Exp(BigInteger.Log(dividend) - BigInteger.Log(divisor)); 

Ich vermute, das ist suboptimal.

+0

ist es wahrscheinlich nicht! Wenn du am Ende Doppelgänger willst, denke ich, dass es der beste Weg ist. Wenn Sie Gleitkommazahlen beliebiger Genauigkeit wünschen, lesen Sie bitte meine Antwort. All dies ist vorgesehen BigInteger.Log generieren verdoppelt. –

+0

Vielleicht können Sie den Typ F # bignum verwenden; Sie unterstützen die Teilung direkt. – Jules

Antwort

3

Lesen Sie zuerst this article. Es enthält, was Sie tun möchten.

Dann, erarbeiten Sie die Fortsetzung Bruch Expansion von Dividend/Divisor, und zu stoppen, wenn Sie gewünschte Genauigkeit erreicht. Sie werden nicht die vollständige teure Divisionsoperation benötigen (ich nehme an, es ist O (n log^2 n) oder etwas ähnliches), Sie brauchen nur ganzzahlige Division/Rest.

Nichtsdestoweniger, vorausgesetzt, dass BigInteger.Log verdoppelt zurückgibt, wird die Funktion exp (log a/log b) gut funktionieren, und ich denke, dass es schneller als die fortgesetzte Fraktionserweiterung sein kann. Sie benötigen zwei Konvertierungen, um zu verdoppeln (wahrscheinlich schnell), und die Genauigkeit bleibt während des gesamten Vorgangs erhalten (auch wenn Log-Divisor und Log-Dividend sehr nahe beieinander liegen).

Verwandte Themen