C的亂數產生器

cpp 代码
  1. // file: sj03.h   
  2.   
  3. void rnd1(int *s1);   
  4. void rnd2(int *s1, double *x);   
  5. void swap_int(int *x, int *y);   
  6. void irnd(int *s1, int i1, int i2, int *ii);   
  7. void init_rnd(int *s1);   
  8. // ----------------------------------------------   
  9.   
  10. void rnd1(int *s1)   
  11. {   
  12.     // r(n)= (r(n-1)*a + b) MOD c   
  13.     // a= 7^5= 16807.0   
  14.     // b= 0.0   
  15.     // c= 2147483647.0   
  16.     // ----------------------------------------------   
  17.   
  18.     // double r1, r2, r3;   
  19.     // r1= (double) (*s1);   
  20.     // r2= r1*16807.0;   
  21.     // r3= fmod(r2, 2147483647.0);   
  22.   
  23.     (*s1)= (int) ((fmod((((double) (*s1))*16807.0), 2147483647.0)) + 0.5);   
  24. }// end rnd1()   
  25. // ----------------------------------------------   
  26.   
  27. void rnd2(int *s1, double *x)   
  28. {   
  29.     rnd1(s1);   
  30.     *x= ((double) *s1)/2147483647.0;   
  31. }// end rnd2()   
  32. // ----------------------------------------------   
  33.   
  34. void swap_int(int *x, int *y)   
  35. {   
  36.     int z;   
  37.   
  38.     z= *x;   
  39.     *x= *y;   
  40.     *y= z;   
  41. }// end swap_int()   
  42. // ----------------------------------------------   
  43.   
  44. void irnd(int *s1, int i1, int i2, int *ii)   
  45. {   
  46.     double x;   
  47.     rnd2(s1, &x);   
  48.   
  49.     // I hope i1 <= i2   
  50.     if (i1 > i2) {   
  51.         swap_int(&i1, &i2);   
  52.     }   
  53.   
  54.     *ii= ((int) (x*(i2 - i1 + 1))) + i1;   
  55. }// end irnd()   
  56. // ----------------------------------------------   
  57.   
  58. void init_rnd(int *s1)   
  59. {   
  60.     int t1, t2;   
  61.     time1(&t1);   
  62.     // ----------------------------------------------   
  63.   
  64.     t2= t1;   
  65.     do {   
  66.         time1(&t1);   
  67.     } while (t1 == t2);   
  68.     // t1 <> t2   
  69.     // ----------------------------------------------   
  70.   
  71.     *s1= t1;   
  72.     for (int i=0;i<300;i++) {   
  73.         rnd1(s1);   
  74.     }   
  75. }// end init_rnd()   

自己寫的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值