Большой Воронежский Форум
Страница 1 из 3
1 23 >
» Программирование>VBA как возвести в степень
1000w 20:17 17.03.2009
киньте пример функции на вба которая может возводить число икс в степень игрек при условии что игрек может быть до ста.

Короче, проводить вычесления с числами с сорока и более нулями? [Ответ]
Yandex 20:43 17.03.2009
1000w, в VBA нет численного типа, способного хранить такие числа. Т.е надо работать как то со строками. Для n! советовали воспользоваться приближенной формулой. В твоем случае нужны точные результаты?

Как вариант - поискать либу/dll-ку для работы с большими числами и проэкспортировать что надо. [Ответ]
Part!zan 22:13 17.03.2009
1000w, реализуешь умножение в столбик, представляя числа в виде строк. По-другому никак. [Ответ]
][irurg 23:07 17.03.2009
технически тут нужно хранить степень отдельно и числовую часть отдельно, например как элементы двумерного массива. и сделать обработку операций на таких числах своими функциями [Ответ]
dr-sm 09:03 18.03.2009
http://tinyurl.com/ddtkhu [Ответ]
МанЬя4ка 11:27 18.03.2009
Я вот щас ломаю голову...
Private Sub UserForm_Click()
Dim m, z, c As Integer
m = InputBox("Введите любое число")
c = m ^ 2 Mod 128
MsgBox "с= " & (c)
z = c ^ 53
MsgBox "z= " & z
End Sub
почему же тогда это спокойно возводит в степень?
вчера не работал, седня работает...
Зы: я первый раз работаю в VBA, сильно не ругайте=)
[Ответ]
Yandex 13:00 18.03.2009
МанЬя4ка, работал и не работает - это гадание на кофейной гуще. Нужен код ошибки, когда не работал. [Ответ]
МанЬя4ка 13:03 18.03.2009
выдавал ошибку overflow при возведении в большую степень. [Ответ]
Yandex 13:09 18.03.2009
МанЬя4ка, ну видимо так и было.
Наверно сегодня поменьше число вводишь. [Ответ]
МанЬя4ка 13:17 18.03.2009
да нет, те же числа. вчера он не хотел даже 9 в степень возводить, а сегодня уже сотни возводит. я уже разные варианты подставляла - работает [Ответ]
Yandex 13:31 18.03.2009
МанЬя4ка, тогда вероятнее всего подхватывалась старая версия кода.
Тока проверил - все нормально работает. [Ответ]
Yandex 13:36 18.03.2009
Бугага, я придумал как получить, без всяких либ и прочего:
Результат возведения записывается в ячейку. Формат ячейки выстанавливается числовой.
Потом забираем это число как текст.
P.S. OfficeXP
P.P.S. Просто с большими числами Excel и так умеет работать. [Ответ]
МанЬя4ка 13:47 18.03.2009
т.е. результат возведения получается число без плавающей точки? [Ответ]
Yandex 14:14 18.03.2009
МанЬя4ка, видимо у Excel проблемы с округлением.
Вообще не вижу смысла работать с большими числами посредством VBA. [Ответ]
МанЬя4ка 14:20 18.03.2009
просто в VBA более или менее что-то знаю и понимаю... а в чем посоветуешь делать? потому как это только малая часть задачи, потом надо будет результат возведения делить на mod 128, и это пугает еще сильнее. [Ответ]
Yandex 14:31 18.03.2009
МанЬя4ка, если вычислений не много, то можно внешнюю тулзу поискать. Под С/С++ много библиотек для шустрой работы с большими числами. Есть так же исходники как работать с большими числами под Delphi.

Если с другими языками совсем дело швах, то VBA остается, но без вариантов.
Проверил вот таким скриптиком, как VBA работает с дробными

Сообщение от :
Sub Test()
a = (123.45 ^ 101.101)
b = (123.45 ^ 100.101)
MsgBox a / b
End Sub

Результат корректен.
Возможно округление идет из-за кривого перевода в ячейку. [Ответ]
МанЬя4ка 14:57 18.03.2009
вычислений не много. в задаче надо возвести в большую степень, а потом результат поделить на mod 128. число должно быть целым.
получается, вкратце:
Private Sub UserForm_Click()
a = (123.45 ^ 101.101)
z = a Mod 128
MsgBox z
End Sub

без mod все ок, а с ним ошибка overflow.
сама задача побольше будет, но основное в ней - это... [Ответ]
Yandex 15:32 18.03.2009
МанЬя4ка, используй "правильный" mod

Сообщение от :
Function MyMod&(X#, Y#)
MyMod = X - Y * Fix(X / Y)
End Function

http://www.progz.ru/forum/index.php?...3&#entry139293 [Ответ]
МанЬя4ка 16:11 18.03.2009
все... блин... окончательно запуталась...=(
скажи, что не так, где торможу?
Private Sub UserForm_Click()
Dim r, a, m, z, c As Integer
m = InputBox("Введите любое число")
r = 128
c = m ^ 2 Mod 128
MsgBox "с= " & (c)
z = c ^ 53
MsgBox "z= " & z
a = MyMod((z), (r))
MsgBox a
End Sub
Private Function MyMod&(z#, r#)
MyMod = z - r * Fix(z / r)
End Function [Ответ]
Yandex 17:10 18.03.2009
МанЬя4ка, Fix не отрабатывает как надо. Так же не отрабатывают WorksheetFunction.Round и прочие на больших числах. Пробовал так

Сообщение от :
Sub Test()
a = 11.45 ^ 12.45
b = 128
MsgBox MyMod(a, b)
End Sub

Function MyMod(a, b)
MyMod = a - WorksheetFunction.Floor(a, b)
End Function

(http://www.sql.ru/forum/actualthread.aspx?tid=279661)

Видимо без сторонней утилиты не обойтись. [Ответ]
МанЬя4ка 17:43 18.03.2009
мдя... еще бы знать, какая именно утилита нужна... и как с ней работать... [Ответ]
Yandex 18:44 18.03.2009
Первый способ как во втором посте темы: берется gmblib (gmplib.org) или miracl, оформляется в виде dll (на С++), в Excel портируется нужная функция. Соответсвенно с Excel файлом придется таскать dll.

Второй способ: на сайте gmplib есть онлайн калькулятор. Им можно воспользоваться применив познания php

Беглый поиск консольных калькуляторов ни к чему не привел.
[Ответ]
Ivan XXX 22:11 18.03.2009
во у людей проблемы. в шоке ) [Ответ]
DeeP 18:03 19.03.2009
я на калькуляторе считаю [Ответ]
МанЬя4ка 10:31 20.03.2009
так на калькуляторе и я могу=) [Ответ]
MadFish 13:54 20.03.2009
Блин, школьная же задачка ну е мае.
2 варианта решения зависят от способа хранения числа
№1 строка или последовательный массив с цифрами числа. тупая реализация столбика (медленно)
№2 Представить число в друго системе исчисления не 10 чная а скажем 10000 ну и опять же реализация алгоритмов столбика (быстро) Накидать можно мин за 40.
Сделаю за пиво (предпочитаю гротверг) [Ответ]
Part!zan 19:10 20.03.2009

Сообщение от MadFish:
а скажем 10000

А где ты найдешь 10000 разных символов? [Ответ]
Yandex 21:20 20.03.2009
MadFish, сможешь организовать даже для дробных за 40мин? =-О

Part!zan, китайский что ли не знаешь?
P.S. А зачем их искать то? [Ответ]
MadFish 22:23 20.03.2009

Сообщение от Yandex:
MadFish, сможешь организовать даже для дробных за 40мин? =-О

Про дробные степени разговор изначально не шел, шел про большие числа
Да и в любом случае в чем проблема? Разложить в ряды Тейлора и Маклорена? Ну прибавь часа полтора и пару бутылок пива. Токо считать на VBA она будет ну оооооочень долго


Сообщение от Part!zan:
А где ты найдешь 10000 разных символов?

Ну например в word (0-65535), хватит?
[Ответ]
Part!zan 23:03 20.03.2009
Да, че-то я ступил... [Ответ]
Страница 1 из 3
1 23 >
Вверх