Главная страница
    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-12706
Vovanich
2003-04-23 13:55
2003.05.05
WebUpdate


1-12772
Зинец Виктор
2003-04-22 10:06
2003.05.05
Q: как при запуске сделать главную форму невидимой?


1-12808
Bug
2003-04-18 11:07
2003.05.05
Stay On Top


4-12978
cult
2003-03-06 13:18
2003.05.05
Как загрузить ресурсы из DLL-ки?


14-12908
sevlad
2003-04-17 14:15
2003.05.05
KeyboardHook + XP + D7





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