Оптимизация класса для длинной арифметики - C#

Узнай цену своей работы

Формулировка задачи:

Решил написать класс для работы с ОООЧЕНЬ длинными числами Какая была концепция : 1 - Числа дробные 2 - Числа хранятся в виде массива ulong[] 3 - Числа могут иметь любую систему счисления в пределах uint (2 - 4294967295) 4 - Знак числа хранится в отдельной переменной и имеет значения -1, 0, 1 ============================================= После написания этого класса у меня появились некоторые вопросы : 1 - Длина машинного слова 64 бита. И не зависимо от длины числа, одна операция выполняется определенное количество времени. По этому выгоднее всего проводить операции при максимальном значении системы счисления - ulong. Но при умножении максимального значения ulong получится значение, из-за которого вылетит исключение. По этому максимальная система счисления равна sqrt(ulong.MaxValue) = uint.MaxValue. Можно ли как то обойти это ограничение и использовать большую систему счисления? 2 - Код сложения выглядит, как просто сложение всех элементов 2ух массивов. По этому эту операцию можно распараллелить. Как вы на это смотрите? 3 - Безумная идея. Т.к. максимальная длина массива, хранящего число, равна 2^31-1, то максимальное значение хранимого числа равна (2^32)^(2^31-1). Но что, если я создам второй класс, который для хранения числа будет использовать не ulong[], а массив прошлых классов, то тогда максимальное значение будет равно (2^32)^(2^31-1)^(2^31-1)? Чисто теоретически. И возможно ли на .Net создать класс для длинной арифметики, который не будет иметь ограничений? (не считая физических)

Решение задачи: «Оптимизация класса для длинной арифметики»

textual
Листинг программы
ulong[][] Vectors = EquateVectors(BN1, BN2);
ulong[] Result = new ulong[Vectors[0].Length + 1];
 
for (int i = 0; i < Vectors[0].Length; i++)
{
    Result[i] = Vectors[0][i] + Vectors[1][i];
}
 
for (int i = 0; i < Result.Length - 1; i++)
{
    if (Result[i] >= BN1.CountSystem)
    {
        Result[i + 1] += Result[i] / BN1.CountSystem;
        Result[i] = Result[i] % BN1.CountSystem;
    }
}
 
return Result;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы