[elektro] Két bit random number..

Palasik Sandor palasik at mail.datanet.hu
Tue Nov 26 16:39:51 CET 2013


> egy  bevált egyszerű véletlenszám generátorra lenne szükségem
> C-ben
> 
> ráadásul  4 esetre ,    ii =    {  0 , 1,  2,  3 }
> és PIC16F -re gyógyítva.

LFSR, azaz linear feedback shift register

http://en.wikipedia.org/wiki/Linear_feedback_shift_register

Csupa nulla nem lehet a regiszterben, úgyhogy az esetedben a nulla itt
kicsit kisebb valószínűséggel fordulna elő, mint a többi kettő, de
mondjuk 16 bitnél csak 1/65535 lenne a különbség. Szintén ugyanezért
figyelni kell, hogy nehogy nulláról induljon.

A wikipediás példa 16 bitre:

lfsr = (lfsr >> 1) ^ (-(lfsr & 1u) & 0xB400u);

Ezt vagy ciklusban használod, vagy leírod kétszer, aztán használhatod
az alsó, vagy akármelyik két bitet.

Ha úgy érzed, hogy rövid a 16 bit, megpróbálhatod ezt is:

http://en.wikipedia.org/wiki/Mersenne_twister

De ehhez 19937 bites regisztert kell csinálni :-)

Palasik Sándor



More information about the Elektro mailing list