Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Возведение в нецелую степень


Автор: Makarofff 27.2.2005, 12:01
Возведение в нецелую степень
Как реализовать?

Автор: Romtek 27.2.2005, 12:12
A^N = Exp(N * Ln (A)) {для A>0}

Автор: Makarofff 27.2.2005, 17:26
Цитата(Romtek @ 27.2.2005, 12:12)
A^N = Exp(N * Ln (A)) {для A>0}

Как будет для А<0?

Автор: dm9 27.2.2005, 18:47
А для отрицательных чисел операции возведения в степень не существует (кроме частных случаев). Это уже пойдёт переход в комплексную плоскость.

Автор: Aleche 27.2.2005, 18:47
Makaroff!!! ВОТ кое-что написала:
function power(b:real;n:integer):real;
begin
if b=o then power:=0 else
if b<0 then power:= neg(n)*exp(n*ln(-b)) else power:=exp(n*ln(b))
end;(возведение в степень ,n-степень)
function neg( exponent: integer):integer;
begin
if odd(exponent) then neg:=-1 else neg:=1
end;(возведение в степень -1 ) smile smile

Автор: Pakshin A. S. 27.2.2005, 18:50
У ти какая умная!!! smile smile

+ пользуйся тегами кода!!!!

P. S.
Sorry за оффтоп, не удержался!

Автор: Aleche 27.2.2005, 18:53
Да,да такая!!!!!!!!!!Какие теги????Уже второй раз на форуме спрашиваю -никто не отвечает!!!!А за оффтоп непростительно!!!!!! smile smile

Автор: Pakshin A. S. 27.2.2005, 18:57
[code@=delphi]сам код[/code@]
Без символа @

Автор: dm9 27.2.2005, 19:00
Тэги code.

Нажми на кнопку "КОД", и в поле ввода появятся тэги [ code ][ /code ] (без пробелов у квадратных скобок, сейчас вставил пробелы, чтобы форум их не обработал).

Можно тэги вводить просто руками.

Если пользоваться тэгами [ code ][ /code ], то форум подсветит код в соответствии с правилами того языка программирования, которому посвящён форум.

Можно также явно указать язык программирования (стиль подсветки).
Например, [ code=cpp ][ /code ] подсветит код в стиле C++,
[ code=delphi ][ /code ] - в стиле pascal/delphi.

Пример:

Код
program t;
begin
  write ('Hello, world!');
end.


Автор: Irokez 27.2.2005, 19:01
Код

if b=0 then power:=0
else power:= (n/abs(n))*exp(n*ln(abs(b)));

Автор: Zero 27.2.2005, 19:12
Цитата(dm9 @ 27.2.2005, 19:00)
(без пробелов у квадратных скобок, сейчас вставил пробелы, чтобы форум их не обработал)

А ещё можно было написать русские символы кое-где...
[cоde=delphi]

[/code]

Автор: Pakshin A. S. 27.2.2005, 19:16
Ну праильно... давайте придумывать как писать примеры... Для комодеров и выше можно использовать коды [mod][/mod]

Автор: Snowy 27.2.2005, 20:00
По теме:
А как начет того, что отрицательные числа, возведенные в четную степень становятся положительными?
А числа, возведенные в отрицательную степень равны обратному значению положительной степени?
В коде я этого не заметил...

Автор: Snowy 27.2.2005, 20:11
Понял, сам слепой.
Просто без тэгов плохо видно.
Только, чтобы од соответствовал теме и работал, его нужно чуть подправить:
Код

function power(b,n:real):real;
begin
 if b=0 then power:=0 else
 if b<0 then power:= neg(n)*exp(n*ln(-b))
 else begin
   power:=exp(n*ln(b));
   if odd(Round(b)) then power:=-power;    
 end;
end;

Вот так он работает и возводит в в нецелую степень.

Автор: dm9 27.2.2005, 20:22
Вот это и есть те исключения smile

Лучше уж сразу тогда в комплексной плоскости решение искать, чем все возможные варианты решения в действительных числах перебирать.

Что-то типа так:
Код
angle := 180 * Ord (base < 0) * power;
t_angle := Trunc (angle);
Result := Exp (power * Ln (Abs (base)));
if t_angle mod 360 = 180
then Result := -Result;
if (t_angle mod 180 <> 0.0) or (t_angle - angle <> 0.0)
then ShowMessage ('Решение существует только в комплексное плоскости');


Могут быть погрешности, но они примерно равны погрешностям определения целости числа power...

base - основание степени.
power - показатель.

Добавлено @ 20:26
Snowy, ну это не серьёзно smile У тебя код не совсем корректен.

Автор: Romtek 28.2.2005, 01:01
А причём здесь комплексные числа?
5.4^(-0.23) - комплексное число??

Цитата(dm9 @ 27.2.2005, 18:47)
А для отрицательных чисел операции возведения в степень не существует
3^(-2) = 1 / 3^2 ...

Автор: dm9 28.2.2005, 01:21
Цитата(Romtek @ 28.2.2005, 01:01)
5.4^(-0.23) - комплексное число??


(-5.4)^(-0.23) - комплексное число.


Цитата(Romtek @ 28.2.2005, 01:01)
3^(-2) = 1 / 3^2 ...


Я же написал, что кроме частных случаев.

Автор: Fedor 28.2.2005, 13:52
Модератор: давайте обсуждать теги форума где-нибудь в другом месте!

Автор: Marriage 28.2.2005, 16:59
А разве функции Power нет???
Или я чего то не понял ???

Автор: Fedor 28.2.2005, 19:09
Цитата(Marriage @ 28.2.2005, 15:59)
А разве функции Power нет???

в паскале? есчесно, первый раз слышу...

Автор: Marriage 28.2.2005, 19:19
Точно, спросил у своего знакомого, он ее здесь нашел
http://borlpasc.narod.ru/english/faqs/function.htm

Автор: Fedor 28.2.2005, 20:16
Цитата
Pascals do not have an inbuilt power function. You have to write one yourself.


Я это имел в виду. smile

Автор: Makarofff 2.3.2005, 17:53
Цитата(Marriage @ 28.2.2005, 19:19)
Точно, спросил у своего знакомого, он ее здесь нашел
http://borlpasc.narod.ru/english/faqs/function.htm

В общем в паскале нельзя возвести отрицательное число в дробнуй степень?
или мне повнимательней причитаться

Автор: Fedor 2.3.2005, 17:58
Цитата(Makarofff @ 2.3.2005, 16:53)
В общем в паскале нельзя возвести отрицательное число в дробнуй степень?
или мне повнимательней причитаться


Какова постановка задачи? У тебя допустимы комплексные решения? Если нет, то этого не только в паскале, а и вообще в алгебре нельзя сделать.

Автор: Makarofff 2.3.2005, 23:44
Цитата(Fedor @ 2.3.2005, 17:58)
Цитата(Makarofff @ 2.3.2005, 16:53)
В общем в паскале нельзя возвести отрицательное число в дробнуй степень?
или мне повнимательней причитаться


Какова постановка задачи? У тебя допустимы комплексные решения? Если нет, то этого не только в паскале, а и вообще в алгебре нельзя сделать.

X^Y при любых x,y

Автор: dm9 3.3.2005, 00:37
Что такое "любые"? Комплексные тоже?

Добавлено @ 00:38
Если решение действительное при действительных X и Y, то я тебе уже код написал. Что ещё надо? Переход в комплексную плоскость?

Автор: Fedor 3.3.2005, 17:29
Makarofff ты где учишся? если в школе, то точно без комплексных. smile И тогда решение уже тебе написали.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)