generate reliable pseudorandom number

2019-01-28 22:59发布

I want to write a multiplayer game on iOS platform. The game relied on random numbers that generated dynamically in order to decide what happen next. But it is a multiplayer game so this "random number" should be the same for all device for every player in order to have a consistent game play.

Therefor I need a good reliable pseudorandom number generator that if I seed it a same number first than it will keep generate same sequences of random number on all device (iPad/iPhone/iPodTouch) and all OS version.

Looks like srand and rand will do the job for me but I am not sure does rand guarantee to generate same number on all device across all OS version? Otherwise is any good pseudorandom number generate algorithm?

标签: ios random srand
2条回答
叛逆
2楼-- · 2019-01-28 23:43

If you provide a seed value to rand then it should consistently provide the same sequence of pseudorandom numbers. You can also try arc4random().

查看更多
Luminary・发光体
3楼-- · 2019-01-28 23:56

From the C standard (and Objective C is a thin layer on top of C so this should still hold):

If srand is then called with the same seed value, the sequence of pseudo-random numbers shall be repeated.

There's no guarantee that different implementations (or even different versions of the same implementation) will give a consistent sequence based on the seed. If you really want to guarantee that, you can code up your own linear congruential generator, such as the example one in the standard itself:

// RAND_MAX assumed to be 32767.
static unsigned long int next = 1;
void srand(unsigned int seed) { next = seed; }
int rand(void) {
    next = next * 1103515245 + 12345;
    return (unsigned int)(next/65536) % 32768;
}

And, despite the fact that there are better generators around, the simple linear congruential one is generally more than adequate, unless you're a statistician or cryptographer.

查看更多
登录 后发表回答