Длинная арифметика, длинное число (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

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


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

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

7   голосов , оценка 3.714 из 5