Re: HELP

From
Viktor Karev (2:5080/1003)
To
Ianos Gnatiuc
Date
2002-10-07T13:01:49Z
Area
RU.ALGORITHMS
From: Viktor Karev <termar@narod.ru>
Reply-To: termar@narod.ru

Приветствия!

Ianos Gnatiuc wrote:

> inline DWORD irand()
> {
>     iholdrand *= 214013;
>     iholdrand += 2531011;
>     return iholdrand;
> }
> ...
> DWORD w = irand();
> ...
> 
> ...
>     mov     eax, iholdrand
>     lea     ecx, [eax+eax*2]
>     lea     edx, [eax+ecx*4]
>     shl     edx, 4
>     add     edx, eax
>     shl     edx, 8
>     sub     edx, eax
>     lea     eax, [eax+edx*4+2531011]
>     mov     iholdrand, eax
>     mov     w, eax
> ...
>     красота :)

Не очень... inline -то зачем? Экономишь на одном call, а код
вырастает пропорционально числу вызовов irand().

> кстати, кто может объяснить, почему rand не повторяется пока не пройдет через
> все возможные 32 битные значения?

Это, по-моему, у Кнута, в томе 2 "Получисленные алгоритмы"

>  VK> А что memmove?
> эту функцию никакой компилятор и не сможет оптимизировать для скорости, так как
> оптимальный по скорости код зависит от очень многих факторов, которых даже
> программисты не могут всегда предсказать.

Нет, я хотел высказать несколько иное: можно написать такую
оптимизацию, которая будет оптимизировать и задачу memmove, но
во-первых, эта задача настолько типичная, что эффективнее вместо
ее оптимизации просто предложить уже оптимизированную функцию.

>  VK> А я уже работаю с результатом. В частности, использую тот же
>  VK> memmove, но на ЯВУ.
> на javа не пишут быстрых програм.

Зависит от компилятора. Да, в большинстве своем java выполняется
на интерпретаторах, но есть и компиляторы java в машинный код.

Виктор.
--- ifmail v.2.15dev5
 * Origin: Urals State University for Railway Transport (2:5080/1003@fidonet)