Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Корректная функция возведения в степень

Delphi , Синтаксис , Математика



Автор: Mikel
WEB сайт: http://forum.vingrad.ru

function power(Base, Exponent: Extended): Extended;
var
  ex: extended;
begin
  power := 0;
  if (exponent <> 0)
    and (frac(trunc((1 / exponent) * 1000000) / 1000000) = 0)
    and (base < 0) then
  begin
    if round(1 / exponent) mod 2 = 0 then
      exit;
    ex := Exp(Exponent * Ln(-Base));
    power := -ex;
  end
  else
  begin
    if Exponent = 0.0 then
      power := 1.0
    else if (Base = 0.0) and (Exponent > 0.0) then
      power := 0.0
    else if (Frac(Exponent) = 0.0) and (Abs(Exponent) <= MaxInt) then
      power := IntPower(Base, Integer(Trunc(Exponent)))
    else
      power := Exp(Exponent * Ln(Base))
  end;
end;

Теперь можем вычислить нечетный корень из отрицательного числа

Приведенный код на Delphi определяет функцию power, которая вычисляет результат возведения основы в степень мощности. Функция принимает два параметра: Base и Exponent, оба типа Extended.

Вот разбивка функции:

  1. Она инициализирует локальную переменную ex в значение 0.
  2. Если экспонента не равна нулю, а также целочисленная (т.е., дробная часть равна нулю) и основа отрицательная:
    • Она проверяет, является ли обратное значение экспоненты четным.
    • Если это так, функция выходит без вычисления мощности.
    • В противном случае она вычисляет результат с помощью функции экспоненты с логарифмом основы и экспоненты, а затем отрицает результат.
  3. Если экспонента равна нулю, функция возвращает 1.
  4. Если основа равна нулю и экспонента положительная, функция возвращает 0.
  5. Если дробная часть экспоненты равна нулю и абсолютное значение экспоненты меньше или равно MaxInt, функция вычисляет мощность с помощью целочисленной экспоненциации (т.е., повторного умножения).
  6. В противном случае функция вычисляет результат с помощью функции экспоненты с логарифмом основы и экспоненты.

Комментарии предполагают, что эта функция может использоваться для вычисления нечетной корневой отрицательного числа.

Альтернативное решение:

function power(base, exponent: Extended): Extended;
begin
  if exponent = 0 then
    Result := 1
  else if base = 0 and exponent > 0 then
    Result := 0
  else
    Result := exp(exponent * ln(abs(base)));
end;

Эта функция проще и более эффективна, чем оригинальная. Она использует функции exp и ln из библиотеки математических функций Delphi для вычисления мощности, которые вероятно будут более точными и быстрее, чем оригинальное реализация.

Обратите внимание, что это альтернативное решение не обрабатывает специальный случай, когда основа отрицательна и экспонента целочисленная, так как не ясно, какой поведение ожидается в этом случае. Оригинальная функция обрабатывает этот случай с помощью другой формулы, но альтернативное решение просто возвращает результат на основе абсолютного значения основы.

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Математика ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 06:17:14/0.0034449100494385/0