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

Вниз

Более быстрая формулы вычисления квадратного корня   Найти похожие ветки 

 
KAA ©   (2003-04-16 18:58) [0]

Можно ли написать более быструю формулу расчета квадратного корня, чем sqrt, пусть даже с меньшей точностью?


 
alxx ©   (2003-04-16 19:10) [1]

Табличку сделай. Или рядами Тейлора.


 
KAA ©   (2003-04-16 19:11) [2]

А нет ли у кого готовой и отлаженной функции?


 
Serginio   (2003-04-16 19:41) [3]

Смотри сходящиеся ряды. Все нелинейные функции так вычисляются.


 
neuro ©   (2003-04-16 20:09) [4]

Учебник по "Численным Методам" спасет отца русской демократии.


 
KAA ©   (2003-04-16 20:11) [5]

Учебник по численным методам еще где-то найти надо, у меня его нет. Вот если в инете это где-нибудь НОРМАЛЬНО описывается?


 
Marser ©   (2003-04-17 13:19) [6]

Биномиальный ряд.Ищи в справочниках по матану.Реализется элементарно


 
Radionov Alexey ©   (2003-04-17 13:41) [7]

fsqrt сопроцессора неужто такая медленная?


 
KAA ©   (2003-04-17 14:37) [8]

А что за функция fsqrt? Где она? Как вызвать?

Вообще первоначальный вопрос можно немного изменить, нужна более быстрая функция вычисления растояния между двумя точками, чем n=sqrt(sqr(x1-x2)+sqr(y1-y2)) ?


 
Radionov Alexey ©   (2003-04-17 14:58) [9]

>KAA © (17.04.03 14:37)
В D6 есть расстояние (шустрое):

function Hypot(const X, Y: Extended): Extended;
{ formula: Sqrt(X*X + Y*Y)
implemented as: |Y|*Sqrt(1+Sqr(X/Y)), |X| < |Y| for greater precision
var
Temp: Extended;
begin
X := Abs(X);
Y := Abs(Y);
if X > Y then
begin
Temp := X;
X := Y;
Y := Temp;
end;
if X = 0 then
Result := Y
else // Y > X, X <> 0, so Y > 0
Result := Y * Sqrt(1 + Sqr(X/Y));
end;
}
asm
FLD Y
FABS
FLD X
FABS
FCOM
FNSTSW AX
TEST AH,$45
JNZ @@1 // if ST > ST(1) then swap
FXCH ST(1) // put larger number in ST(1)
@@1: FLDZ
FCOMP
FNSTSW AX
TEST AH,$40 // if ST = 0, return ST(1)
JZ @@2
FSTP ST // eat ST(0)
JMP @@3
@@2: FDIV ST,ST(1) // ST := ST / ST(1)
FMUL ST,ST // ST := ST * ST
FLD1
FADD // ST := ST + 1
FSQRT // ST := Sqrt(ST)
FMUL // ST(1) := ST * ST(1); Pop ST
@@3: FWAIT
end;



fsqrt - команда сопроцессора, которую компилятор вставляет при обработке вызова sqrt


 
KAA ©   (2003-04-17 15:32) [10]

А чем этот способ быстрее, все равно есть вычисление квадратного корня.
И еще, требуется растояние не на плоскости, а в объеме, т.е. с тремя координатами.


 
Radionov Alexey ©   (2003-04-17 15:51) [11]

Тогда таблица с интерполяцией. Но имхо это будет вряд ли быстрее, чем fsqrt



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

Текущий архив: 2003.05.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
8-12842
VinRaider
2003-01-18 00:43
2003.05.05
Перемещение курсора


14-12863
Чек
2003-04-16 17:40
2003.05.05
Приватизационный чек!!!


3-12663
dim
2003-04-16 15:10
2003.05.05
Нужен многострочный DBGrid


1-12770
Пубертанец
2003-04-22 10:24
2003.05.05
Как узнать глубину вложенности TreeView?


3-12656
PrettyFly
2003-04-16 13:47
2003.05.05
Функции...