Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Возведение числа в отрицательную дробную степень |
Автор: alex_asker 30.11.2008, 15:51 | ||||
Добрые люди, подскажите, пожалуйста, как прописать возведение значения Эйлера "е" в отрицательную дробную степень, например -0.0002. Я делал следующим образом:
И далее:
Это возведение используется в довольно внушительной величины формуле. В данном случае выполняемое приложение зависает и считать формулу совсем не хочет. А вот если просто убрать знак "-" в степени, то все замечательно работает. Помогите, пожалуйста, кто знает! |
Автор: jonie 30.11.2008, 16:31 |
z^(-n) = 1/z^n , для всех z>0 |
Автор: jonie 30.11.2008, 17:19 |
http://forum.vingrad.ru/forum/topic-238272/kw-возведение-числа-отрицательную-дробную-степень.html тема дубль |
Автор: J0ker 30.11.2008, 21:21 | ||
да при чем тут это ты на формулу посмотри Добавлено через 3 минуты и 34 секунды это не правильно так можно делать только для положительных целых степеней |
Автор: Sannis 30.11.2008, 21:58 |
Имхо, если человек не знает, что такое возведение числа в степень, то программировать ему ещё рано. И вопросы стоит сразу публиковать в Центр помощи, чтобы не утруждать модераторов переносом. alex_asker, приглядитесь внимательно к вашему циклу. Если у вас y < 0, то уже в первом шаге цикла будет неверно, что i < y. А значит цикл не будет выполняться ни разу и функция вернёт 1. приведите весь код программы, тогда можно будет сказать, почему она виснет. А пока лучше вспомнить определение возведения в степень. Не знаю что хочет от вас преподаватель или чего хотите вы, но если нельзя пользоваться функцией pow(x,y) или вы не хотите её использовать, то можете попробовать записать эту функцию через экспонирование логарифмов. |
Автор: SABROG 30.11.2008, 22:39 |
Вообще да, ноль больше отрицательного значения. Цикл не должен выполняться. Не понятно почему он у вас виснет. |
Автор: alex_asker 1.12.2008, 17:35 | ||
Sannis, я действительно новичок в программировании, но все, что здесь было предложено (pow или экспонирование логарифмов) я пробовал на своем коде, результат тот же. Я уверен, что какая-то самая малая ошибка мешает мне сделать правильный код, не могу ее найти, поэтому и обратился к вам. Вот мой код (я его не переделывал - это я про i=0;i<y;):
В общем, что не так пишите (если конечно есть соображения как исправить), буду премного благодарен!!! ![]() |
Автор: xvr 2.12.2008, 12:12 |
Ужас ![]() По поводу того, что оно виснет - у вас в формуле Kg=T0*((1-r)/(T+(Tk/n)+r*a*(r1+(Tk/n))+(1-r)*(1-b)*(r2+(Tk/n))+(1-r)*b*(T+(Tk/n)+r2)+(Tk/n))); есть такая часть 1-r на которую умножается T0. Если r равно 1 (как у вас и получается в вашем stepen), то Kg всегда равна 0. После чего у вас все зацикливается на первом же goto. Вообще для таких вещей есть дебагер, по шагам не пробовали ваши спагетти проходить? |
Автор: Lycifer 2.12.2008, 13:00 |
x в -2 это не 1/x во 2?(Может математику забыл, пожалуйста без сооказма) |
Автор: jonie 2.12.2008, 13:16 |
Lycifer сообщение номер 2 прочти. |
Автор: alex_asker 2.12.2008, 23:11 |
Ну, во-первых, уважаемый xvr, Т0 умножается не на (1-r), а на все выражание целиком! Во-вторых, не надо округлять, на первом шаге r=0.998001998667, поэтому и нуля не будет! А вот правильно ли я возвел в отрицательную дробную степень - это вопрос! Да это же собственно название темы!!! Я не просто так обратил ваше внимание именно на это! хотя ошибка всегда может оказаться где угодно......... |
Автор: xvr 3.12.2008, 00:41 | ||||||||||
1-r входит во все части всего выражения, так что будет 0 Нет, вру, есть еще слагаемое Tk/n, так что будет T0*Tk/n, что является константой относительно T, которое меняется в первом цикле, так что разницы всеравно нет. Хотя там еще с меняется, в общем, ищи цикл, в котором все это зацикливается
![]() ![]() |
Автор: alex_asker 6.12.2008, 12:24 |
Всем Большое спасибо!!! Вопрос решен. ![]() |