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)