生成随机《c和指针笔记》--让rand更随机一点
本文是一篇关于生成随机的帖子
在c语言中如果要获取1~10的随机数,那么可能大部分人的设法都是通过以下代码获取:
rand()%10+1;
(虽然rand生成的是一个伪随机数,但是这边姑且认为他是真随机的吧)
但是生成1~10的概率真的是一样的吗?
不是的,上面我们来分析以下。
假如rand返回的最大值为105,那么使用上面那种方法获取的随机数那么生成1~6的概率要比生成7~10的概率要大,
看出来了吗?因为如果rand函数返回值的范围为0~99,那么使用上面的方法生成1~10的概率是一样的,但是,
现在rand返回值范围为0~105,如果rand返回100,则rand()%10+1的值为1,相当于1的概率要比其他数要大一点,
依此类推,生成1~6的概率要大一点点。
所以如果要使生成的数更随机一点,可以使用上面的代码:
#include<stdlib.h> #include<stdio.h> int get_rand10( void ){ int value; int max_rand = ( ( RAND_MAX + 1 ) / 10 ) * 10 -1; srand( (unsigned int) time(NULL) ); do{ value = rand(); }while(value > max_rand); return value % 10 + 1; }
一般情况下不必使用上面的方法,但是须要生成的随机数的最大值越接近于RAND_MAX,则越要考虑使用上面的方法。
文章结束给大家分享下程序员的一些笑话语录: 联想——对内高价,补贴对外倾销的伟大“民族”企业。
---------------------------------
原创文章 By
随机和概率
---------------------------------