看到这篇文章:http :
//en.wikipedia.org/wiki/List_of_random_number_generators
这是glibc的源代码
rand():
#include <stdlib.h>intrand_r (unsigned int *seed){ unsigned int next = *seed; int result; next *= 1103515245; next += 12345; result = (unsigned int) (next / 65536) % 2048; next *= 1103515245; next += 12345; result <<= 10; result ^= (unsigned int) (next / 65536) % 1024; next *= 1103515245; next += 12345; result <<= 10; result ^= (unsigned int) (next / 65536) % 1024; *seed = next; return result;}
来源:https
:
//sourceware.org/git/?p=glibc.git;a=blob_plain;f=
stdlib/
rand_r.c;hb=HEAD
如您所见,它只是简单地乘以一个加法和一个移位。仔细选择这些值,以确保不会重复RAND_MAX迭代的输出。
请注意,这是一个较旧的实现,已被更复杂的算法取代:https
:
//sourceware.org/git/?p=
glibc.git;a
=blob_plain;f=stdlib/random_r.c;hb=HEAD
如果链接断开,则Google为“ glibc rand_r”
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)