Главная страница
    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.48 MB
Время: 0.007 c
1-75989
Кто-то4
2003-02-12 09:55
2003.02.24
Как передать фокус Edit чтобы не выделялся текст?


1-75897
me2
2003-02-14 10:09
2003.02.24
Работа ListView


1-75993
lety
2003-02-11 22:49
2003.02.24
обработка событий


6-76070
greenrul
2003-01-05 17:31
2003.02.24
Как сделать плагин для IE?


1-75958
Qual
2003-02-12 14:36
2003.02.24
ВремечкО





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский