Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.46 MB
Время: 0.006 c
1-12688
просто Джо
2003-04-21 12:04
2003.05.05
Вот все тут спрашивают: как убрать полосу прокрутки...


14-12896
pawel
2003-04-17 14:05
2003.05.05
Русский HELP для Delphi6


14-12892
zatochka
2003-04-16 22:26
2003.05.05
Как сдаелать программу невидимой


1-12787
I.Ru.Ru
2003-04-22 10:50
2003.05.05
Как сохранить отчет QuickReport в формате doc?


8-12839
bigcrush
2003-01-28 15:31
2003.05.05
Где есть описание PNG





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