C# реализация методов расширения для типа данных BigInteger. Такие как извлечение n -го корня, генерирование случайного значения и экспонента. Николай.
Я буду рад объединить ваши запросы на привлечение для улучшения производительности расчета. Даже если улучшение влияет только на отдельные случаи из диапазона значений.
Чтобы использовать эти расширения, вам нужно будет добавить в свой код после пространства имен: System.Numerics и TheSquid.Numerics.Extensions .
C# реализация метода расширения для быстрого расчета N -го корня (включая квадратный корень) для значения BigInteger.
В основном вы можете скопировать класс nthrootextension из исходного репозитория в свой проект. Другой вариант - добавить пакет TheSquid.numerics.extensions из репозитория Nuget в зависимости вашего проекта.
Пример использования:
var source = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var exponent = int . Parse ( Console . ReadLine ( ) ) ;
var root = source . NthRoot ( exponent , out var isExactResult ) ;Вы можете запустить случайные тесты NTHROOT сразу после репозитория клона и создать решение. Вы должны запустить генерировать тесты и перестроить решение перед началом скорости N -го корневых тестов.
Метод расширения использует два алгоритма вычисления корневых вычислений: хорошо известный метод Ньютона и метод цифры. Когда степень корня увеличивается, расчет по методу Ньютона замедляется, а метод цифры по цифр ускоряется. С помощью порядка стоимости корневой радикан и 100 000 десятичных цифр, зависимость скорости расчета от степени корня заключается в следующем:

C# реализация метода расширения для генерации случайного значения BigInteger в указанном диапазоне.
В основном вы можете скопировать класс NextBigInteGerextension из хранилища источника в ваш проект. Другой вариант - добавить пакет TheSquid.numerics.extensions из репозитория Nuget в зависимости вашего проекта.
Пример использования:
var min = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var max = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var random = new Random ( DateTime . Now . Millisecond ) . NextBigInteger ( min , max ) ;Вы можете запустить случайные тесты для метода расширения NextBigInteger, используя класс NextBigIntegerExtensionTests из Project TheSquid.numerics.extensions.tests сразу после репозитория клона и решения для строительства.
Метод расширения для системного класса случайным. Метод использует экземпляр случайного класса для генерации массива случайных байтов.
C# реализация метода расширения для более быстрого расчета способностей с повторными параметрами с использованием кэша.
В основном вы можете скопировать класс Powcachedextension из хранилища источника в ваш проект. Другой вариант - добавить пакет TheSquid.numerics.extensions из репозитория Nuget в зависимости вашего проекта.
Пример использования:
var source = BigInteger . Parse ( Console . ReadLine ( ) ) ;
var exponent = int . Parse ( Console . ReadLine ( ) ) ;
var power = source . PowCached ( exponent ) ; Кэш POW автоматически очищается. Во -первых, при выходе из мощности возникает ошибка в памяти. Тогда кэш будет полностью очищен. Во -вторых, если количество элементов в кэше достигает количества int.MaxValue . Тогда кэш будет очищен вдвое. Кроме того, вы можете проверить количество элементов в кэше и очистить его вручную, оставив указанное количество элементов.
Пример использования:
var available = PowCachedExtension . ItemsInCache ;
var threshold = long . Parse ( Console . ReadLine ( ) ) ;
if ( threshold < available ) PowCachedExtension . ShrinkCacheData ( threshold ) ;Вы можете запустить случайные тесты для метода расширения Powcached, используя класс PowcachedextensionTests из Project theSquid.numerics.extensions.tests сразу после репозитория клона и решения построения.
Ускорение достигается путем запоминания результатов вычислительных степеней, а также запоминания промежуточных результатов, полученных в ходе вычисления. Со случайными значениями база в диапазоне от 0 до 1000, значения случайных показателей в диапазоне от 0 до 1000 и итераций подсчитаны до 2000000 года, зависимость скорости расчета от заполнения кеша следующим образом:
