正文

产生任意范围内的等概率随机数2005-08-20 16:43:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/billgacsli/3963.html

分享到:

C提供的标准随机函数是 rand(),返回 0 ~ RAND_MAX,共 RAND_MAX + 1 个随机数,如果我需要更大的随机数范围应如何做? 而且 rand() 返回的是伪随机数,就是说不管运行多少次结果都是一样。用srand() 解决。 试设计: long random(long n);返回 0 ~ n-1 间的等概率随机数 分析思路: 以 0 ~ 1的等概率为中介,先将 rand() 返回的概率数转化到 0 ~ 1 之间,在转化到 0 ~ n 之间。 代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> long random(long n) {   double r = (double)rand() / RAND_MAX;   return (long)(r * n); } int main() {   long n, t1 = 0, t2 = 0;      while(true){     printf("输入 n 值:");     scanf("%ld", &n);     srand(time(NULL));     for(int i = 0;i < n * 100;i++){       long t = random(n);       if(t == 1)t1++;       else if(t == n - 1)t2++;     }     printf("出现次数\n");     printf("1: %ld\t%ld: %ld\n", t1, n - 1, t2);     printf("对应概率\n");     printf("1: %g\t", (double)t1 / n / 100);     printf("%ld: %g\n", n - 1, (double)t2 / n / 100);   }   return 0; } 参考rickone的Blog http://programfan.com/blog/article.asp?id=3890

阅读(456) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册