Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-75931
Ricky-Ticky-Tavy
2003-02-14 09:02
2003.02.24
OLE, Word2000, Delphi5, WinME не получается


1-75992
Novice
2003-02-12 18:30
2003.02.24
Сообщения при сворачивании в таскбар


6-76054
mady
2002-12-24 23:50
2003.02.24
БЕЗ ПИВА НЕ ПИШЕТСЯ КАК СЧИТАТЬ ТРАФИК (ПОМОГИТЕ)


1-76016
edicon
2003-02-13 00:40
2003.02.24
ComboBox


1-76006
ALex44
2003-02-13 09:40
2003.02.24
PostMessage & Thread





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский