Помощь - Поиск - Пользователи - Календарь
Полная версия: корень нечетной степени
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
sheka
как добыть корень нечетной степени?

я пробовал разложить нечетную степень через четные, но ничего не получается.( например 7 степени)
volvo
Что значит "не получается"? Возводить в степень 1/7, например, пробовал?
sheka
Цитата(volvo @ 4.06.2009 0:12) *

Что значит "не получается"? Возводить в степень 1/7, например, пробовал?

это как? из этой темы знаю есть sqr, sqrt.
Lapp
Цитата(sheka @ 4.06.2009 1:31) *
это как? из этой темы знаю есть sqr, sqrt.
Еще есть Exp(x) и Ln(x) из той же темы)).
Знаешь такие функции и формулы для них?
sheka
Цитата(Lapp @ 4.06.2009 0:39) *

Еще есть Exp(x) и Ln(x) из той же темы)).
Знаешь такие функции и формулы для них?

что такое логарифм когда-то слышал, но причем тут натуральный? а что такое экспонента - название знаю.
если можешь вкратце сказать - скажи, нет - я почитаю, потом спрошу.
Lapp
Натуральный при том, что именно он есть в стандартной библиотеке. Ко всему прочему, именно он напрямую связан с экспонентой (а точнее, является обратной функцией к ней).
Цитата(sheka @ 4.06.2009 1:54) *
если можешь вкратце сказать - скажи
Могу и вкратце, если хочешь.

exp(x) <=> ex

a = eLn(a)

ax = (eLn(a))x = eLn(a)*x = exp(Ln(a)*x)
evg
Цитата(Lapp @ 4.06.2009 2:15) *

Натуральный при том, что именно он есть в стандартной библиотеке. Ко всему прочему, именно он напрямую связан с экспонентой (а точнее, является обратной функцией к ней).
Могу и вкратце, если хочешь.

exp(x) <=> ex

a = eLn(a)

ax = (eLn(a))x = eLn(a)*x = exp(Ln(a)*x)

подскажите, почему по учебной программе,мне при вводе sgrt(пробовал и sgr) выходит ошибка индификатора
volvo
Потому что не SGRT, а SQRT
evg
Цитата(volvo @ 31.05.2010 19:35) *

Потому что не SGRT, а SQRT

Спасибо.Говорила мама учи английский.Попался на написании прописных.
sheka
а если основа отрицательная, то просто проверять условием? и потом доумножать на -1 ?
volvo
Цитата
а если основа отрицательная, то
любой нормальный компилятор выбросит исключение (в частности, FPC выбрасывает EInvalidArgument). Дельфи - EInvalidOp... А теперь подумай, что, не могли авторы предусмотреть такой простой вещи, как
Цитата
проверять условием? и потом доумножать на -1 ?
? Или, может, по другой причине не стали реализовывать данный функционал?
sheka
Честно, я вообще не могу понять, почему авторы не могли предусмотреть функции поднесения в степень. Разве что в определенных случаях это может кому-нибудь навредить, хотя я не представляю кому и чем.
Вот думал сделать так:
if x <> 0 then znam := exp(ln(abs(x))/3);
if x < 0 then znam := -znam;

но не понимаю, чем это Вам не нравится.
К чему вы клоните? smile.gif к тому, что это надо делать исключениями? Ну в таком случае, почему-то ФП слово try распознает как переменную:
  try
znam := exp(ln(x)/3);
except
on EinvalidArgument do znam := exp(ln(-x)/3);
on EZeroDivide do znam := 0;
end;
volvo
Цитата
не понимаю, чем это Вам не нравится.
Мне? Да я вообще ничего про себя не говорил. Я говорил о том, что в компиляторах, более продвинутых чем Турбо Паскаль, этого функционала НЕТ. Это констатация факта, и призыв подумать над тем, почему его нет. А не изобретать велосипед.

Цитата
это надо делать исключениями? Ну в таком случае, почему-то ФП слово try распознает как переменную:
Вообще-то надо добавлять "у меня". Вот нормально настроенный FPC - не воспринимает:
Нажмите для просмотра прикрепленного файла

Кстати, здесь выбрасывается EInvalidOp, потому что нельзя вычислять логарифм от отрицательного значения. А вот использование Math.Power выбросит именно EInvalidArgument...

А вообще, надо бы использовать модуль Math, там уже есть функция Power. Зачем понадобилось переписывать вручную - непонятно.
sheka
Извините за недоходчивость, о каком "данном функционале" идет речь? Вы говорите о том, что вот этим
if x <> 0 then znam := exp(ln(abs(x))/3);
if x < 0 then znam := -znam;
пользуются только на Турбо Паскале, а в более новых компиляторах - исключениями или подключают модуль Math?

Эх.. Начинаю знакомиться с ТП. Вот через месяц начну. А пока выдали лабораторные на семестр. Я открыл первую, вот там задание (чуть упростил) : вывести на экран результат a = 1/КореньКубический(х)
Lapp
Цитата(sheka @ 6.09.2010 23:49) *
Извините за недоходчивость, о каком "данном функционале" идет речь? Вы говорите о том, что вот этим
if x <> 0 then znam := exp(ln(abs(x))/3);
if x < 0 then znam := -znam;

sheka, то, что ты написал - это просто неверно (то есть верно только при многих огворках). И причина не в ограниченности программных средств, а в математике. Тут был топик про отрицательные основания, поищи его. В общем случае операция возведения в степень определена только на комплесных числах, а их аппаратной реализации пока нет. В частном случае целой нечетной степени корня ее выполнение возможно без выхода за пределы действительных чисел (если отбросить остальные значения), но это довольно большая условность. Поэтому реализация данного функционала оставлена пользователю )).
Lapp
вот та тема:
возведение в вещественную степень отрицательного числа
Правда, там в самом конце пришел какой-то Пупорев и не разобравшись (наверное, даже и не прочитав) тоже влепил все ту же ошибку, типа он самый умный, чтоб всем "помочь"..
sheka
Спасибо за подробное объяснение!!!
Видно плохо в школе учился. yes2.gif

Ну если вдруг буду сочинять задания сам - никогда такого не придумаю. Но что мне делать если все таки надо посчитать x1/3? Если x<0 выводить "ошибка"? а если х = 0, тогда выводить 0 или тоже "ошибка"?
TarasBer
> как добыть корень нечетной степени?
> Но что мне делать если все таки надо посчитать x1/3?

Сначала определись.

x^(1/3) официально не определён для x < 0
3Vx (типа корень третьей степени я так нарисовал) официально определён для всех вещественных икс, причём 3V(-x)=-3Vx.
То есть x^(1/3) и 3Vx это разные вещи как бы.
sheka
Вот как-то никогда не думал, что x^(1/3) и 3Vx это разные вещи. good.gif
Мира
помогите пожалуйста срочно!!!! wacko.gif blink.gif
корень в кубе |(x-a)|
как написать это в программе
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.