Ограничения 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д