C++11 随机数生成——告别 rand()

发布时间:2026/7/13 5:45:46
C++11 随机数生成——告别 rand() 文章目录C11 随机数生成——告别 rand()一、C 语言的 rand() 有什么问题二、C11 的三大组件三、实战例子3.1 模拟温度42°C 上下波动 2°C3.2 模拟误码率极小数值3.3 生成整数范围四、逐行拆解std::random_device{}()std::mt19937 rng{种子}std::uniform_real_distributiondouble(min, max)(rng)五、为什么用 static 修饰引擎六、为什么加锁七、C11 还支持其他分布八、C vs C11 对比九、面试该怎么说C11 随机数生成——告别 rand()最近在嵌入式项目里看到了一种从来没用过的随机数写法研究了一下发现这竟然是 C11 标准的正式写法。比 C 语言的rand()好用太多了记录下来。一、C 语言的 rand() 有什么问题#includecstdlib#includectimesrand(time(NULL));// 用当前时间做种子// 想生成 40.0 到 44.0 之间的浮点数doubletemp40.0(rand()%400)/10.0;// 一坨计算不好读// 而且 rand() 有几个硬伤rand() 的问题说明随机质量差周期短通常是 2^31-1低位不够随机指定范围麻烦要自己用%和乘法算容易出错线程不安全内部有全局状态多线程同时调会乱分布单一只有均匀分布没法生成正态分布等二、C11 的三大组件C11 把随机数拆成了三个组件各司其职① 真随机数设备(random_device) → 生成种子从硬件噪声获取 ↓ ② 随机数引擎(mt19937) → 根据种子生成高质量伪随机序列 ↓ ③ 分布(distribution) → 把引擎的原始输出映射到你需要的范围三、实战例子3.1 模拟温度42°C 上下波动 2°C#includerandom#includemutexdoublesimulateTemperature(){staticstd::mt19937 rng{std::random_device{}()};// 引擎只创建一次staticstd::mutex mtx;// 保护 rng它不是线程安全的std::lock_guardstd::mutexlock(mtx);return42.0std::uniform_real_distributiondouble(-2.0,2.0)(rng);// ↑ ↑ ↑// 基准温度 均匀分布 用 rng 引擎// 区间 [-2.0, 2.0]}3.2 模拟误码率极小数值doublesimulateBER(){staticstd::mt19937 rng{std::random_device{}()};staticstd::mutex mtx;std::lock_guardstd::mutexlock(mtx);return1.2e-7std::uniform_real_distributiondouble(-2e-8,2e-8)(rng);// ↑ 0.00000012 ± 0.00000002}3.3 生成整数范围// 模拟 1 到 100 之间的随机整数std::uniform_int_distributionint(1,100)(rng);// 等价于 rand() % 100 1但分布绝对均匀四、逐行拆解std::random_device{}()std::random_device{}// 创建一个 random_device 临时对象()// 调用它的 operator()拿到一个真随机数作为种子真随机数不是算出来的——它从 CPU 的硬件噪声热噪、时钟抖动获得不可预测。std::mt19937 rng{种子}std::mt19937 rng{std::random_device{}()};// ↑// Mersenne Twister 19937 算法// 周期 2^19937 - 1天文数字// 性能和质量都是顶尖水平std::uniform_real_distributiondouble(min, max)(rng)std::uniform_real_distributiondouble(-2.0,2.0)(rng)// ↑ 均匀分布 ↑范围 ↑用哪个随机引擎// 每个值出现的概率完全相等五、为什么用 static 修饰引擎staticstd::mt19937 rng{std::random_device{}()};// 如果用 static第一次调用时初始化一次 → 之后复用一个引擎// 如果不用 static每次调用都重建引擎重新播种// 高频调用下性能差异巨大引擎只创建一次、一直复用。每次调用dist(rng)时引擎继续向前生成下一个随机数保证随机性。六、为什么加锁staticstd::mutex mtx;std::lock_guardstd::mutexlock(mtx);std::mt19937不是线程安全的——多个线程同时用同一个 rng 对象会导致内部状态错乱产生相同的随机值。加锁保证同一时刻只有一个线程在用 rng。七、C11 还支持其他分布// 正态分布均值 50标准差 10std::normal_distributiondouble(50.0,10.0)(rng);// 伯努利分布70% 返回 truestd::bernoulli_distribution(0.7)(rng);// 整数均匀分布1~6骰子std::uniform_int_distributionint(1,6)(rng);这是rand()完全做不到的——你需要正态分布数据来模拟传感器噪声一行搞定。八、C vs C11 对比// C 语言模拟温度 40~44srand(time(NULL));doubletemp140.0(rand()%400)/100.0;// C11模拟温度 40~44std::mt19937 rng{std::random_device{}()};doubletemp240.0std::uniform_real_distributiondouble(0.0,4.0)(rng);// C模拟掷骰子intdice1rand()%61;// 有偏差低位不够随机// C11模拟掷骰子intdice2std::uniform_int_distributionint(1,6)(rng);// 完全均匀九、面试该怎么说“项目中用 C11 的random库代替 C 的rand()。采用std::mt19937引擎 std::uniform_real_distribution分布的三层架构——硬件真随机种子、高质量伪随机引擎、均匀分布映射到指定范围。用static保证引擎只初始化一次用std::mutex保护非线程安全的引擎。这种写法比rand()随机质量更高、API 更清晰、支持多种概率分布。”嵌入式项目里也常常要用随机数——模拟传感器噪声、测试数据生成、通信超时抖动。C11 的random是标准库里的任何平台都能用。

相关新闻

拒绝服务器卡顿,高端网站建设服务器选型避坑指南

拒绝服务器卡顿,高端网站建设服务器选型避坑指南

网站打开慢如蜗牛,高峰期直接崩盘,客户流失率直线上升。这不仅仅是代码写得烂的问题,更多时候是底层基础设施在拖后腿。很多老板觉得买个便宜云服务器凑合用就行,直到被投诉打到怀疑人生。今天不聊虚的,直接拆解高端网站建设服务器到底该怎么选,怎么配,才能既体面又省钱…

发布时间:2026/7/13 5:44:33
别瞎折腾了,网站建设模块需求分析没做对,后期改代码改到哭

别瞎折腾了,网站建设模块需求分析没做对,后期改代码改到哭

本文关键词:网站建设模块需求分析很多老板找我做网站,开口就是:“我要个大气点的,像某某大厂那样。” 听完我就头疼。大气是个虚词,落地全是坑。去年有个做建材的客户,非要加个复杂的在线报价系统,结果开发周期拖了两个月,上线后因为操作太复杂,客户流失率反而高了。这…

发布时间:2026/7/13 5:43:38
别瞎忙!在云南省中国建设工程造价管理协会网站查定额,这坑我踩了三次才懂

别瞎忙!在云南省中国建设工程造价管理协会网站查定额,这坑我踩了三次才懂

做造价这行,谁没熬过几个通宵?我是老张,在昆明混了八年。以前总觉得,只要手快,就能把活儿干完。直到去年那个大项目,差点把我搞垮。那会儿我正急着核对一份分包结算。心里慌得很,怕漏项,怕算错。脑子里全是数字在飞。我就急着去查云南省中国建设工程造价管理协会网站。…

发布时间:2026/7/13 5:43:17
别被忽悠了!找一家靠谱的网站开发公司杭州网站建设到底要注意这几点坑

别被忽悠了!找一家靠谱的网站开发公司杭州网站建设到底要注意这几点坑

说实话,现在市面上做网站的团队太多了。多到什么程度?你随便在朋友圈发个需求,估计半小时内就能收到十个报价单。价格从几千到几万都有,看得人眼花缭乱。很多人第一次找外包,心里都没底。怕被坑,怕做完不管,更怕做出来的东西丑得没法看。今天咱们不聊那些虚头巴脑的技术…

发布时间:2026/7/13 6:32:46
品牌网站建设預定大蝌蚪:别被低价坑了,这才是正经搞流量的路子

品牌网站建设預定大蝌蚪:别被低价坑了,这才是正经搞流量的路子

本文关键词:品牌网站建设預定大蝌蚪说句掏心窝子的话,很多老板做网站,心里都犯嘀咕。为啥?因为水太深了。你去问几家公司,报价从几千到几万都有,搞得你头都大了。其实吧,做网站跟找对象一样,光看脸不行,得看性格合不合,能不能长久过日子。今天我就以过来人的身份,聊…

发布时间:2026/7/13 6:32:06
别再用PPT忽悠客户了!网站建设可视化才是真香定律,小白也能看懂设计逻辑

别再用PPT忽悠客户了!网站建设可视化才是真香定律,小白也能看懂设计逻辑

做网站设计这行久了,最怕听见客户说“你看着办,我要那种大气又简约的感觉”。这话听着就让人头大。大气是啥?简约又是啥?每个人的脑补画面都不一样。你画了一堆线框图,客户盯着看半天,眉头紧锁,最后来一句“感觉不对”。这时候你只能重新改,改到怀疑人生。其实,问题出…

发布时间:2026/7/13 6:31:58
别被忽悠了!成都网站建设联系方式到底怎么找才不踩坑?

别被忽悠了!成都网站建设联系方式到底怎么找才不踩坑?

真的,我受够了。每次看到那种“全网最低价”、“三天上线”的广告,我就想笑。真的想笑。你们以为做网站是变魔术吗?敲几下键盘,钱没了,网站好了?做梦吧你。今天我就想跟你们掏心窝子聊聊,这行水有多深。特别是你们这些在成都想搞网站的老板,或者刚起步的创业者。你们最…

发布时间:2026/7/13 6:31:47
佛山禅城网站建设公司怎么选?避开这些坑,让你的网站真正带来客户

佛山禅城网站建设公司怎么选?避开这些坑,让你的网站真正带来客户

做网站最怕什么? 钱花了,网站丑得不敢发朋友圈。 或者更惨,网站做好了,却像石沉大海,连个水花都没有。 很多老板在佛山禅城找建站公司, 最后发现只是买了一个“电子名片”。 今天不聊虚的, 直接告诉你,怎么在佛山禅城找到靠谱的网站建设公司, 让你的网站变成真正的获客…

发布时间:2026/7/13 6:30:39
建设平台型网站多少钱?2024年真实报价与避坑指南

建设平台型网站多少钱?2024年真实报价与避坑指南

建设平台型网站多少钱?别被网上几百块的模板忽悠了,也别被报价十几万的“高端定制”吓退。这篇内容直接拆解真实成本结构,告诉你钱到底花在哪,怎么省都不踩坑。先说结论:做一个能跑通交易、支撑并发、后台能管住货和人的正经平台型网站,起步价通常在3万到8万之间。低于这…

发布时间:2026/7/13 6:30:37
别瞎忙!贵州省住房和城乡建设厅网站报名网实操避坑指南

别瞎忙!贵州省住房和城乡建设厅网站报名网实操避坑指南

很多建筑人,一到报名季就慌。总觉得官网复杂,不敢点。其实,真没你想的那么难。只是细节太多,容易踩坑。我在这行干了八年。见过太多人因为一个小失误,白忙活一年。今天不整虚的。直接说点干货。先说最关键的:时间。很多人以为提前两天报名就行。大错特错。去年有个学员,…

发布时间:2026/7/13 0:00:05
北辰手机网站建设避坑指南:别被低价忽悠,这几点才是硬道理

北辰手机网站建设避坑指南:别被低价忽悠,这几点才是硬道理

说实话,刚入行那会儿,我也觉得做个手机网站跟玩似的。 找个模板,填填图,完事。 直到上个月,帮个北辰本地的老客户改网站,我才彻底醒过脑来。 那哥们儿之前为了省事儿,找了个几百块的“速成”网站。 结果呢?打开慢得像蜗牛,排版在手机上一塌糊涂。 客户投诉电话都快打爆…

发布时间:2026/7/13 0:00:37
网站建设怎么搭建服务器:新手避坑指南与真实成本拆解

网站建设怎么搭建服务器:新手避坑指南与真实成本拆解

这篇内容直接告诉你建站服务器怎么选、怎么配、怎么省钱,读完就能动手操作,不再被忽悠。别再去听那些云里雾里的技术术语,咱们只聊落地能用的干货。解决你从0到1搭建网站最头疼的硬件和配置问题。很多刚入行或者想自己折腾网站的朋友,一听到“搭建服务器”这几个字就头大。…

发布时间:2026/7/13 0:02:04
别装了,你的学院网站建设推进会就是场大型尴尬现场

别装了,你的学院网站建设推进会就是场大型尴尬现场

看着后台那点可怜的访问量,你急不急?方案改了八版,还是没人看。今天这文,只说怎么把会开成,把事做成。上周去隔壁职院蹭会,那场面,真叫一个窒息。会议室里坐满了人,领导在台上讲PPT,底下的人不是在玩手机,就是在发呆。投影仪闪了两下,灭了。没人去修,接着讲。这种会…

发布时间:2026/7/13 2:35:37
七彩建设集团官方网站怎么找?避坑指南与真实体验分享

七彩建设集团官方网站怎么找?避坑指南与真实体验分享

找官网找得头大?这篇直接告诉你怎么辨别真伪,别被假网站坑了钱。昨天半夜两点,我还在电脑前盯着屏幕,心里那个急啊。家里装修刚进场,工长突然说需要确认一份材料清单,说是七彩建设那边要求的。我手忙脚乱地打开浏览器,搜了一堆“七彩建设”,结果出来一堆广告,什么“七…

发布时间:2026/7/13 0:10:45
找可信赖的龙岗网站建设公司?别踩坑,看这几点就够

找可信赖的龙岗网站建设公司?别踩坑,看这几点就够

做企业,网站就是脸面。 在龙岗,想找个靠谱的网站公司,真不容易。 市面上广告满天飞。 承诺得天花乱坠。 最后交付的东西,却让人想砸电脑。 今天不聊虚的。 只聊怎么避坑。 怎么找到真正可信赖的龙岗网站建设团队。先说个大实话。 别信什么“三天上线”。 那是骗小白的。 正…

发布时间:2026/7/12 0:00:44
建站7年才悟出的网站建设思路,别再花冤枉钱了

建站7年才悟出的网站建设思路,别再花冤枉钱了

做建站这行整整7年了。 见过太多老板花几万块, 最后做出来的网站像个垃圾场。 今天不整那些虚头巴脑的术语。 就聊聊我踩过的坑, 和真正能落地的网站建设思路。很多老板一上来就问: “多少钱能做个高大上的?” 我通常直接劝退。 因为方向错了, 你给再多钱也是打水漂。 真正…

发布时间:2026/7/11 8:50:55
合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

做企业官网最怕什么?不是技术难,是交钱后没人管,或者上线一个月连个访客都没有。这篇东西不扯虚的,直接告诉你怎么在合肥找个靠谱的团队,或者自己怎么避坑。先说个大实话,我在合肥混这行五年多,见过太多老板因为贪便宜吃大亏。你去百度搜“合肥的网站建设”,出来一堆报…

发布时间:2026/7/10 18:05:06
别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

做这行久了,心里就憋着一股火。每次看到客户拿着网上抄来的模板,问我能不能做成“苹果官网”那种效果。我就想笑。真的,太想笑了。今天咱不整那些虚头巴脑的专业术语。就聊聊德州网站建设里,那些让人头秃的真实事儿。我有个客户,老张。他是做德州本地建材的,实在人。当初…

发布时间:2026/7/13 2:08:03