###运行程序看效果
#includeusing namespace std;/* 测试随机数,种子是随机的,得出的随机数是固定的 */ void testRandom(){ srandom(1); printf("RAND_MAX=%d\n",RAND_MAX); for(int i=0;i<10;i++){ printf("i=%d random value=%ld \n",i+1,random()); } } /* 测试随机数,种子是随机的,得出的随机数是不固定的 */ void testRandom2(){ srandom(time(NULL)); printf("RAND_MAX=%d\n",RAND_MAX); for(int i=0;i<10;i++){ printf("i=%d random value=%ld \n",i+1,random()); } } int main(int argc, char *argv[]) { testRandom(); testRandom2();}
执行程序两次 看效果
###解析 总结
1、生产随机数需要种子(Seed),且如果种子固定,random()每次运行生成的随机数(其实是伪随机数)也是固定的;因为返回的随机数是根据稳定的算法得出的稳定结果序列,并且Seed就是这个算法开始计算的第一个值。2、srandom()可以设定种子,比如srandom(0) 、srandom(1)等等。如果srandom设定了一个固定的种子,那么random得出的随机数就是固定的; 如果程序运行时通过srandom(time(NULL))设定种子为随机的,那么random()每次生成的随机数就是非固定的了。
###运用
//需要使用随机值的时候 一定要记住设置srandom的种子srandom((unsigned int)time(NULL));- (void)viewDidLoad { [super viewDidLoad]; //使随机值固定 srandom((unsigned int)time(NULL)); self.devices = [@[] mutableCopy];}```###关于随机性```假如你想产生 1 ------10 之间的一个随机数, 你应该像下面这样编码 j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0))); 而不是下面这样的代码 j = 1 + (rand() % 10);结论:如果你使用 srandom 种植种子, 则你应该使用 random 返回随机数,如果你使用 srand 种植种子, 则你应该使用rand返回随机数。不过srand和rand官方已经不推荐使用。原因是产生随机数的性能不是很好,另外是随机数的随机性没有random好,再者就是不是线程安全。```