Как в FreePascal возвести число в степень?

Модератор: Модераторы

Как в FreePascal возвести число в степень?

Сообщение Andreich » 28.02.2009 13:03:48

Вопрос : Если писать на чистом паскале, то там нет функции возведения числа в степень (^). Что делать?

Ответ : 1
Среда : -
Операционная система : любая
Зависимости : -
Источник : http://freepascal.ru/forum/viewtopic.php?f=23&t=3704#p27402
Теги : числа, возведение в степень

Код: Выделить всё
X^Y = exp(ln(X)*Y)
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Как в FreePascal возвести число в степень?

Сообщение modestusmunh » 16.10.2011 09:11:50

Нет результата.
Ошибка в строке, где используются Экспонента и Логарифм натуральный.
Код: Выделить всё
fZi:=EXP(3*LN(Zi))-SQR(Zi)*((b*P)/(R*T)+1)+(Zi*a*P)/(SQR(R)*SQR(T))-(a*b*SQR(P))/(EXP(3*LN(R))*EXP(3*LN(T)));

Как быть, не знаю. Пришлось заменять на Zi*Zi*Zi и т.д.
modestusmunh
новенький
 
Сообщения: 13
Зарегистрирован: 07.09.2011 16:51:00

Re: Как в FreePascal возвести число в степень?

Сообщение sign » 16.10.2011 09:56:40

У меня всё без ошибок прошло.

Код: Выделить всё
var fZi, Zi, b, P, R, T, l, k, a: Extended;
begin
  Zi := 3; b := 3; P := 3; R := 3; T := 3; a := 3;
  fZi:=EXP(3*LN(Zi))-SQR(Zi)*((b*P)/(R*T)+1)+(Zi*a*P)/(SQR(R)*SQR(T))-(a*b*SQR(P))/(EXP(3*LN(R))*EXP(3*LN(T)));   

Результат: 9.2222222222222214
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Как в FreePascal возвести число в степень?

Сообщение AlexVinS » 16.10.2011 10:20:03

Оператор возведения в степень это **. Для чисел с плавающей точкой этот оператор определен в модуле Math. Там же и функция возведения в степень.
Аватара пользователя
AlexVinS
новенький
 
Сообщения: 95
Зарегистрирован: 27.01.2009 01:18:01


Re: Как в FreePascal возвести число в степень?

Сообщение VSL » 22.04.2012 18:09:32

Odyssey писал(а):http://www.freepascal.org/docs-html/rtl/math/intpower.html
http://www.freepascal.org/docs-html/rtl/math/power.html

Похоже это не совсем то что нужно.
-5 в квадрат возводит правильно, а вот 5 в минус вторую степень не хочет, выдает ноль.

Специально искал такую тему. Очень нужен алгоритм возведения в степень для подпрограммы. Алгоритм должен быть универсальным, работать с дробными числами любого знака. Есть такой?

Я сам вот такой алгоритм накидал, подскажите, есть в нем ошибки?

Код: Выделить всё
function stp(Osnovan,Stpn:real):real; //Подпрограмма вычисления степени
var pow:real;
   begin
   if (Stpn=0) then pow:=1 else
      if (Osnovan > 0) then pow:= Exp(Stpn*Ln(Abs(Osnovan))) else
         if (Osnovan < 0) then pow:= (-1)*Exp(Stpn*Ln(Abs(Osnovan))) else
            if (Osnovan=0) then pow:=0;
   stp:=pow;
end;
VSL
новенький
 
Сообщения: 11
Зарегистрирован: 22.04.2012 15:14:39

Re: Как в FreePascal возвести число в степень?

Сообщение kosteek » 22.04.2012 19:23:22

А можно ли содрать ф-цию power из модуля math?
kosteek
постоялец
 
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Re: Как в FreePascal возвести число в степень?

Сообщение VSL » 23.04.2012 16:36:50

kosteek писал(а):А можно ли содрать ф-цию power из модуля math?

Попробовал. В целом все работает, но не возводит отрицательное число в дробную степень. Нужен универсальный алгоритм.
VSL
новенький
 
Сообщения: 11
Зарегистрирован: 22.04.2012 15:14:39

Re: Как в FreePascal возвести число в степень?

Сообщение sign » 23.04.2012 18:05:10

Чему равен квадратный корень из -1?

Добавлено спустя 3 минуты 24 секунды:
В помощь
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Как в FreePascal возвести число в степень?

Сообщение Little_Roo » 23.04.2012 18:37:35

VSL писал(а): В целом все работает, но не возводит отрицательное число в дробную степень.

А разве подкоренное (число в дробной степени) выражение не должно быть НЕОТРИЦАТЕЛЬНЫМ ????? :shock:
Курим ОДЗ
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 638
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Как в FreePascal возвести число в степень?

Сообщение daesher » 23.04.2012 22:25:52

Little_Roo писал(а):А разве подкоренное (число в дробной степени) выражение не должно быть НЕОТРИЦАТЕЛЬНЫМ ????? :shock:
Курим ОДЗ

Не совсем. Например, корень нечётной степени будет действительным для любого действительного аргумента. С отрицательным аргументом стандартная функция power не работает.
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

Re: Как в FreePascal возвести число в степень?

Сообщение absdjfh » 13.03.2013 22:19:03

Хоть тема и старая, но все же важно замечание.
daesher писал(а):Не совсем. Например, корень нечётной степени будет действительным для любого действительного аргумента. С отрицательным аргументом стандартная функция power не работает.

Вы не правы, хотя в этом рассуждении есть логика (которую я хотел бы поддерживать). Но любой учебник математики говорит, что
Выражения (-2)^(1/3), (-243)^(3/5), (-16)^(2/3) не имеют смысла, так как по определению основание степени с рациональным показателем может быть только неотрицательным.
absdjfh
новенький
 
Сообщения: 60
Зарегистрирован: 21.01.2012 13:59:00

Re: Как в FreePascal возвести число в степень?

Сообщение sv503 » 04.07.2013 12:51:00

absdjfh писал(а):Выражения (-2)^(1/3), (-243)^(3/5), (-16)^(2/3) не имеют смысла, так как по определению основание степени с рациональным показателем может быть только неотрицательным.

В математике мало какие вычислительные операции не имеют смысла. Результатами приведённых выражений будут комплексные числа.
sv503
незнакомец
 
Сообщения: 1
Зарегистрирован: 04.07.2013 11:58:59

Re: Как в FreePascal возвести число в степень?

Сообщение SSerge » 05.07.2013 05:38:34

sv503 писал(а):Результатами приведённых выражений будут комплексные числа.


Провокационный вопрос: к какому типу переменной соотносятся комплексные числа?
Если задуматься над этим аспектом, то у вас все вычисления с такими числами должны быть в математике, которая работает с комплексными числами, а тут проблема не только с возведением в степень :D
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Как в FreePascal возвести число в степень?

Сообщение Undernooob » 27.09.2016 19:12:41

Не так давно начал изучать fpc и столкнулся с проблемой возведения в степень, а именно x^(0.1x) при том что x принимает значения от - 10 до -2 и значения типа real, например, число -9.6 в калькуляторе возводится в степень -0.96, а -7.8 в степень -0.78 - нет, и так же надо бы в паскале чтоб возводило
Undernooob
незнакомец
 
Сообщения: 1
Зарегистрирован: 27.09.2016 19:01:39

След.

Вернуться в Алгоритмы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru