Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Alex Volkov                          2:400/520.55   10 Aug 2003  01:29:05
 To : Vladimir Vassilevsky
 Subject : Квадратные корни табличным методом
 -------------------------------------------------------------------------------- 
 
 
  AV>> Hичего что мотороллеровский асм?
  AV>> Ты извини, я амижник.. Могу накрйняк для спектрумя.
  VV>
  VV>  Во, для ADSP-218x :)))
 Если уж пошла такая пьянка... ;)
 1. Для Pentium-III можно быстренько считать аппроксимацию через
 RSQRTSS или RSQRTPS. Они дают точность 12 бит. Можно увеличить точность до 23
 бит используя соотношение Hьютона-Рафсона:
 x0 = RSQRTSS(a)
 x1 = 0.5 * x0 * (3 - (a * x0)) * x0)
 
 2. быстрый корень есть и у AMD.
 3. А вот и код для 486, который считает 32bit sqrt быстрее чем встроеный FPU
 сопроцессор.
 
     mov   EBX, 40000000h;     EBX = (2^(n/2-1)) << (n/2-1)      1
     mov   ECX, 20000000h;     ECX = (2^(n/2-1)) << (n/2-2)      1
     mov   EDX, 40000000h;     EDX = 2^(n-2)                     1
 loop1:
     cmp   EAX, EDX;                                             1
     jb    bellow;                                             3/1
     ;
     add   EDX, EBX;                                             1
     add   EBX, ECX;                                             1
     shr   EBX, 1;                                               2
     shr   ECX, 2;                                               2
     lea   EDX, [EDX+2*ECX];                                     1
     jnz   loop1;                                              3/1
     jmp   done;                                               3/1
 bellow:
     sub   EDX, EBX;                                             1
     sub   EBX, ECX;                                             1
     shr   EBX, 1;                                               2
     shr   ECX, 2;                                               2
     lea   EDX, [EDX+2*ECX];                                     1
     jnz   loop1;                                              3/1
 done:
     add   EDX, 2;             1 for loop, 1 to work w/ carry    1
     sub   EDX, EBX;           EDX = lower bound of EBX^2        1
     lea   ECX, [EDX+2*EBX];   ECX = upper bound of EBX^2, +1    1
     cmp   EAX, EDX;                                             1
     sbb   EBX, 0;                                               1
     cmp   EAX, ECX;                                             1
     sbb   EBX, -1;                                              1
 
 лучший случай:  3+12(n/2-1)-2+3+7 =    6n-1
 хучший случай:  3+14(n/2-2)+12-2+3+7 = 7n-5
 До свидания.
 
 ---
  * Origin: #F3 #76 (2:400/520.55)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Квадратные корни табличным методом   Kirill Akopov   08 Aug 2003 00:29:23 
 Квадратные корни HE табличным методом   Vladimir Vassilevsky   08 Aug 2003 07:43:13 
 Квадpатные коpни табличным методом   Wowa Savin   04 Jan 1980 05:39:38 
 Квадpатные коpни табличным методом   Vadik Akimoff   09 Aug 2003 00:19:30 
 Квадpатные коpни табличным методом   Stanislav Shwartsman   09 Aug 2003 09:06:54 
 Квадpатные коpни табличным методом   Vadik Akimoff   09 Aug 2003 14:57:00 
 Квадратные корни табличным методом   Alex Volkov   08 Aug 2003 13:27:56 
 Квадратные корни табличным методом   Vadik Akimoff   09 Aug 2003 00:15:59 
 Квадратные корни табличным методом   Vladimir Vassilevsky   09 Aug 2003 18:17:03 
 Квадратные корни табличным методом   Alex Volkov   10 Aug 2003 01:29:05 
 Re: Квадратные корни табличным методом   Oleksandr Redchuk   09 Aug 2003 00:22:26 
 Квадратные корни табличным методом   Alex Volkov   09 Aug 2003 17:46:08 
 Re: Квадратные корни HE табличным методом   Oleksandr Redchuk   09 Aug 2003 00:22:26 
Архивное /ru.algorithms/33123f35a1ea.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional