uint32_t rseqf(rst *rs) { #if RSEQMETHOD==0 return ((rs->i = (rs->i) * 2110005341UL + 2531011UL) >> 3) * 445223UL; #elif RSEQMETHOD==1 /* double d = 1. / (double)MBIG;*/ uint32_t mj; if(++rs->pk1 == rs->k_ma_end) rs->pk1 = &rs->k_ma[1]; if(++rs->pk2 == rs->k_ma_end) rs->pk2 = &rs->k_ma[1]; if((mj = *rs->pk1 - *rs->pk2) < 0) mj += MBIG; return (*rs->pk1 = mj); #elif RSEQMETHOD==2 return SHR3((rs->jsr)); #elif RSEQMETHOD==3 return FIB((rs->a),(rs->b)); #elif RSEQMETHOD==6 return rseq(rs); #else return MWC((rs->z),(rs->w)); #endif }
unsigned long fib(int n) { if (n<3) return 1; return FIB(n-2)+FIB(n-1); }