Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.14;
Скачать: CL | DM;

Вниз

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

 
Тень   (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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
1-45333
Lony
2002-10-05 17:05
2002.10.14
Сохранение запущенного приложения.


14-45530
MalkoLinge
2002-09-19 01:01
2002.10.14
DCU ----> pas !!!


14-45509
Alx2
2002-09-18 14:46
2002.10.14
Любителям эзотерики :)


1-45283
John Kayfolom
2002-10-04 10:47
2002.10.14
Получить уникальное значение


1-45343
fester
2002-09-24 20:38
2002.10.14
PalmOS