真伪随机数

这篇具有很好参考价值的文章主要介绍了真伪随机数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

随机数生成的方式一般有两种,分别为:

硬件生成随机数Hardware RNG,原理是用某个仪器一直探测环境中的物理量(比如说,时钟,IO 请求的响应时间,特定硬件中断的时间间隔,键盘敲击速度,鼠标位置变化,甚至周围的电磁波等等……直观地讲,你每按一次键盘,动一下鼠标,邻居家 wifi 信号强度变化,磁盘写入速度等等信号,都可能被用来生成随机数。),将该物理量作为随机数,比如 Intel 和 AMD CPU指令集中的 RDRAND 指令,C++ 中random_device就是利用RDRAND实现的。

算法生成随机数,比如c++中的 mt19937梅森旋转算法即为一种软件层面的随机数生成算法算法。如果知道了seed和算法的具体实现,别人就可以知道你生成的随机数序列。所以,又被称为 伪随机数生成器 Pseudo RNG。其他的PRNG算法包括 Xorshift,linear congruential generators等。

为什么不直接使用 std::random_device呢? 因为 std::random_device 不是跨平台的,依赖于硬件具体的实现,C++标准没有严格要求,编译器可能会偷懒,用伪随机数糊弄你(特指mingw),而 mt19937 是跨平台的。其次,HRNG 要慢上许多,这里用 google-benchmark 对比了linux(ubuntu 20.04, gcc 9.2.0)下 std::random_device 和 std::mt19937 的执行速度:

#include <benchmark/benchmark.h>
#include <random>

static void BM_PRNG(benchmark::State& state) {
    std::random_device rd;
    std::mt19937 e{rd()};
    for (auto _ : state){
        e();
    }
}
BENCHMARK(BM_PRNG);

static void BM_HRNG(benchmark::State& state) {
    std::random_device rd;
    std::uniform_int_distribution<int> dist(0, 9);
    for (auto _ : state){
        rd();
    }
}
BENCHMARK(BM_HRNG);

BENCHMARK_MAIN();

使用种子和 SFC32 生成随机数 js + c++

如何在 javascript 中使用种子生成随机数_seedrandom.js_迹忆客的博客-CSDN博客

javascrpti 的随机函数  xorshift128 +文章来源地址https://www.toymoban.com/news/detail-686381.html

 uint64_t xorshift128plus() {
  uint64_t s1 = state0;
  uint64_t s0 = state1;
  state0 = s0;
  s1 ^= s1 << 23;
  s1 ^= s1 >> 17;
  s1 ^= s0;
  s1 ^= s0 >> 26;
  state1 = s1;
  return state0 + state1;
}

到了这里,关于真伪随机数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言rand()函数产生随机数详解

    rand函数的原型: rand函数的功能: 用来产生一个随机数 rand函数的界限: stdlib.h头文件中有宏#define RAND_MAX 0x7fff,这表示rand产生一个0-0x7fff的随机数,即最大是32767的一个数 rand函数获取随机数的基础用法为: a是一个整数,返回值为0到a的随机数,包含0,但不包含a。 如果想要

    2024年02月06日
    浏览(43)
  • 利用随机数生成猜数字游戏【C语言】

    自动生成随机数的范围:0-99 玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束 根据游戏要求,第一步就是 先生成随机数 ,这里我们主要利用到三种函数 rand 、 srand 、 time 函数。所以下面依次介绍这三种函数。 我们来看一段代

    2024年02月10日
    浏览(42)
  • 你知道C语言中随机数是如何生成的吗~?

    目录 1.你听说过函数rand的吗? 2.引入srand函数~ 3.time函数的使用~ 4.随机数的实现! 5. 如何控制随机数的范围呢~ 6.这时候我们就可以写出一些比较有趣的代码啦~  7.对我们说的一些话~                            不是每个人都能做自己想做的事,成为自己想成为的人。  

    2024年02月22日
    浏览(42)
  • C语言生成随机数【简易抽卡代码为例】

    本文将详细解释如何在C语言中生成随机数,并介绍应用的小技巧 c语言生成一个真正的随机数需要用到三个函数: rand()、srand()和time()。 函数介绍 头文件 : #includestdlib.h 函数声明 : int rand(void) 作用 ; 生成一个伪随机数序列,随机数取值范围是0~RAND_MAX PS - RAND_MAX其实是一个宏

    2024年02月04日
    浏览(49)
  • C语言随机数生成和范围设置详解【超详细教程】

    本文详细介绍了C语言中如何使用rand函数生成随机数以及利用srand函数设置随机数的种子,同时解释了如何控制随机数的范围。适合初学者学习和实践。

    2024年02月05日
    浏览(48)
  • C语言中随机数的生成(rand函数和srand函数)

    CSDN话题挑战赛第2期 参赛话题:学习笔记 学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢? 目录 一.rand函

    2024年02月04日
    浏览(41)
  • C语言随机数的产生(rand、srand、time函数细节讲解)

    先上代码,再详细解释: 我们先来查询下rand函数 网站旧版我放在这儿,可以查询库函数等https://legacy.cplusplus.com/reference/cstring/strcat/ rand函数的头文件是stdlib.h。 rand函数无需传参数,返回类型是一个伪随机的整数范围是0到RAND_MAX。那这个RAND_MAX所对应的值是多少呢?我们同样

    2024年02月08日
    浏览(49)
  • R语言【base】——.Random.seed(),RNGkind(),RNGversion(),set.seed():随机数生成器

    Package  base  version 4.2.0 .Random.seed是一个整数向量,包含R中生成随机数的随机数生成器(RNG)状态。它可以保存和恢复,但不应该被用户更改。 RNGkind是一个更友好的接口,用于查询或设置正在使用的RNG类型。 RNGversion在早期的R版本中可以用来设置随机生成器(为了再现性)。 set

    2024年02月22日
    浏览(52)
  • C语言/C++随机数生成,程序运行时间计时器(含高精度计时器),包括Windows环境与Linux环境

      🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨,经典算法的解析✨都在这儿,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 -  数据结构与算法_勾栏听曲_0 🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️ 📌个人

    2023年04月26日
    浏览(49)
  • JS - 生成随机数的方法汇总(不同范围、类型的随机数)

    (1)使用 random() 方法可以返回一个介于 0 ~ 1 之间的伪随机数(包括 0,不包括 1)。 (2)下面是一个测试样例 (1)这种最简单,因为和 random 的特点保持一致。只需使用如下公式即可: (2)比如下面生成 [10,15) 范围内的随机浮点数。 因为 random 的特点,要取得这几个区间

    2023年04月08日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包