![]() |
|
![]() ![]() ![]() |
|
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 - это вдвойне стремная штука, это мое мнение. -------------------- |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |