Функция Power
Подпишись на новости, чтобы ничего не пропустить
Функция Power в Паскале (и многих других языках программирования) выполняет возведение числа в степень.
Синтаксис для вещественных чисел:
function Power(Base: Double; Expon: Double) : Double;
Синтаксис для целых чисел:
function Power(Base: LongInt; Expon: LongInt) : LongInt;
Эта функция возводит число Base в степень Expon и возвращает результат. В реальности функция возвращает результат выражения:
Пример использования функции Power
Пример приведён ниже:
Здесь мы число 2 (переменная Х) возводим в степень 3 (переменная Y), то есть вычисляем следующую формулу:
Обратите внимание на подключенный модуль MATH.
Эта статья входит в раздел о подпрограммах модуля SYSTEM. И по идее описания функции Power здесь не должно быть. Но, так как в документации сказано, что функция Power объявлена в модуле SYSTEM, я решил включить данную статью именно в этот раздел (я же не виноват, что в документации косяк))).
Возведение в степень в Паскале
Возведение в степень в Паскале можно выполнить и без какой-то специальной функции, используя функцию вычисления натурального логарифма и функцию вычисления экспоненты. О том, как это сделать, я рассказал здесь.
В документации сказано, что по сути функция Power работает по формуле возведения в степень в Паскале:
Однако, если мы будем делать именно так, эта формула будет неправильно работать с отрицательными числами, потому что в документации сказано, что функция Ln работает только с положительными числами.
Так что функция Power в реальности несколько сложнее, чем приведённая выше формула.
Поэтому для разминки мы напишем свой аналог функции Power, который будет работать правильно. Но для начала вспомним как вычисляется степень числа:
А теперь наш аналог функции Power:
Я сознательно немного всё усложнил, чтобы вас запутать )))
Пример использования функций Power и её аналога в программе:
то стандартная функция Power вызовет ошибку во время выполнения программы. В своём аналоге я этого избежал, но надо понимать, что результат в этом случае будет неправильным (хотя с моей точки зрения это всё-равно лучше, чем аварийное завершение программы).
Это происходит потому, что при таком раскладе результатом являются комплексные числа, а операции с комплексными числами выполняются по другим правилам.
В реальных программах подобные ситуации надо дополнительно обрабатывать (хотя бы предупреждать пользователя о том, что при отрицательном основании и не целой степени функция вернёт неправильный результат).
Ещё в моей функции используется функция Odd, о которой я ещё не рассказывал. Вкратце скажу, что она определяет, является ли число чётным. Более подробно о ней расскажу в отдельной статье.
Возведение в степень в паскале
Вопросы «возвденеие в степень pascal» или «возведение в степень на Паскале» являются наиболее популярными в своей тематике. Не всегда представляется возможным умножать число само на себя (например x := x * x;) в силу динамично изменяющихся параметров задачи, да и при больших показателях степени размер кода может увеличиться во много раз. Кроме того, подобное выражение не предусматривает возможность возведения числа в дробную степень.
Возведение в степень в паскале можно реализовать несколькими способами. Рассмотрим их, установив преимущества и недостатки каждого
Универсальная функция возведения в степень в pascal
if (x 0) then pow := Exp(y*Ln(Abs(x))) else
if (l mod 2 = 0) then R:=Abs(pow);
if (y = 0) then Pow :=1;
Возведение в степень с помощью цикла
Является одним из самых простых и быстрых способов. Задается цикл от единицы до требуемого показателя, в котором основание складывается с самим собой. Организовать подобный алгоритм можно использовав как for, так и while или repeat.
if ((not odd(pow)) and (pow
Возведение в степень с помощью рекурсии
Аналогично предыдущему итерационному способу. Отличие заключается только в том, что вместо очередного вызова тела цикла используется вызов функции (рекурсия).
Возведение в степень в pascal для целого показателя, вычисляемого за время log2(pow)
Данный алгоритм также, как и два предыдущих работает только с целыми показателями степени. Однако, время затрачиваемое на вычисление существенно сокращается.
function power (x,pow:integer):integer;
if (pow and 1 = 1) then res := res * x;
Таким образом, возвести число в степень в паскале с дробным показателем может позволить только универсальная функция возведения в степень. Использование первого способа является наиболее быстродейственным. Это особенно заметно, при больших значениях степени и большого числа знака после запятой. Следует отметить, что помимо перечисленных выше способов существуют и другие алгоритмы реализующие в Turbo Pascal возведение в степень.
Как в паскале написать степень числа
Pers.narod.ru. Алгоритмы. Некоторые математические расчёты на Паскале
Как известно, ядро Паскаля предельно компактно, и многие математические функции в модуле System просто отсутствуют. Поэтому у людей, изучающих основы программирования именно на этом языке, типовые математические расчёты зачастую вызывают проблемы. Далее приводятся пути решения наиболее типичных из этих проблем.
Возведение в произвольную степень на Паскале
Для целого b и не равного нулю a выгоднее считать с помощью экспоненты и логарифма, не забывая о том, что не существует логарифмов от отрицательных чисел:
Вычисление корня произвольной степени на Паскале
Стандартная функция sqrt умеет извлекать только квадратный корень.
Вычисление логарифмов на Паскале
Стандартная функция ln вычисляет только натуральный логарифм. Для вычисления логарифмов по другим основаниям можно применить формулу log a b = ln b / ln a :
В частности, для вычисления десятичного логарифма lg b можно записать:
Вычисление обратных тригонометрических функций (арксинусов и арккосинусов) на Паскале
В Паскале имеется стандартная функция arctan для вычисления арктангенса.
Другие обратные тригонометрические функции могут быть выражены через неё с помощью формул тригонометрии.
на практике следует помнить о возможных погрешностях при сравнении вещественных чисел (глава учебника, п.7.2).
Вычисление полярных углов на Паскале
Проблема с приведением типов на Паскале
Начинающие «паскалисты» нередко не понимают строгой типизированности этого языка, из-за чего находят в нём несуществующие «баги». Вот простейший пример.