Длинная арифметика, длинное число (LongNum) для VBA - .DLL / .XLL
Формулировка задачи:
Друзья, всем привет!
Для всех кто любит VBA, решил написать помощник в длинной арифметики.
Это продолжение и наверное завершение моих предыдущих трех тем.
Реализация через .XLL, т.е. все очень просто - устанавливается как надстройка и готово!
Длинное число с математикой работает как экземпляр объекта.
Перегрузка операторов в VBA - мечта, поэтому тупо через свойства и методы.
Скорость работы - более чем в 10 раз быстрее чем все предыдущие решения (!100000=20 сек, 1000000!='8,263931688331240E+5565708 - 50мин.)
Есть справка .Help:
Properties (Name-Type-Description)
1) L - as Object - LongNum
2) LNum - as Int32 - Converts the numeric value (Int32-Holds signed 32-bit (4-byte) integers that range in value from -2,147,483,648 through 2,147,483,647.).
3) LString(Optional format) - as String - Converts the String\Exponential notation (format = "E...", example:"E5"="1.11111E+...")
4) Sign - As Integer - Gets a number that indicates the sign (negative, positive, or zero) of the currentLongNum object.
5) IsEven - As Boolean - Indicates whether the value of the current LongNum object is an even number.
Methods (Name-Return-Description)
1) Addition(LongNum, LongNum, Optional Subtraction) - As LongNum - Adds/Subtracts two LongNum values and returns the result.
2) Copy(LongNum) - No - Specifies the LongNum to which the specified object will be copied
3) Compare(LongNum, LongNum) - As Integer - Compares two LongNum values and returns an integer that indicates whether the first value is less than, equal to, or greater than the second value.
4) Divide(LongNum, LongNum) - As LongNum - Divides one LongNum value by another and returns the result.
5) Factorial(Int32) - As LongNum - Returns a BigInteger value - Factorial of a specified value.
6) Help - Msgbox - Help
7) HelpString - As String - Help
8) Modulus(LongNum, LongNum) - As LongNum - Performs integer division on two LongNum values and returns the remainder.
9) Multiply(LongNum, LongNum) - As LongNum - Returns the product of two LongNum values.
10) Negate(LongNum) - As LongNum - Negates a specified LongNum value.
11) Pow(LongNum, Int32) - As LongNum - Raises a LongNum value to the power of a specified value.
Подключаем .XLL. вносим код в обычный модуль, смотрим
Ввод: строка, экспоненциальной запись (с любой степенью), Long
Вывод: строка (обычная - по умолчанию, и экспоненциальная запись (с задаваемой мантиссой)
Какие мнения?
Решение задачи: «Длинная арифметика, длинное число (LongNum) для VBA - .DLL / .XLL»
textual
Листинг программы
Sub test_new() Dim lng As Object, t1 As Single, t2 As Single Set lng = CreateObject("LongNum") t1 = Timer lng.String = "9" Set lng = lng.Power(999999) Set lng = lng.Add(lng) t2 = Timer StrPrint [a1], lng.String Debug.Print t2 - t1, Timer - t2 End Sub Public Sub StrPrint(Cell As Range, ByVal s As String) Dim x As Long, l As Long l = Len(s) For x = 0 To l \ 32766 Cell.Offset(0, x) = "'" & Mid$(s, 32766 * x + 1, 32766) Next End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д