Бедный Виталий

5
Рейтинг

bedvit
Виталий Бедный



  •   Регистрация: 13.02.2018 (6 лет назад)

  •   Был(а) на сайте: 19.05.2020

Друзья
  • Антон Костин
  • Дмитрий Малышев
  • Евгений Комиссаров
Подписчики 4

Рейтинг 5

Длинная арифметика (Bignum arithmetic) c COM-интерфейсом (ActiveX) на библиотеках MPIR

Инструменты и обработки Программист Россия Windows Абонемент ($m) Архив с данными Инструментарий разработчика

Расчеты любой точности в вашем программном продукте, поддерживающем стандарт COM. Размер/точность длинного числа зависит только от вашей оперативной памяти. Проект основан на исходниках библиотеки MPIR, Edition 3.0.0. Полностью написан на С/С++ (COM.DLL).

1 стартмани

12.04.2018    10840    1    bedvit    4       

5

Комментарии

DevДлинная арифметика (Bignum arithmetic) c COM-интерфейсом (ActiveX) на библиотеках MPIR#4 13.04.18 15:53
+ с индексами проще работать в различных циклах/переборах/итераторах просто подставляя индекс нужного числа.
DevДлинная арифметика (Bignum arithmetic) c COM-интерфейсом (ActiveX) на библиотеках MPIR#3 13.04.18 15:31
//Нужны буквы, пожалуйста:
А=1; Б=2; В=3;
I = Новый COMОбъект("BedvitCOM.BignumArithmeticInteger")
I.BignumSet(А,"1232434443");
I.BignumSet(Б,"3453453454");
I.Sum(В,А,Б); //В=А+Б

//Потом вывести результат:
значение_длинного_числа = I.Bignum (B); //вернуть строку/длинное число в переменную "значение_длинного_числа"
DevДлинная арифметика (Bignum arithmetic) c COM-интерфейсом (ActiveX) на библиотеках MPIR#2 13.04.18 15:20
Так было в первой версии библиотеки (с некоторыми отличиями, математика была в каждом объекте-числе):

А = Новый COMОбъект("LongNum");
Б = Новый COMОбъект("LongNum");
В = Новый COMОбъект("LongNum");
А.String = "1232434443";
Б.String = "3453453454";
В = А.Add(Б); // B = A + Б

При тестировании стало понятно, что передача объектов в виде аргументов - более затратный процесс, чем передача индекса.
Поэтому была придумана текущая конструкция:

I = Новый COMОбъект("BedvitCOM.BignumArithmeticInteger")
I.BignumSet(1,"1232434443");
I.BignumSet(2,"3453453454");
I.Sum(3,1,2);

То же, что и предложенный вариант, но расчет происходит в одном объекте, а не создается 4 (математика и три числа), т.е. I - как класс математики, только вместо обозначения переменных, их индексы. Как писал в топике была возможность заменить индексы на строку (те же А или Б), но в этом случае снижается скорость работы из-за преобразований BSTR в char* и поиск в std::map по ключу-значение, вместо явного индекса в std::vector.
DevДлинная арифметика (Bignum arithmetic) c COM-интерфейсом (ActiveX) на библиотеках MPIR#0 11.04.18 18:07
Расчеты любой точности в вашем программном продукте, поддерживающем стандарт COM.
Размер/точность длинного числа зависит только от вашей оперативной памяти.
Проект основан на исходниках библиотеки MPIR, Edition 3.0.0.
Полностью написан на С/С++ (COM.DLL).