слyчайно 0-1

From
Alex Astafiev (2:5000/228.16)
To
Stanislav Aranovsky
Date
2002-04-30T17:50:58Z
Area
RU.ALGORITHMS
Здравствуй Stanislav, ничего, если я тут на диванчик прилягу?

 SA> Подскажите алгоpитм генеpации слyчайного числа в пpеделах только 0-1,
 SA> котоpый pаботал бы быстpее rand(). Едиственное, что пpиходит в головy
 SA> - один pаз генеpить динное число, а потом пpосто пpобегать его по
 SA> битам, после чего генеpить число заново.

Это неправильно в общем случае. Большинство датчиков ПСЧ гарантирует заданые
дисперсию и распределение для выходных чисел в целом, т.е. для  но не для битов
этих чисел при их представлении в машинной форме. Возьмем линейный конгруэнтный
генератор:

 x(i+1) = (x(i) * A) mod B + k

так вот, у него старшие биты шумят очень хорошо, а младшие чрезвычайно плохо.
но есть псч на основе сдвигов, они тебя устроят.

 SA> Можно ли пpидyмать что-нить
 SA> быстpее?

На ассемблере 680x0 rand()

          rol.l  d0,d0
          addq.l #x,d0

или

          divs.w    #$4433,d0
          swap d0

на X86 асме rand()
как

seed dw 0

     mov eax[seed]
     mov edx,eax
     shl eax,2
     add eax,edx
     inc eax
     mov[seed],eax
     and eax,0x80000000...


---
 * Origin: Alex Raider/ Flash inc. 1992-2002 (2:5000/228.16)