![]() |
|
![]() ![]() ![]() |
|
alex_asker |
|
||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 7.2.2007 Репутация: нет Всего: нет |
Добрые люди, подскажите, пожалуйста, как прописать возведение значения Эйлера "е" в отрицательную дробную степень, например -0.0002.
Я делал следующим образом:
И далее:
Это возведение используется в довольно внушительной величины формуле. В данном случае выполняемое приложение зависает и считать формулу совсем не хочет. А вот если просто убрать знак "-" в степени, то все замечательно работает. Помогите, пожалуйста, кто знает! Это сообщение отредактировал(а) alex_asker - 30.11.2008, 15:56 |
||||
|
|||||
theworldcreator |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Честно сказать не стал вникать в ваш алгоритм, но с точки зрения алгебры можно:
Если степень < 0, умножить на ее -1 и поделить единицу на число, которое мы возводим в степень Применить ваш алгоритм, который уже не столкнется с отрицательными степенями. |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
y в степени x вычисляется выражением
|
|||
|
||||
theworldcreator |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
P.S. основы алгебры:
1/n = n^-1 (1/n)^m = n^-m ^ - значок степени |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
||||
|
||||
Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
а почему нельзя использовать функцию???
Это сообщение отредактировал(а) Dmi3ev - 30.11.2008, 17:05 -------------------- |
|||
|
||||
Tunin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 22.11.2008 Репутация: нет Всего: нет |
дел
Это сообщение отредактировал(а) Tunin - 30.11.2008, 18:45 |
|||
|
||||
alex_asker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 7.2.2007 Репутация: нет Всего: нет |
Я вас понял. Спасибо большое, много правильных ответов!
![]() Видите ли какое дело, всякими способами пробую на простой формуле возвести в степень (ну, например, как вы все здесь писали) и все работает! НО стоит только мне подвести результаты в мою длиннющую с множеством циклов формулу, то приложение виснет, а вот если минус уберу, то не виснет и считает, но уже конечно неправильно. Циклы мощные (5000 результатов по формуле выводят), может поэтому и виснет сразу? Может тут переполнение памяти какое-то, я не разбираюсь.... ![]() Это сообщение отредактировал(а) alex_asker - 30.11.2008, 22:09 |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 167 Всего: 306 |
alex_asker, если приложение с гуем - тогда юзай дополнительный поток для своей функции
|
|||
|
||||
alex_asker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 7.2.2007 Репутация: нет Всего: нет |
Fazil6, я теперь уже и сам понимаю, что такой алгоритм в дробную степень не должен возводить. Может вы знаете, как тогда в дробную возвести???
|
|||
|
||||
Usper |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 13.4.2007 Репутация: 15 Всего: 15 |
Смотри пост Dmi3ev, универсальная функция для возведения в степень (целую, дробную, отрицательную) - pow().
-------------------- На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник. |
|||
|
||||
alex_asker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 7.2.2007 Репутация: нет Всего: нет |
Я новичок в программировании, но все, что здесь было предложено (pow или экспонирование логарифмов) я пробовал на своем коде, результат тот же. Я уверен, что какая-то самая малая ошибка мешает мне сделать правильный код, не могу ее найти, поэтому и обратился к вам.
Вот мой код (я его не переделывал - это я про i=0;i<y;):
В общем, что не так пишите (если конечно есть соображения как исправить), буду премного благодарен!!! |
|||
|
||||
Usper |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 13.4.2007 Репутация: 15 Всего: 15 |
Не особо разбирался в коде, однако:
Эта функция в принципе не способна правильно возвести ни в дробную ни в отрицательную степень. Здесь:
получается бесконечный цикл. Слишком сложная и непонятная формула, чтобы понять что именно здесь не так. Но кажется Kg всегда больше нуля, а c=-1, поэтому условие (Kg>c) всегда истина. На мой взгляд использование оператора goto здесь неоправдано, лучше использовать цикл do...while. З.Ы. Да, кстати, функция возведения в степень вызывается всего один раз, поэтому можно один раз вычислить r на калькуляторе (r=0.99980002) и забить на эту функцию. З.Ы.Ы. Что программа должна делать? Что это за формула? Это сообщение отредактировал(а) Usper - 2.12.2008, 10:12 -------------------- На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник. |
||||
|
|||||
alex_asker |
|
||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 7.2.2007 Репутация: нет Всего: нет |
Usper, ну, во-первых, это формула, в которой необходимо найти при каком Т, Kg будет максимальной, поэтому изначально я и сравниваю Kg с отрицательным значением (т.к. оно наверняка >) и далее увеличиваем Т по шагу, пока не найдем максимум Kg, т.е. пока Kg не станет< c.
Во-вторых, возведение в степень происходит неоднократно, т.к. после формулы добавлено еще циклов на 5000 решений:
А на счет функции я и сам не уверен, что она верна:
Поэтому и ищу ответа на этом форуме. Вот такие дела..... Это сообщение отредактировал(а) alex_asker - 2.12.2008, 23:00 |
||||
|
|||||
Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
Конечно, неверна, у Вас i будет увеличиваться на единицу, дробным это значение не должно стать))) Например если x=2, а y=2.2, то, по-моему, должно получиться 4, а должно 2^(2,2) ![]() goto - стремная штука, а когда назад возвращаешься с помощью goto - это вдвойне стремная штука, это мое мнение. -------------------- |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
получится 8.. 4 было бы при y =2, а так еше один раз цикл пройдется. если не верите тому, что вам в каждом посте писали о Вашей функции, а также не утруждаете себя немного подумать, то чего Вы добиваетесь разместив свой вопрос на форуме?? Это сообщение отредактировал(а) mes - 3.12.2008, 01:42 |
|||
|
||||
Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
думал, что цикл с единицы начинается, не заметил, а так да, будет 8, i=0,1,2 - 3 прохода по циклу. спасибо, mes, что поправили -------------------- |
|||
|
||||
Dmi3ev |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
я попробовал выполнить программу, я там немного похимичил, потому что в первозданном виде она висла (сейчас объясню почему), только в путь, у мен возник вопрос к автору программы:
1. Вы дожидались концы программы хоть раз??? У меня нет желания разбираться в формуле с точки зрения задачи, но Вы уверены, что Вы так и задумывали формулу написать??? Просто дело в том что Ваша огромная, запутанная формула всегда будет вычислять ноль ![]()
В этом месте goto Вас и подвел (то о чем я и говорил), просто это условие выполняется всегда, соответственно goto выполняется тоже всегда. Надо его оттуда убрать совсем, тогда хоть конец вычислениям настанет, если Вы опять не хотите и это слушать, то тогда пишите просто
Результат одинаков, может я и ошибаюсь, но мой двухъядерный процессор думал 10 мин и ничего не надумал, значит вероятность, что всегда Kg=0 увеличивается Добавлено через 11 минут и 38 секунд ![]() Это прям троян какой-то, эта же тема в общих вопросах ![]() alex_asker хочет повесить компы всех форумчан, берегись ![]() Я уже попался на его хитрый ход ![]() Кто станет следующей жертвой коварного alex_asker ![]() Это сообщение отредактировал(а) Dmi3ev - 3.12.2008, 02:40 -------------------- |
||||
|
|||||
Usper |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 13.4.2007 Репутация: 15 Всего: 15 |
В далее приведённом куске кода я не вижу ни одного вызова функции stepen(), поэтому я и сделал вывод, что возведение в степень вызывается только один раз:
А присваивание с=Kg:
вообще бессмысленно, так как если (Kg<c), то c так и останется ==-1, а если (Kg>c), то выполняется присваивание c=Kg, но после этого сразу же выполняется переход goto на формулу, а после этого c опять равно -1. Я также как и Dmi3ev выполнял код, но 10 минут ждать не стал ![]()
Это сообщение отредактировал(а) Usper - 3.12.2008, 10:51 -------------------- На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник. |
||||||||
|
|||||||||
alex_asker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 7.2.2007 Репутация: нет Всего: нет |
Вы на правильном пути, товарищи!!! Спасибо большое, что ставите на путь истинный. Возведение в степень действительно лучше сделать через экспоненту: exp(y*log(e)) , в этом я убедился на более простых примерах, и в отрицательную дробную степень замечательно возводит (извините,что так долго до меня шло это открытие...). НО, как вы уже правильно заметили, байда с циклом.
Вобщем, само задание на прогу звучит так: "найти при каком Т (от 0.1 до бесконечности с шагом 0.1) значение Kg, высчитанное по формуле, будет максимальным" ??? Вот в чем истинная проблема!!! (извините что продолжаю тему, но надо ведь добить до конца!) Формула верна - перепроверял без цикла. Значение Kg всегда будет положительным, поэтому я и вводил изначально с=-1, чтобы было с чем сравнивать, чтобы искать максимум. Возможно я чего-то совсем недопонимаю, и максимум ищется как-то иначе???? Вероятно, что да! Прошу подсказки! пожалста..... P.S. Dmi3ev, извини за потраченное тобой время и мощности компа, не хотел, сам с этим столкнулся ![]() |
|||
|
||||
Usper |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 13.4.2007 Репутация: 15 Всего: 15 |
Поиск максимума делается не так. Пример:
То есть тебе надо постоянно сравнивать текущее значение с предыдущим максимумом. В самый первый момент масимум равен самому первому значению. То есть в твоём случае надо прикинуть как ведёт себя значение Kg, и если функция монотонно убывает, то максимум это самое первое значение (то есть надо постоянно смотреть не начала ли убывать функция, и если начала - прервать цикл). В моём примере значения массива - случайные числа, но массив - конечен, поэтому надо просмотреть весь массив, а по условию твоей задачи - массив бесконечен, поэтому надо сначало аналитически решить когда прервать цикл. Это сообщение отредактировал(а) Usper - 4.12.2008, 22:47 -------------------- На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник. |
|||
|
||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
А матанализ не пробовали задействовать? Или хотя бы примитивную алгебру ![]()
|
||||||
|
|||||||
alex_asker |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 7.2.2007 Репутация: нет Всего: нет |
Всем большое спасибо! Вопрос решен.
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |