C# Implementierung von Erweiterungsmethoden für den Biginterger -Datentyp. Wie das Extrahieren einer N -ten Wurzel, die Erzeugung eines Zufallswerts und einer Exponentiation. Von nikolai thesquid.
Ich werde gerne Ihre Pull -Anfragen zur Verbesserung der Berechnungsleistung zusammenführen. Auch wenn die Verbesserung nur einzelne Fälle aus dem Wertebereich betrifft.
Um diese Erweiterungen zu verwenden, müssen Sie Ihren Code folgen, um Namespaces zu erhalten: System.Numerics und TheSquid.Numerics.Extensions .
C# Implementierung einer Erweiterungsmethode zur schnellen Berechnung eines N -ten Wurzels (einschließlich Quadratwurzel) für den BigInenger -Wert.
Im Grunde können Sie die Klasse ntrootextension vom Quell -Repository in Ihr Projekt kopieren. Eine weitere Möglichkeit besteht darin, das Paket für die Abhängigkeit Ihres Projekts aus dem Nuget -Repository zum Nuget -Repository hinzuzufügen.
Verwendungsbeispiel:
var source = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var exponent = int . Parse ( Console . ReadLine ( ) ) ;
var root = source . NthRoot ( exponent , out var isExactResult ) ;Sie können zufällige NTOOT -Tests gleich nach dem Clone -Repository und der Erstellung von Lösung starten. Sie müssen über Generierung von Tests ausgeführt werden und Lösung wieder aufbauen, bevor Sie die N -ten Root -Tests der Startgeschwindigkeit wieder aufbauen.
Die Erweiterungsmethode verwendet zwei Root-Berechnungsalgorithmen: die bekannte Newton-Methode und die Digit-by-Digit-Methode. Mit zunehmendem Grad der Wurzel verlangsamt sich die Berechnung der Newton-Methode und die Ziffer-zu-Digit-Methode beschleunigt. Mit einer Wurzel -Radikand -Wertreihenfolge von 100.000 Dezimalstellen lautet die Abhängigkeit der Berechnungsgeschwindigkeit vom Grad der Wurzel wie folgt:

C# Implementierung einer Erweiterungsmethode zur Erzeugung eines zufälligen BiginTeger -Werts innerhalb des angegebenen Bereichs.
Im Grunde können Sie die Klasse NextBigInteGeeTextesion vom Quell -Repository in Ihr Projekt kopieren. Eine weitere Möglichkeit besteht darin, das Paket für die Abhängigkeit Ihres Projekts aus dem Nuget -Repository zum Nuget -Repository hinzuzufügen.
Verwendungsbeispiel:
var min = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var max = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var random = new Random ( DateTime . Now . Millisecond ) . NextBigInteger ( min , max ) ;Sie können zufällige Tests für die NextBigInteger -Erweiterungsmethode unter Verwendung von NextBigIntenexTeNeTests -Klasse aus dem Projekt thesquid.numerics.eutnesions.tests direkt nach dem Clone -Repository und der Build -Lösung starten.
Erweiterungsmethode für die Systemklasse zufällig. Die Methode verwendet eine Instanz der zufälligen Klasse, um ein Array von zufälligen Bytes zu generieren.
C# Implementierung einer Erweiterungsmethode für eine schnellere Berechnung von Leistungen mit wiederholten Parametern mit Cache.
Im Grunde können Sie die KlassenpowCacheDextension vom Quell -Repository in Ihr Projekt kopieren. Eine weitere Möglichkeit besteht darin, das Paket für die Abhängigkeit Ihres Projekts aus dem Nuget -Repository zum Nuget -Repository hinzuzufügen.
Verwendungsbeispiel:
var source = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var exponent = int . Parse ( Console . ReadLine ( ) ) ;
var power = source . PowCached ( exponent ) ; Pow -Cache löscht sich automatisch. Erstens, wenn beim Speicherfehler bei der Berechnung der Leistung auftritt. Dann wird der Cache vollständig gelöscht. Zweitens, wenn die Anzahl der Elemente im Cache die Anzahl der int.MaxValue erreicht. Dann wird der Cache um die Hälfte gelöscht. Darüber hinaus können Sie die Anzahl der Elemente im Cache überprüfen und manuell löschen, wobei eine bestimmte Anzahl von Elementen hinterlassen wird.
Verwendungsbeispiel:
var available = PowCachedExtension . ItemsInCache ;
var threshold = long . Parse ( Console . ReadLine ( ) ) ;
if ( threshold < available ) PowCachedExtension . ShrinkCacheData ( threshold ) ;Sie können zufällige Tests für die PowCached -Erweiterungsmethode mithilfe von PowCACHCACHEDEXTIONSECTESTS -Klasse aus Project thesquid.numerics.extensions.Tests direkt nach dem Clone -Repository und der Erstellung von Lösung starten.
Die Beschleunigung wird erreicht, indem die Ergebnisse von Rechengraden erledigt und die im Berechnungsfortschritt erzielten Zwischenergebnisse auswendig gelernt werden. Mit zufälligen Kellerwerten im Bereich von 0 bis 1000, zufälligen Exponentenwerten im Bereich von 0 bis 1000 und die Iterationen bis zu 2000000, ist die Abhängigkeit der Berechnungsgeschwindigkeit zur Cache -Füllung wie folgt:
