Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];

Вниз

Помогите, как программно вычислить квадратный корень.   Найти похожие ветки 

 
Тень   (2002-10-02 17:43) [0]

Народ! Помогите, как программно вычислить квадратный корень?.


 
MBo   (2002-10-02 17:44) [1]

SQRT


 
Тень   (2002-10-03 18:09) [2]

А по подробней...


 
Игорь Шевченко   (2002-10-03 18:11) [3]

А поподробнее в Help"е :-)


 
alena.svt   (2002-10-03 18:15) [4]

2Тень (03.10.02 18:09)
А по подробней...


А куда уже?


 
Best Before 2024   (2002-10-03 18:17) [5]

Тень (03.10.02 18:09)
>>А по подробней...
alena.svt © (03.10.02 18:15
>>А куда уже?

SQuareRooT





 
alena.svt   (2002-10-03 18:20) [6]

2Best Before 2024 (03.10.02 18:17)
А меня то ты че цепанул или ты че подробней объяснил :}


 
Best Before 2024   (2002-10-03 18:22) [7]

alena.svt © (03.10.02 18:20)
>>А меня то ты че цепанул или ты че подробней объяснил :}


Конечно, подробней - букв-то больше :)

P.S. цепанул :)))




 
Song   (2002-10-03 18:23) [8]

Лена, относись поспокойней к таким, надо народу хоть что-то сказать, когда нечего :-)


 
alena.svt   (2002-10-03 18:26) [9]

Миша я понимаю может мышь заело, но так я тут причем?
Конечно, подробней - букв-то больше :) Если это объяснения мне почему то на этом мысль заканчивается


 
alena.svt   (2002-10-03 18:36) [10]

Корень из числа: Функция Sqrt
Функция возращает квадратный корень от указаного значения
function Sqrt (x: extended): Extended:
Аргументы: x - действительное число, больше 0

Пример :
Sqrt(25); {функция вернет 5}
Из пособия для D5 Борис Карпов(с)


 
Best Before 2024   (2002-10-03 18:43) [11]

2 alena.svt © (03.10.02 18:36)
Пожалуйста, не обижайтесь. Не хотел Вас задеть никаким образом
Ответ был не Вам, а г-ну Тени.
Вы спросили (удивленно), куда же подробнее, я и сказал.

P.S.
Но Ваш последний постинг ставит все точки над i :)
Снимаю шляпу :)



 
Jeer   (2002-10-03 20:41) [12]

Да, но не все так просто..
Вот такая простенькая функция считает в 1.5 раза быстрее стандартной Дельфийской Power, правда в 4 раза медленнее Sqrt.
Для Sqrt есть и более эффективные алгоритмы.
Так, что не все так просто.:))

function QPower(Base, Exponent: Extended): Extended; assembler;
asm
fld Exponent
fld Base
fabs
fyl2x
fld st
frndint
fsub st(1),st
fxch st(1)
ftst
fstsw ax
sahf
jb @L0
f2xm1
jmp @L1
@L0:
fchs
f2xm1
fld1
fadd st,st(1)
fdivp st(1),st
fchs
@L1:
fld1
faddp st(1),st
fscale
fstp st(1)
end;


 
Le Taon   (2002-10-03 22:13) [13]

Есть много способов.
Например, так:

function SqRoot(X: Double): Double;
// 0 < X < 2
var
Xm1, Xm1n: Double;
n: Integer;
p, K, M: Double;
begin
p := 0.5;
Result := 1;
Xm1 := X - 1;
Xm1n := Xm1;
K := 1;
M := 1;
for n := 1 to 128 do
begin
K := K*(p - n + 1);
M := M*n;
Result := Result + xm1n*K/M;
Xm1n := Xm1n*Xm1;
end;
end;

:)))))


 
Jeer   (2002-10-03 22:47) [14]

Известна, но ближе к верхней границе дает погрешность порядка сотых долей процента.


 
Le Taon   (2002-10-03 23:19) [15]

Jeer © (03.10.02 22:47)
Не воспринимай так серьёзно.


 
Jeer   (2002-10-03 23:32) [16]

>Le Taon (03.10.02 23:19)
Видишь ли..
Если ты не сделал оценку - значит промазал.
Если же шутка - слишком много предложений.

:))


 
Le Taon   (2002-10-04 00:50) [17]

Ну так вот тебе отличнейшая функция квадратного корня,
работает для любых Х >= 0.

Работает очень быстро, всего в 100 раз медленнее Sqrt.

function SqRoot2(X: Double): Double;
// 0.1 < X < 1.9
var
Xm1, Xm1n: Double;
n: Integer;
p, K, M: Double;
begin
p := 0.5;
Result := 1;
Xm1 := X - 1;
Xm1n := Xm1;
K := 1;
M := 1;
for n := 1 to 128 do
begin
K := K*(p - n + 1);
M := M*n;
Result := Result + xm1n*K/M;
Xm1n := Xm1n*Xm1;
end;
end;

function SqRoot(X: Double): Double;
const
Sqrt2 = 1.4142135623730950488016887242097;
var
i, N: Integer;
begin
N := 0;
Result := 0;
if X = 0 then Exit;
if X < 0 then raise Exception.Create("Твою мать...");

if X > Sqrt2 then
begin
repeat
X := X/2;
N := N + 1;
until X <= Sqrt2;
Result := SqRoot2(X);
for i := 0 to N-1 do Result := Result*Sqrt2;
end else
begin
repeat
X := X*2;
N := N + 1;
until X >= Sqrt2;
Result := SqRoot2(X);
for i := 0 to N-1 do Result := Result/Sqrt2;
end;
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
3-45205
Андрусь
2002-09-19 16:56
2002.10.14
Помогите разобраться с фильтром на Odac


3-45231
Cobalt
2002-09-19 21:53
2002.10.14
Ограничение в 255 символов


14-45518
DrAlban
2002-09-18 20:37
2002.10.14
Что такое полиморфизм в дельфи ?


1-45447
Th
2002-10-03 18:05
2002.10.14
Перенос слов в TLabel.Caption


1-45390
bbn
2002-10-02 20:58
2002.10.14
Как установить фокус на программно-созданном элементе ?





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