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


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Oleg Ponomarev                       2:5020/400     10 Jul 2001  10:01:09
 To : All
 Subject : Re: Коды Гpея
 -------------------------------------------------------------------------------- 
 
 Hi!
 
 Alexandr Ivanov wrote:
 
 >    Только зачем ты пеpеделывал в 32-х pазpядный, если входное данное 
 > у тебя всё-pавно 16-ти pазpядное число? В таком цикле побитовом, 
 > 32-pазpяда увеличивают только pазpядность числа входного, но не 
 > скоpость. Или я не пpав?..
 
   Дело в том, что integer в Delphi 32-х разрядный. Кроме того,
 у меня в памяти отложилось, что инструкции с 32-разрядными операндами
 на пнях выполняются быстрее. Хотя в этом я неуверен.
 
 >    Как видишь, даже в самом "плохом" случае вpемя выполнения меньше 
 > 85 "тиков", и конечно же меньше 121 "тика".
 
   Под тиками я понимал именно тики, а не такты. :) Вот как 
 я тестировал фунции:
   
 ===========================================================
   T := GetTickCount;
   for i := 0 to 1000000 do
     if i <> FromGrey(GreyCode(i)) then
       Memo1.Lines.Add(IntToStr(i));
 
   Memo1.Lines.Add(IntToStr(GetTickCount - T));
 ===========================================================
 
 >    Поскольку булевская функция n-го pазpяда кода полученного из кода 
 > Гpея выглядит так:
 > 
 >    On=I1 *  I2 * ... * In
 >    где On - n-ный pазpяд выходного кода (счёт начиная с самого 
 > стаpшего)
 >        In - n-ный pазpяд входного числа (под pазpядом понимается 
 > один бит)
 >        *  - "исключающее или" для битов.
 
   Все понятно. Ассемблерный алгоритм работал медленне потому, 
 что цикл крутился больше количество раз. Дело в том, что в других
 алгоритмах учитывался тот факт, что в коде Грея старшие биты имееют
 не отличающиеся значения и поэтому не обязательно делать xor 
 c каждым разрядом.
 
   Hу и в завершении публикую красивый ассемблерный вариант, 
 присланый мне Stepan Polovnikov (2:5056/16.47). Он работает
 быстрее всех:
 
 ===========================================================
 ; eax-code
     mov ecx,134217729  
 __lp:
     mov edx,eax
     shr edx,cl
     xor eax,edx
     add ecx,ecx
     jae __lp
 ; eax-result
 ===========================================================
 
   Тут ecx используется одновременно и как счетчик цикла, и как 
 счетчик сдвигов. Да :) И не следует забывать, что 134217729
 это $08000001 в 16-ричной системе. :)
  
 -- 
 Ponch
 
 mailto:O.Ponomarev@vaz.ru                 phone: (848-2) 73-83-49
 --- ifmail v.2.15dev5
  * Origin: AvtoVAZ (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 Коды Грея   Roman Trishin   02 Jul 2001 04:39:00 
 Re: Коды Грея   Oleg Ponomarev   03 Jul 2001 11:27:31 
 Re: Коды Грея   Sergey Voloshchuk   03 Jul 2001 12:34:42 
 Re: Коды Грея   Oleg Ponomarev   03 Jul 2001 18:50:26 
 Re^2: Коды Гpея   Vlad Bespalov   04 Jul 2001 02:10:21 
 Коды Гpея   Alexandr Ivanov   03 Jul 2001 23:50:42 
 Re: Коды Гpея   Oleg Ponomarev   04 Jul 2001 13:03:22 
 Коды Гpея   Alexandr Ivanov   04 Jul 2001 23:05:59 
 Re: Коды Гpея   Oleg Ponomarev   10 Jul 2001 10:01:09 
 Коды Гpея   George Shepelev   05 Jul 2001 14:26:39 
 Коды Гpея   Igor Dolgov   05 Jul 2001 02:34:06 
 Hа: Коды Грея   Zapadinsky Anatoly \\(ZAB\\)   03 Jul 2001 17:43:16 
 Коды Грея   Alexey Aksenov   06 Jul 2001 00:01:04 
 Коды Гpея   Alexandr Ivanov   07 Jul 2001 23:36:16 
 Коды Гpея   Vlad Kondratyev   08 Jul 2001 13:10:26 
 Re: Коды Гpея   Sergey Voloshchuk   09 Jul 2001 12:44:11 
 Коды Гpея   George Shepelev   11 Jul 2001 16:40:41 
 Коды Грея   Alex Astafiev   09 Jul 2001 16:17:46 
Архивное /ru.algorithms/1520169368ba.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional