C++生成随机数

C++提供rand()用于生成范围内的随机数,它两都位于头文件cstdlib中(其实真实位置是stdlib.h文件中),RAND_MAX的取值会有所差异,一般它的值会与INT_MAX保持一致。

rand()内部是用线性同余法实现的,所以并不是真正的随机数。比如下面这段代码:

#include <iostream>
#include <cstdlib>

int main() {
    std::cout << rand() << std::endl;
    return 0;
}

上面这段代码在编译后,在同一台机器上,每次运行的结果固定是同一个值。可以理解成:随机一次,之后每次运行程序,它返回的值就确定了
rand()无srand()输出

那如何才能让每次运行返回的结果都不一样呢?这就需要用到srand()了。
srand()用于初始化随机数发生器,它接收一个unsigned int型的参数种子。一般,srand()传入time(0),来确保每次输入的种子不同。

#include <iostream>
#include <cstdlib>

int main() {
    srand(time(0));
    std::cout << rand() << std::endl;
    return 0;
}

编译运行程序,这时候每次运行程序,rand()返回的结果就不一样了,“随机”了。
rand()设置了srand()

rand()用到的算法中是通过种子来计算生成随机数的,其实最开始的那段代码中,虽然我们没有显式设置种子,但实际上这时候默认种子为0。每次传入的种子一样,那么此次程序运行调用rand()生成的随机数序列也一样

#include <iostream>
#include <cstdlib>

int main() {
    srand(0);
    std::cout << rand() << std::endl;
    return 0;
}

编译运行,这时候可以看到程序每次运行的结果又是相同的了。
rand()种子设置为0
有没有注意到,它的结果和第一张图中的是一致的?(因为我是在同一台机器上测试的)

总结一下,如果我们要在程序中使用随机数,该怎么做呢?
1、一定要调用srand()设置种子,一般,传入的值是当前机器的时间time(0),且在一个程序中只要设置一次即可。
2、好像没看见其他接口,如何获取指定范围内的随机数?rand()返回的是范围内的随机数,比如我们需要获取以内的随机数,只需要用rand() % 100即可。

全部评论

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务