C # Implémentation des méthodes d'extension pour le type de données BigInteger. Tels que l'extraction d'une root nième, générant une valeur et une exponentiation aléatoires. Par Nikolai Thesquid.
Je serai heureux de fusionner vos demandes de traction pour améliorer les performances de calcul. Même si l'amélioration n'affecte que les cas individuels de la plage de valeurs.
Pour utiliser ces extensions, vous devrez ajouter à votre code suivant les espaces de noms: System.Numerics et TheSquid.Numerics.Extensions .
C # Implémentation d'une méthode d'extension pour calculer rapidement une nième racine (y compris la racine carrée) pour la valeur BigInteger.
Fondamentalement, vous pouvez copier la classe nthrootextension du référentiel source à votre projet. Une autre option consiste à ajouter le package thesquid.numerics.extensions du référentiel NuGet aux dépendances de votre projet.
Exemple d'utilisation:
var source = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var exponent = int . Parse ( Console . ReadLine ( ) ) ;
var root = source . NthRoot ( exponent , out var isExactResult ) ;Vous pouvez commencer des tests NTHROOT aléatoires juste après le référentiel de clones et la solution de construction. Vous devez exécuter des tests générés et reconstruire une solution avant la vitesse de démarrage et les tests racine.
La méthode d'extension utilise deux algorithmes de calcul racine: la méthode bien connue de Newton et la méthode numérique par chiffre. À mesure que le degré de la racine augmente, le calcul par la méthode de Newton ralentit et la méthode numérique par chiffre accélère. Avec un ordre de valeur radicale de racine de 100 000 chiffres décimaux, la dépendance de la vitesse de calcul au degré de la racine est la suivante:

C # Implémentation d'une méthode d'extension pour générer une valeur BigInteger aléatoire dans la plage spécifiée.
Fondamentalement, vous pouvez copier la classe NextBiginteGerextension du référentiel source à votre projet. Une autre option consiste à ajouter le package thesquid.numerics.extensions du référentiel NuGet aux dépendances de votre projet.
Exemple d'utilisation:
var min = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var max = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var random = new Random ( DateTime . Now . Millisecond ) . NextBigInteger ( min , max ) ;Vous pouvez démarrer des tests aléatoires pour la méthode d'extension NextBigInteger en utilisant la classe NextBigIntegerextententests à partir du projet thesquid.numerics.extensions.tests juste après le référentiel de clones et la solution de construction.
Méthode d'extension pour la classe système aléatoire. La méthode utilise l'instance de classe aléatoire pour générer un tableau d'octets aléatoires.
C # Implémentation d'une méthode d'extension pour un calcul plus rapide des pouvoirs avec des paramètres répétés à l'aide du cache.
Fondamentalement, vous pouvez copier la classe Powcachedextension du référentiel source à votre projet. Une autre option consiste à ajouter le package thesquid.numerics.extensions du référentiel NuGet aux dépendances de votre projet.
Exemple d'utilisation:
var source = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var exponent = int . Parse ( Console . ReadLine ( ) ) ;
var power = source . PowCached ( exponent ) ; Le cache POW se dégage automatiquement. Premièrement, si une erreur hors mémoire se produit lors du calcul de la puissance. Ensuite, le cache sera complètement effacé. Deuxièmement, si le nombre d'éléments dans le cache atteint le nombre de int.MaxValue . Ensuite, le cache sera effacé de moitié. De plus, vous pouvez vérifier le nombre d'éléments dans le cache et le nettoyer manuellement, en laissant un nombre spécifié d'éléments.
Exemple d'utilisation:
var available = PowCachedExtension . ItemsInCache ;
var threshold = long . Parse ( Console . ReadLine ( ) ) ;
if ( threshold < available ) PowCachedExtension . ShrinkCacheData ( threshold ) ;Vous pouvez démarrer des tests aléatoires pour la méthode d'extension Powcached en utilisant la classe Powcachedextententests à partir du projet thesquid.numerics.extensions.tests juste après le référentiel de clones et la solution de construction.
L'accélération est obtenue en mémorisant les résultats du calcul des degrés, ainsi qu'en mémorisant les résultats intermédiaires obtenus dans les progrès du calcul. Avec des valeurs de sous-sol aléatoires dans la plage de 0 à 1000, les valeurs d'exposants aléatoires entre 0 et 1000 et les itérations comptent jusqu'à 2000000, la dépendance de la vitesse de calcul du remplissage du cache est la suivante:
