Страница 1 из 2

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

СообщениеДобавлено: 28.02.2009 13:03:48
Andreich
Вопрос : Если писать на чистом паскале, то там нет функции возведения числа в степень (^). Что делать?

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

Код: Выделить всё
X^Y = exp(ln(X)*Y)

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

СообщениеДобавлено: 16.10.2011 09:11:50
modestusmunh
Нет результата.
Ошибка в строке, где используются Экспонента и Логарифм натуральный.
Код: Выделить всё
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 и т.д.

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

СообщениеДобавлено: 16.10.2011 09:56:40
sign
У меня всё без ошибок прошло.

Код: Выделить всё
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

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

СообщениеДобавлено: 16.10.2011 10:20:03
AlexVinS
Оператор возведения в степень это **. Для чисел с плавающей точкой этот оператор определен в модуле Math. Там же и функция возведения в степень.

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

СообщениеДобавлено: 16.10.2011 13:33:40
Odyssey

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

СообщениеДобавлено: 22.04.2012 18:09:32
VSL
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;

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

СообщениеДобавлено: 22.04.2012 19:23:22
kosteek
А можно ли содрать ф-цию power из модуля math?

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

СообщениеДобавлено: 23.04.2012 16:36:50
VSL
kosteek писал(а):А можно ли содрать ф-цию power из модуля math?

Попробовал. В целом все работает, но не возводит отрицательное число в дробную степень. Нужен универсальный алгоритм.

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

СообщениеДобавлено: 23.04.2012 18:05:10
sign
Чему равен квадратный корень из -1?

Добавлено спустя 3 минуты 24 секунды:
В помощь

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

СообщениеДобавлено: 23.04.2012 18:37:35
Little_Roo
VSL писал(а): В целом все работает, но не возводит отрицательное число в дробную степень.

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

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

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

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

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

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

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

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

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

В математике мало какие вычислительные операции не имеют смысла. Результатами приведённых выражений будут комплексные числа.

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

СообщениеДобавлено: 05.07.2013 05:38:34
SSerge
sv503 писал(а):Результатами приведённых выражений будут комплексные числа.


Провокационный вопрос: к какому типу переменной соотносятся комплексные числа?
Если задуматься над этим аспектом, то у вас все вычисления с такими числами должны быть в математике, которая работает с комплексными числами, а тут проблема не только с возведением в степень :D

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

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