киньте пример функции на вба которая может возводить число икс в степень игрек при условии что игрек может быть до ста.
Короче, проводить вычесления с числами с сорока и более нулями?
[Ответ]
Yandex 20:43 17.03.2009
1000w, в VBA нет численного типа, способного хранить такие числа. Т.е надо работать как то со строками. Для n! советовали воспользоваться приближенной формулой. В твоем случае нужны точные результаты?
Как вариант - поискать либу/dll-ку для работы с большими числами и проэкспортировать что надо.
[Ответ]
Part!zan 22:13 17.03.2009
1000w, реализуешь умножение в столбик, представляя числа в виде строк. По-другому никак.
[Ответ]
][irurg 23:07 17.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
все... блин... окончательно запуталась...=(
скажи, что не так, где торможу?
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
мдя... еще бы знать, какая именно утилита нужна... и как с ней работать...[Ответ]
Yandex 18:44 18.03.2009
Первый способ как во втором посте темы: берется gmblib (gmplib.org) или miracl, оформляется в виде dll (на С++), в Excel портируется нужная функция. Соответсвенно с Excel файлом придется таскать dll.
Второй способ: на сайте gmplib есть онлайн калькулятор. Им можно воспользоваться применив познания php
Беглый поиск консольных калькуляторов ни к чему не привел.
[Ответ]
Блин, школьная же задачка ну е мае.
2 варианта решения зависят от способа хранения числа
№1 строка или последовательный массив с цифрами числа. тупая реализация столбика (медленно)
№2 Представить число в друго системе исчисления не 10 чная а скажем 10000 ну и опять же реализация алгоритмов столбика (быстро) Накидать можно мин за 40.
Сделаю за пиво (предпочитаю гротверг)
[Ответ]
MadFish, сможешь организовать даже для дробных за 40мин? =-О
Part!zan, китайский что ли не знаешь?
P.S. А зачем их искать то?
[Ответ]
MadFish 22:23 20.03.2009
Сообщение от Yandex:
MadFish, сможешь организовать даже для дробных за 40мин? =-О
Про дробные степени разговор изначально не шел, шел про большие числа
Да и в любом случае в чем проблема? Разложить в ряды Тейлора и Маклорена? Ну прибавь часа полтора и пару бутылок пива. Токо считать на VBA она будет ну оооооочень долго
Сообщение от Part!zan:
А где ты найдешь 10000 разных символов?