скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

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



Автор: 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;

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






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook