Форум: "Основная";
Текущий архив: 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.013 c