linux C random function

转载:https://blog.csdn.net/u013420428/article/details/78929753

1.drand48 : double drand48(void);
    产生一个正的浮点型随机数;
    返回一个正的浮点型随机数,范围在0.0~1.0之间;
    printf("%f\n", drand48());

2.erand48 :double erand48(unsigned short int __xsubi[3]);
    产生一个正的浮点型随机数;
    返回一个正的浮点型随机数,范围在0.0~1.0之间;
    参数xsubi数组存放随机数方程序所需要的初值;
    #include <stdlib.h>
    main()
    {
        unsigned short int xsubi[3] = {1, 2, 3};
        int i, j;
        for(i=0; i<10; i++)
        {
            for(j=0; j<3; j++)
            {
                printf("%6d ", xsubi[j]);
            }
            printf("random number :%f\n", erand48(xsubi));
        }
    }


3.initstate :char *initstate(unsigned int seed, char *state, int n);
    建立随机数状态数组;
    initstate()用来初始化random()所使用的数组,参数n为数组的大小,
    参数seed为初始化的随机数种子;
    返回调用initstate()前random()所使用的数组;
    EINVAL 参数state数组大小不足8个字符长;

4.jrand48 :long int jrand48(unsigned short int xsubi[3]);
    产生一个长整型随机数;
    jrand48()会返回一个长整型随机数,范围在-2^31到2^31之间。
    参数xsubi数组存放随机数方程序所需要的初值;
    返回-2^31到2^31之间的随机数;
    #include <stdlib.h>
    main()
    {
        unsigned short int xsubi[3] = {1, 2, 3};
        int i, j;
        for(i=0; i<10; i++)
        {
            for(j=0; j<3; j++)
            {
                printf("%6d ", xsubi[j]);
            }
            printf("random number :%f\n", jrand48(xsubi));
        }
    }

5.lcong48 :void lcong48(unsigned short int param[7]);
    设置48位运算的随机种子;
    48位运算的随机函数是根据线性调和(linear congruential)演算法来产生随机数;
    Xn+1 = (aXn + c) mod m, (n >= 0)
    其中常数a=0x5DEECE66D, c=0xB, m=2^48;
    seed48()可以用来改变Xi的初值,但无法改变常值;lcong48()除了可以改变初值,
    亦可以改变常值a与c。参数param声明成7个unsigned short int的数组,param[0-2]为上述随机数
    方程序的初值(相当于seed48()的参数seed16v[3]), param[3-5]代表常数a值,param[6]则为c值;
    如果之后调用了srand48()或seed48(),则常数a与c的数值会恢复上述的默认值;
    #include <stdlib.h>
    main()
    {
        unsigned short int param[7] = {1, 2, 3, 11, 22, 12, 20};
        int i;
        lcong48(param);
        for(i=0; i<10; i++)
        {
            printf("%d\n", lrand48());
        }
    }
6.lrand48 : long int lrand48(void);
    产生一个正的长整型随机数;
    lrand48()会返回一个正的长整型随机数,范围0~2^31之间;
    #include <stdlib.h>
    main(void)
    {
        int i;
        for(i=0; i<10; i++)
        printf("%d\n", lrand48());
    }

7.mrand48 :long int mrand48(void);
    产生一个正的长整型随机数;
    mrand48()会返回一个正的长整型随机数,范围-2^31~2^31之间;
    #include <stdlib.h>
    main()
    {
        int i;
        for(i=0; i<10; i++)
            printf("%d\n", mrand48());
    }

8.nrand48 :long int nrand48(unsigned short int xsubi[3]);
    产生一个正的长整型随机数;
    nrand48()会返回一个正的长整型随机数,范围0~2^31之间;
    参数xsubi数组存放随机数方程序所需要的初值;
    #include <stdlib.h>
    main()
    {
        unsigned short int xsubi[3]={1, 2, 3};
        int i,j;
        for(i=0; i<10; i++)
        {
            for(j=0; j<3; j++)
            {
                printf("%6d ", xsubi[i]);
            }
            printf("random number :%d\n", nrand48(xsubi));
        }
    }

9.rand :int rand(void);
    产生随机数;
    rand()会返回一随机数值,范围在0~RAND_MAX之间。在调用此函数产生随机数前,必须先利用srand()设好随机数
    种子,如果未设置随机数种子,rand()在调用时会自动设置随机数种子为1。
    返回0~RAND_MAX之间的随机数值。RAND_MAX定义在stdlib.h其值为2147483647;
    /*产生1~10之间的随机数*/
    #include <stdlib.h>
    main()
    {
        int i, j;
        for(i=0; i<10; i++)
        {
            j=1+(int)(10.0*rand() / (RAND_MAX+1.0));
            printf("%d ",j);
        }
    }

10.random :long int random(void);
    产生随机数;
    random()会返回一随机数,范围在0~RAND_MAX之间。在调用此函数产生随机数前,必须先利用srandom()设好随机数
    种子,如果未设置随机数种子,random()在调用时会自动设置随机数种子为1。
    返回0~RAND_MAX之间的随机数值。RAND_MAX定义在stdlib.h其值为2147483647;

11.seed48 :unsigned short int *seed48(unsigned short int seed16v[3]);
    48位运算的随机函数是根据线性调和(linear congruential)演算法来产生随机数:
    Xn+1 = (aXn + c) mod m, (n >= 0);
    其中常数a=0x5DEECE66D, c=0xB, m=2^48 参数seed16v声明成三个unsigned short int的数组,长度即为48位,此传入的
    数值为上述随机数方程序的初值。seed48()的返回值为和seed16v相同声明的数组,数组内容为调用seed48()前方程序采用
    的初值;
    调用seed48()前随机数方程序采用的初值;
    #include <stdlib.h>
    main()
    {
        unsigned short int *p,seed16v[3]= {1, 2, 3}; /*初值设1, 2, 3*/
        int i=0;
        p=seed48(seed16v); /* 原始初值存于*p */
        for(i=0; i<3; i++)printf("%d", *(p+i));
        printf("\n");
        for(i=0; i<10; i++)
        {
            printf("%d\n", lrand48());
        }
    }

12.setstate :char *setstate(char *state);
    建立随机数状态数组;
    setstate()用来建立random()所使用的随机数状态数组。参数state指向新的随机数数组,
    此数组会供产生随机数的函数使用;
    返回调用setstate()前的random()所使用的数组;

13.srand :void srand(unsigned int seed);
    设置随机数种子;
    srand()用来设置rand()产生随机数时的随机数种子。参数seed必需是个整数,通常可以利用getpid()
    或time(0)的返回值来当作seed,如果第次seed都设相同值,rand()所产生的随机数值每次就会一样;
    /* 产生1~10之间的随机数 */
    #include <time.h>
    #include <stdlib.h>
    main()
    {
        int i,j;
        srand( (int)time(0)); /* 利用time(0) 当作随机数种子 */
        for (i=0; i<10; i++)
        {
            j=1+(int)(10.0*rand()/RAND_MAX+1.0);
            printf("%d \n",j);
        }
    }

14.srand48 :void srand48(long int seedval);
    设置48位运算的随机种子;
    srand48()用来设置drand48()/lrand48()/mrand48()产生随机数时的随机数种子。参数seed必需是个整数,
    通常可以利用getpid()或time(0)的返回值来当作seed。如果每次seed都设相同值,所产生的随机数值每次
    就会一样;

15.srandom :void srandom(unsigned int seed);
    设置随机数种子;
    srandom()用来设置random()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用getpid()
    或time(0)的返回值来当作seed,如果第次seed都设相同值,random()所产生的随机数值每次就会一样;

16. test code

#include<stdlib.h>
#include<stdio.h>
#include<time.h>

void main()
{
        int i,j;
        unsigned short int xsubi[3]={1,2,3};
        unsigned short int param[7]={1,2,3,11,22,33,44};
        unsigned short int *p,seed16v[3]= {1, 2, 3};
        //drand48(): Returns a positive floating point number from 0.0~1.0
        for(i=0;i<2;i++)
        {
                printf("drand48():%f\n",drand48());
        }
        printf("\n");

        //erand48(): return a positive floating ponit number from 0.0~1.0
        for(i=0;i<10;i++)
        {
                for(j=0;j<3;j++)
                {
                        printf("rand original number:%6d",xsubi[j]);
                        //printf("erand48(): random number:%f\n",erand48(xsubi));
                }

                        printf("erand48(): random number:%f\n",erand48(xsubi));
        }

        printf("\n");

        //jrand48(): return a  long int from -2^31 to 2^31
        for(i=0; i<10; i++)
        {
            for(j=0; j<3; j++)
            {
                printf("%6d ", xsubi[j]);
            }
            printf("jrand48():random number :%f\n", jrand48(xsubi));
        }
        printf("\n");

        //lrand48(): return a positive int from 0 to 2^31
        for(i=0;i<10;i++)
        {
                printf("lrand():%ld\n",lrand48());
        }

        printf("\n");
        //lcong48():  set 48bit rand seed
        lcong48(param);
        for(i=0;i<10;i++)
        {
                printf("lcong48:%ld\n",lrand48());
        }

        printf("\n");
        //mland48(): return a positive long int from -2^31 to 2^31
         for(i=0; i<10; i++)
            printf("mrand48():%ld\n", mrand48());

        printf("\n");
         //mland48(): return a long int from 0 - 2^31
          for(i=0; i<10; i++)
        {
            for(j=0; j<3; j++)
            {
                printf("%6ld ", xsubi[i]);
            }
            printf("nrand48():random number :%ld\n", nrand48(xsubi));
        }

        printf("\n");
         //rand(): return 0~1
          for(i=0; i<10; i++)
        {
            j=1+(int)(10.0*rand() / (RAND_MAX+1.0));
            printf("rand():%ld ",j);
        }

        printf("\n");
          //seed48():
         p=seed48(seed16v);
        for(i=0; i<3; i++)printf("seed48():%ld", *(p+i));
        printf("\n");
        for(i=0; i<10; i++)
        {
            printf("%ld\n", lrand48());
        }

        printf("\n");
        //srand():
         srand( (int)time(0));
        for (i=0; i<10; i++)
        {
            j=1+(int)(10.0*rand()/RAND_MAX+1.0);
            printf("%ld \n",j);
        }

}

test result:
ubuntu:~/rand$ ./rand
drand48():0.000000
drand48():0.000985

rand original number:     1rand original number:     2rand original number:     3erand48(): random number:0.441996
rand original number: 59000rand original number: 43974rand original number: 28966erand48(): random number:0.263128
rand original number: 61731rand original number: 23903rand original number: 17244erand48(): random number:0.654138
rand original number:  7666rand original number: 39619rand original number: 42869erand48(): random number:0.420649
rand original number: 11285rand original number: 43283rand original number: 27567erand48(): random number:0.023469
rand original number: 41724rand original number:  4128rand original number:  1538erand48(): random number:0.764511
rand original number: 52567rand original number: 63651rand original number: 50102erand48(): random number:0.992443
rand original number: 38934rand original number: 50798rand original number: 65040erand48(): random number:0.053484
rand original number: 34153rand original number:  8706rand original number:  3505erand48(): random number:0.117352
rand original number:  9152rand original number: 51643rand original number:  7690erand48(): random number:0.437919

 47307  31692  28699 jrand48():random number :0.437919
  4218   2389  45535 jrand48():random number :0.437919
 40957  25213  53104 jrand48():random number :0.437919
 27844  45174  10196 jrand48():random number :0.437919
 26495  50388  35691 jrand48():random number :0.437919
 11038  11904  56004 jrand48():random number :0.437919
 20433  46839  17008 jrand48():random number :0.437919
 49672  60334  16553 jrand48():random number :0.437919
 52595  11035  52638 jrand48():random number :0.437919
 52226  30063  33821 jrand48():random number :0.437919

lrand():89401895
lrand():379337186
lrand():782977366
lrand():196130996
lrand():198207689
lrand():1046291021
lrand():1131187612
lrand():975888346
lrand():500746873
lrand():1785185521

lcong48:3604502
lcong48:130843471
lcong48:1214791752
lcong48:1906538429
lcong48:331999776
lcong48:1837008915
lcong48:1881410094
lcong48:574787704
lcong48:1033083926
lcong48:1950425843

mrand48():-1294960515
mrand48():-1014541333
mrand48():-1633663275
mrand48():-31494204
mrand48():-2015747111
mrand48():39011460
mrand48():39122246
mrand48():1853994300
mrand48():564504794
mrand48():-560079566

 43237  43237  43237 nrand48():random number :657563743
 16574  16574  16574 nrand48():random number :947927607
 28928  28928  28928 nrand48():random number :1044133296
     1      1      1 nrand48():random number :1009851103
     2      2      2 nrand48():random number :1390342307
     3      3      3 nrand48():random number :1969421363
     1      1      1 nrand48():random number :539881782
     2      2      2 nrand48():random number :485066798
     3      3      3 nrand48():random number :2010559284
    11     11     11 nrand48():random number :1336019588

rand():9 rand():4 rand():8 rand():8 rand():10 rand():2 rand():4 rand():8 rand():3 rand():6
seed48():19985seed48():56626seed48():56989
949179875
565063343
1404751201
903337097
50399248
1641774161
2131256119
114856193
252011741
940424678

6
11
2
3
11
2
11
2
2
8

猜你喜欢

转载自blog.csdn.net/fanxianchao_2012/article/details/108167253
今日推荐