C# Implementación de métodos de extensión para el tipo de datos BigInteger. Como extraer una enésima raíz, generando un valor aleatorio y exponenciación. Por Nikolai thesquid.
Me alegrará fusionar sus solicitudes de extracción para mejorar el rendimiento del cálculo. Incluso si la mejora afecta solo casos individuales del rango de valores.
Para usar estas extensiones, deberá agregar a su código después de los espacios de nombres: System.Numerics y TheSquid.Numerics.Extensions .
C# Implementación de un método de extensión para calcular rápidamente una raíz enésima (incluida la raíz cuadrada) para el valor de BigInteger.
Básicamente, puede copiar la clase NTHROOTEXTENTS del repositorio de origen a su proyecto. Otra opción es agregar el paquete thesquid.numerics.extensions desde el repositorio NUGET a las dependencias de su proyecto.
Ejemplo de uso:
var source = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var exponent = int . Parse ( Console . ReadLine ( ) ) ;
var root = source . NthRoot ( exponent , out var isExactResult ) ;Puede iniciar pruebas NTHROOT aleatorias justo después del repositorio de clonos y la solución de compilación. Debe ejecutar Generar pruebas y reconstruir la solución antes de la velocidad de inicio en la red de la raíz.
El método de extensión utiliza dos algoritmos de cálculo raíz: método de Newton conocido y método dígito por dígito. A medida que aumenta el grado de raíz, el cálculo del método Newton se ralentiza y el método dígito por dígito se acelera. Con un orden de valor radicandos de raíz de 100,000 dígitos decimales, la dependencia de la velocidad de cálculo en el grado de la raíz es el siguiente:

C# Implementación de un método de extensión para generar un valor de biginteger aleatorio dentro del rango especificado.
Básicamente, puede copiar clase NextBigInTegerExtension desde el repositorio de origen a su proyecto. Otra opción es agregar el paquete thesquid.numerics.extensions desde el repositorio NUGET a las dependencias de su proyecto.
Ejemplo de uso:
var min = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var max = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var random = new Random ( DateTime . Now . Millisecond ) . NextBigInteger ( min , max ) ;Puede iniciar pruebas aleatorias para el método de extensión de NextBiginteger utilizando la clase NextBigInTeGerExtensionTests de Project thesquid.numerics.extensions.tests justo después del repositorio de clonos y la solución de compilación.
Método de extensión para la clase del sistema aleatorio. El método utiliza la instancia de la clase aleatoria para generar una matriz de bytes aleatorios.
C# Implementación de un método de extensión para un cálculo más rápido de potencias con parámetros repetidos usando caché.
Básicamente, puede copiar clase PowCachedExtension del repositorio de origen a su proyecto. Otra opción es agregar el paquete thesquid.numerics.extensions desde el repositorio NUGET a las dependencias de su proyecto.
Ejemplo de uso:
var source = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var exponent = int . Parse ( Console . ReadLine ( ) ) ;
var power = source . PowCached ( exponent ) ; POW Cache se borra automáticamente. En primer lugar, si se produce un error de memoria al calcular la potencia. Entonces el caché se borrará por completo. En segundo lugar, si el número de elementos en el caché alcanza el número de int.MaxValue . Entonces el caché se borrará a la mitad. Además, puede verificar el número de elementos en el caché y borrarlo manualmente, dejando un número específico de elementos.
Ejemplo de uso:
var available = PowCachedExtension . ItemsInCache ;
var threshold = long . Parse ( Console . ReadLine ( ) ) ;
if ( threshold < available ) PowCachedExtension . ShrinkCacheData ( threshold ) ;Puede iniciar pruebas aleatorias para el método de extensión PowCached utilizando la clase PowCachedExtensionTests de Project thesquid.numerics.extensions.tests justo después del repositorio de clones y la solución de compilación.
La aceleración se logra memorizando los resultados de los grados de computación, así como memorizando los resultados intermedios obtenidos en el progreso del cálculo. Con valores de sótano aleatorio en el rango de 0 a 1000, los valores exponentes aleatorios en el rango de 0 a 1000 y las iteraciones cuentan hasta 2000000, la dependencia de la velocidad de cálculo del llenado de caché es la siguiente:
