Frage

Zur Zeit bin ich borgen java.math.BigInteger von den J # Bibliotheken wie hier beschrieben . Mit noch nie zuvor eine Bibliothek für die Arbeit mit großen ganzen Zahlen verwendet wird, scheint dies in der Größenordnung von 10 mal langsam, langsamer, auch für ulong Länge Zahlen. Hat jemand irgendwelche besseren (vorzugsweise kostenlos) Bibliotheken, oder ist das Leistungsniveau normal?

Andere Tipps

F# auch Schiffe mit ein. Sie können ihn unter Microsoft.FSharp.Math erhalten.

Ich rechne damit Sie die Implementierung optimieren könnte, wenn Sie alle Vorgänge auf BigInts durchführen, die Ergebnisse kleiner als ein nativer Typ (z. B. int64) auf die einheimischen Arten und nur befassen sich mit dem großen Array zurück gehen, wenn Sie wollen Überlauf.

Bearbeiten Diese Implementierung auf Codeproject , scheint nur 7-mal langsamer ... Aber mit dem oben Optimierung könnte man es fast identisch mit nativen Typen für kleine Zahlen auszuführen bekommen.

Hier sind mehrere Implementierungen von BigInteger in C #. Ich habe verwendet BigInteger, funktioniert ziemlich schnell (ich es in Compact verwendet habe)

Hüpfburg

Mono

Ich bin mir nicht sicher über die Leistung, aber Ironpython hat auch eine BigInteger-Klasse. Es ist im Microsoft.Scripting.Math Namespace.

Ja, es wird langsam sein, und 10x Unterschied ist, über das, was ich erwarten würde. BigInt verwendet ein Array eine beliebige Länge darzustellen, und alle Vorgänge manuell durchgeführt werden müssen (im Gegensatz zu den meisten math gegenüber, die direkt mit der CPU durchgeführt werden kann)

Ich weiß nicht einmal, ob Hand-Codierung wird es in der Montage gibt Ihnen viel von einem Performance-Gewinn über 10x, das ist verdammt nah. Ich würde nach anderen Wegen suchen, um es zu optimieren - manchmal abhängig von Ihrem mathematischen Problem gibt es kleine Tricks, die Sie tun können, um es schneller

.

Ich benutzte BigInteger bei einem früheren Job. Ich weiß nicht, welche Art von Performance-Anforderungen Sie haben. Ich habe es nicht in einer leistungsintensive Situation nutzen, aber hatte nie Probleme mit ihm.

Das mag wie ein seltsamer Vorschlag klingen, aber haben Sie testen die dezimal Typ, um zu sehen, wie schnell es funktioniert?

Dezimalbereich beträgt ± 1,0 × 10 ^ -28 7,9 × 10 ^ 28 bis ±, so ist es immer noch nicht groß genug sein kann, aber es ist größer als eine ULONG.

Es sollte eine BigInteger-Klasse in .NET 3.5, aber es wird geschnitten .

Dies wird nicht helfen, aber es sollte eine BigInteger-Klasse in .NET 3.5 sein; es wurde geschnitten, sondern von Aussagen bei PDC gemacht, wird es in .Net 4.0 sein. Sie haben offenbar viel Zeit zu optimieren es ausgegeben, so sollte die Leistung viel besser als das, was Sie bekommen jetzt.

Ferner diese Frage ist im Wesentlichen ein Duplikat von Wie kann ich vertrete eine sehr große ganze Zahl in .NET?

Sehen Sie die Antworten in dieser Thread . Sie werden eine der Dritt großer Integer-Bibliotheken / Klassen zur Verfügung, oder warten Sie für C # 4.0 verwenden müssen, die ein native BigInteger Datentyp enthalten werden.

Das sieht sehr vielversprechend aus. Es ist ein C # Wrapper über GMP .

http://web.rememberingemil.org/Projects/GnuMpDotNet/GnuMpDotNet.html

Es gibt auch andere BigInteger Optionen für .Net Mpir.Net

Sie können auch die Math.Gmp.Native Nuget Paket, das ich geschrieben habe. Sein Quellcode ist auf GitHub und Dokumentation ist hier . Es macht die gesamte Funktionalität des GMP Bibliothek .NET, die als hochoptimierte beliebiger Genauigkeit arithmetische bekannt ist Bibliothek.

beliebige Genauigkeit ganz Zahl wird von dem mpz_t Typ. Operationen auf diesen ganzen Zahlen alle mit dem mpz_ Präfix beginnen. Für Beispiele, mpz_add oder mpz_cmp . Quellcode-Beispiele werden für jede Operation gegeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top