Форум: "Основная";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];
ВнизВозведение числа в степень Найти похожие ветки
← →
Dan (2003-02-14 08:41) [0]Братва, подскажите есть ли в Дельфях функция с помощью которой
можно возвести число в вещественную(real) степень, если
такой функции нет, то как это можно организовать?
← →
TButton (2003-02-14 08:44) [1]в стандартном дистрибутиве такой функции нет. по крайней мере мне она не известна
← →
Danilka (2003-02-14 08:45) [2]power
← →
Danilka (2003-02-14 08:47) [3]TButton © (14.02.03 08:44)
Ваш возраст несколько настораживает...
← →
Ricky-Ticky-Tavy (2003-02-14 08:53) [4]Есть - exp(n*ln(a)), где a-число, n-степень.
← →
Danilka (2003-02-14 09:09) [5]Ricky-Ticky-Tavy © (14.02.03 08:53)
в коде напиши power, нажми Ctrl и кликни левой мышкой на нем...
так что лучше все-таки его использовать, а не exp(n*ln(a))
← →
Palladin (2003-02-14 09:18) [6]юнит Math если лень мышкой тыкнуть :)
← →
Anatoly Podgoretsky (2003-02-14 09:35) [7]TButton © (14.02.03 08:44)
Зато она есть в Pro и Enterprize
← →
Chubais (2003-02-14 09:46) [8]
> Dan (14.02.03 08:41)
> Братва,
гыыы
← →
Sheriff (2003-02-14 10:19) [9]exp(n*ln(a)) выполняется быстрее, чем Power примерно в 2,5 раза.
?
:)
← →
DVM (2003-02-14 10:24) [10]
> exp(n*ln(a)) выполняется быстрее, чем Power примерно в 2,5
> раза.
Потому что делает дополнительные проверки исходных данных.
← →
Anatoly Podgoretsky (2003-02-14 10:33) [11]Выписка из функции Power
Result := Exp(Exponent * Ln(Base))
А проверки на допустимость все равно надо делать, кроме того в функции проведена кой какая оптимизация в зависимости от операндов.
← →
Danilka (2003-02-14 10:35) [12]Sheriff (14.02.03 10:19)
function Power(Base, Exponent: Extended): Extended;
begin
if Exponent = 0.0 then
Result := 1.0 { n**0 = 1 }
else if (Base = 0.0) and (Exponent > 0.0) then
Result := 0.0 { 0**n = 0, n > 0 }
else if (Frac(Exponent) = 0.0) and (Abs(Exponent) <= MaxInt) then
Result := IntPower(Base, Integer(Trunc(Exponent)))
else
Result := Exp(Exponent * Ln(Base))
end;
но эти проверки никак не могут столько занимать времени...
← →
Anatoly Podgoretsky (2003-02-14 10:42) [13]Наоборот эти проверки ускоряют в этих случаях
← →
Sheriff (2003-02-14 10:48) [14]exp(0.0*ln(5.5)) быстрее Power(5.5,0.0) ~ в 7,5 раз
← →
Sheriff (2003-02-14 10:59) [15]приношу свои извинения...
поторопился с выводами:
все с точностью до наоборот (вместо быстрее читать медленнее)
еще раз извиняюсь.
← →
Anatoly Podgoretsky (2003-02-14 11:09) [16]А у меня совсем другие результаты, абсодютно противоположные и главное ожидаемые, соответствующие тексту функции.
И что бы не быть головословным, вот текст проверки.
485(ln) и 84(power)
procedure TForm1.Button1Click(Sender: TObject);
var
Num: Extended;
I : Integer;
T : Integer;
begin
T := GetTickCount;
for I := 1 to 1000000 do Num := Exp(0.0 * ln(5.5));
Label1.Caption := IntToStr(GetTickCount-T);
T := GetTickCount;
for I := 1 to 1000000 do Num := Power(5.5,0.0);
Label2.Caption := IntToStr(GetTickCount-T)
end;
← →
Anatoly Podgoretsky (2003-02-14 11:10) [17]Извинения приняты
← →
pasha676 (2003-02-14 11:31) [18]Но это частный случай. В проге имхо надо писать и то и другое в зависимости от ожидаемой области определения.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c