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


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Oleg Ponomarev                       2:5020/400     04 Jul 2001  13:03:22
 To : All
 Subject : Re: Коды Гpея
 -------------------------------------------------------------------------------- 
 
 Hi!
 
 Alexandr Ivanov wrote:
 
 >  so> Гениально! А как обpатно?
 > 
 > Function FromGrey(Value : Word) : Word; assembler;
 
 [...]
 
 > Всего хоpошего и смотpи не кашляй!
 
   Я протестировал процедуры обратного перевода из кода Грея в "обычный".
 Тестировались три варианта:
 
   1. Ассемблерный вариант от Alexandr Ivanov
   2. Вариант от Yuri Gendelman присланный мне по мылу.
   3. Вариант из Numerical Recipes предоставленый Vlad Bespalov 
 
   Все они работают правильно, но получилось, что самый быстрым 
 оказался второй вариант, самым медленным первый ассемблерный 
 вариант (как ни странно).
 
 Вариант   Среднее кол-во тиков
 1         228
 2         85
 3         121
 
   Возможно, конечно, что я где-то ошибся, так как перевел
 исходники на Паскаль. Среда разработки Delphi 5. Посмотрите, 
 плиз, я ничего не напутал? 
 
 =========================================================
   function GreyCode(Value : Integer) : Integer;
   begin
     Result := (Value shr 1) xor Value;
   end;
 
   { Вариант 1 }
   { я попытался переделать на 32-разрядный вариант, но это не помогло }
   Function FromGrey(Value : Integer) : Integer; assembler;
    asm
    mov  EAX,Value
    mov  ECX,EAX
   @L1:
    shr  ECX,1
    xor  EAX,ECX
    or   ECX,0    // а почему сравние с нулем?
    jnz  @L1
    end;
   
   { Вариант 2 }
   function ReverseGreyCode(Value : Integer) : Integer;
   const
     mxShift = SizeOf(Value) * 4;
   var
     i : integer;
   begin
     i := 1;
     while i <= mxShift do
       begin
       Value := Value xor (Value shr i);
       i := i shl 1;
       end;
     ReverseGreyCode := Value;
   end;
 
   { Вариант 3 }
   function IGreyCode(Value : Integer) : Integer;
   var
     Work : integer;
     Shift : integer;
   begin
     Shift := 1;
     while True do
       begin
       Work := Value shr Shift;
       Value := Value xor Work;
       { видимо, тормозит из-за проверки Work <= 1 }
       if (Work <= 1) or (Shift = 16) then
         begin
         IGreyCode := Value;
         Exit;
         end;
       Shift := Shift shl 1;
       end;
   end;
 =========================================================
 
 -- 
 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/15206914c302.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional