关于rand()的一些事

关于rand()的一些事

作者:LAMP小白  点击:2133  发布日期:2012-10-21 20:14:00  返回列表
学习中碰到的两个问题

%d与%i
完全一样

关于RAND_MAX
他是一个常量,等于当前计算机最大的符号整型,如果32位的计算机,那么RAND_MAX为32个二进制1为2147483647
还有一点是,有一些文章说RAND_MAX是包含在stdio.h中的,这是错误的,实际RAND_MAX是包含在stdlib.h中的!

rand()是stdlib中一个函数,用于生成一个介于0~RAND_MAX之间的整数,但是通过下面代码发现随机出来的数都是一样的
#include mio_lt;stdio.hmio_gt;
#include mio_lt;stdlib.hmio_gt;
    int main()
    {
        int i = 0;
        for(i; imio_lt; 10; i++)
            printf("Random numbers are: %in",rand());
        return 0;
    }


[root@localhost 20121021]# ./part1
Random numbers are: 1804289383
Random numbers are: 846930886
Random numbers are: 1681692777
Random numbers are: 1714636915
Random numbers are: 1957747793
Random numbers are: 424238335
Random numbers are: 719885386
Random numbers are: 1649760492
Random numbers are: 596516649
Random numbers are: 1189641421
[root@localhost 20121021]# ./part1
Random numbers are: 1804289383
Random numbers are: 846930886
Random numbers are: 1681692777
Random numbers are: 1714636915
Random numbers are: 1957747793
Random numbers are: 424238335
Random numbers are: 719885386
Random numbers are: 1649760492
Random numbers are: 596516649
Random numbers are: 1189641421

这是因为我们使用的随机数种子是一样的,这个种子在计算机正常启动的时候就设置好了
所以srand()可以为我们设置随机种子,如果我们把随机种子设置为1,你会发现结果还是一样的
这就说明随机种子其实是1(linux centOS 5.5)

没有使用srand的结果
[root@localhost 20121021]# ./part1
Random numbers are: 1804289383
Random numbers are: 846930886
Random numbers are: 1681692777
Random numbers are: 1714636915
Random numbers are: 1957747793
Random numbers are: 424238335
Random numbers are: 719885386
Random numbers are: 1649760492
Random numbers are: 596516649
Random numbers are: 1189641421

加入srand()后的代码:

#include mio_lt;stdio.hmio_gt;
#include mio_lt;stdlib.hmio_gt;
    int main()
    {
        int num = 1;
        int i = 0;
        srand(num);
        for(i; imio_lt; 10; i++)
            printf("Random numbers are: %in",rand());
        return 0;
    }

设置种子为1结果与未设置种子时一样
[root@localhost 20121021]# gcc -o part1 part1.c
[root@localhost 20121021]# ./part1
Random numbers are: 1804289383
Random numbers are: 846930886
Random numbers are: 1681692777
Random numbers are: 1714636915
Random numbers are: 1957747793
Random numbers are: 424238335
Random numbers are: 719885386
Random numbers are: 1649760492
Random numbers are: 596516649
Random numbers are: 1189641421

当我们把种子设置为3的时候

int num = 3;

结果就产生变化了

Random numbers are: 1205554746
Random numbers are: 483147985
Random numbers are: 844158168
Random numbers are: 953350440
Random numbers are: 612121425
Random numbers are: 310914940
Random numbers are: 1210224072
Random numbers are: 1856883376
Random numbers are: 1922860801
Random numbers are: 495649264

我们把srand()配合time()或更多乱序条件产生不同的随机种子,那么就可以得到变化的伪随机数了


上一篇:MYSQL多表查询 下一篇:快递查询API
0