Форум: "Потрепаться";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];
ВнизБолее быстрая формулы вычисления квадратного корня Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c