Ограничения VBA в реализации арифметики длинных (больших) чисел
Формулировка задачи:
Итак, моя юбилейная - первая тема на этом форуме. Здравствуйте Товарищи!
Необходима помощь или совет от спецов этого форума. Работаю над арифметикой длинных (натуральных) чисел с размером значимой части числа до 32 тыс.знаков (мах. для ячейки Excel). Есть замечательный алгоритм на собственном типе переменной через массив и длинной арифметике (не мой) и мой собственный, только через String.
По первому - есть ограничения до 10 тыс. символов в связи с особенностью VBA, по второму - в 30 раз медленнее. Думаю можно ли пойти другим путем (увеличь быстродействие) в VBA (без dll, сторонних языков), возможно через собственный класс, куда двигать дальше?
Буду рад любому совету!
Решение задачи: «Ограничения VBA в реализации арифметики длинных (больших) чисел»
textual
Листинг программы
- Function ABC2ABC(num As String, osn1 As Long, osn2 As Long) As String
- Dim a(100000) As Long, b As Long, c As Long, l As Long
- Dim i As Long, j As Long, k As Long, txt As String
- For i = 1 To Len(num)
- j = -1
- While j < l Or c > 0
- j = j + 1
- b = a(j) * osn1 + c
- a(j) = b Mod 10000
- c = b \ 10000
- Wend
- l = j
- с = Asc(UCase(Mid(num, i, 1)))
- If с <= 57 Then c = с - 48 Else c = с - 55
- j = -1
- While c > 0
- j = j + 1
- b = a(j) + c
- a(j) = b Mod 10000
- c = b \ 10000
- Wend
- If j > l Then l = j
- Next i
- Do
- b = 0
- For i = l To 0 Step -1
- b = (b * 10000 + a(i)) Mod osn2
- Next i
- If b < 10 Then b = b + 48 Else b = b + 55
- k = k + 1
- If k > Len(txt) Then txt = txt & Space$(1000)
- Mid$(txt, k, 1) = Chr$(b)
- c = 0
- j = l
- For i = l To 0 Step -1
- b = c * 10000 + a(i)
- a(i) = b \ osn2
- c = b Mod osn2
- If a(i) = 0 And i = l Then j = i - 1
- Next i
- l = j
- Loop While l >= 0
- ABC2ABC = StrReverse(Left$(txt, k))
- End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д