zoukankan      html  css  js  c++  java
  • 关于随机数生成

    原文参阅:码农翻身 - https://mp.weixin.qq.com/s/VpYM4mP2CGLIgiadL-1SDw

    以下为总结。

    对生成的随机数的要求

    1.  要杂乱无章 

    2.  不能预测,不能根据已经生成的随机数,推测出下一个随机数是啥 

    3.  不能重现, 无法重现和某一随机数列完全相同的数列

    随机数生成方式演进

    伪随机数:线性同余算法

    : A、C、M是精心挑选的整数。C是所谓的“种子”seed

    大多数语言中的随机数函数,如C的srand/rand、Java中的Random均为此的实现;

    是伪随机数,因为可预测:知道当前随机数可以知道下一随机数;可复现:seed一样则可生成两个完全一样的随机数数列。

    真随机数

    使用hash函数

    R1 = hash(seed) 
    
    seed = seed + 1 
    R2 = hash(seed) 
    
    seed = seed + 1 
    R3 = hash(seed) 
    
    seed = seed + 1 
    R4 = hash(seed) 
     ......  

    /dev/random

    将机器运行的环境噪音(用户敲击键盘速度、鼠标移动、网卡发送数据量、硬盘写入数据等)收集起来放到特殊文件/dev/random 中,这些噪声数据作为随机数发生器,对其中的部分数据经Hash后得到随机数。故生成的数杂乱无章,无法预测,无法重现,为真随机数。

    CPU RdRand指令

    CPU利用电阻的热噪声生成真随机数,与/dev/random的原理类似。

  • 相关阅读:
    小程序 scroll-view 中文字不换行问题
    模块
    网络编程
    元类
    day24
    day23
    day22
    day21
    day18
    day17
  • 原文地址:https://www.cnblogs.com/z-sm/p/12190605.html
Copyright © 2011-2022 走看看