| | |
| | | |
| | | #include <stdint.h> |
| | | |
| | | /** |
| | | * Context structure for the Lagged Fibonacci PRNG. |
| | | * The exact layout, types and content of this struct may change and should |
| | | * not be accessed directly. Only its sizeof() is guranteed to stay the same |
| | | * to allow easy instanciation. |
| | | */ |
| | | typedef struct AVLFG { |
| | | unsigned int state[64]; |
| | | int index; |
| | |
| | | * it may be good enough and faster for your specific use case. |
| | | */ |
| | | static inline unsigned int av_lfg_get(AVLFG *c){ |
| | | c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63]; |
| | | return c->state[c->index++ & 63]; |
| | | unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63]; |
| | | c->index += 1U; |
| | | return a; |
| | | } |
| | | |
| | | /** |
| | |
| | | static inline unsigned int av_mlfg_get(AVLFG *c){ |
| | | unsigned int a= c->state[(c->index-55) & 63]; |
| | | unsigned int b= c->state[(c->index-24) & 63]; |
| | | return c->state[c->index++ & 63] = 2*a*b+a+b; |
| | | a = c->state[c->index & 63] = 2*a*b+a+b; |
| | | c->index += 1U; |
| | | return a; |
| | | } |
| | | |
| | | /** |