• 请不要在回答技术问题时复制粘贴 AI 生成的内容
showecho
V2EX  ›  程序员

如果说 rand()的结果并不是很随机的话,如何在程序中做出更加随机的效果?

  •  
  •   showecho · Sep 9, 2018 · 6417 views
    This topic created in 2979 days ago, the information mentioned may be changed or developed.
    当然程序上也不能太复杂,也并不是一定要完全随机
    41 replies  •  2018-09-10 11:56:56 +08:00
    cgcs
    cgcs
    Sep 9, 2018
    1
    新的 intel 处理器应该没这个问题了
    zwh2698
    zwh2698
    Sep 9, 2018 via Android
    2
    使用 ssl 的随机数会有改善
    thedrwu
    thedrwu
    Sep 9, 2018 via Android
    3
    熵池
    hhsuan
    hhsuan
    Sep 9, 2018 via Android
    4
    单靠软件是不行的,必须有硬件支持
    carlclone
    carlclone
    Sep 9, 2018
    5
    随机的随机种子
    herozhang
    herozhang
    Sep 9, 2018 via iPhone
    6
    有个随机数的网站,说是从大气白噪声和宇宙微波辐射来产生随机数
    AzadCypress
    AzadCypress
    Sep 9, 2018 via Android
    7
    真随机拿设备采环境噪声做种子
    shakespaces
    shakespaces
    Sep 9, 2018 via Android
    9
    单软件允许联网的话可以用网上的一些 api
    允许硬件的话,linux 有 /dev/random 和 /dev/urandom 可以使用
    wevsty
    wevsty
    Sep 9, 2018❤️1
    10
    Windows:
    C 可以使用 C Run-Time Library 中提供的 rand_s(),或者直接调用 API RtlGenRandom()

    Linux
    可以直接读取 /dev/random 或者 /dev/urandom 生产的数据。

    跨平台
    Cpp 可以使用 std::random_device (需要 C++11 以上)
    402124773
    402124773
    Sep 9, 2018
    11
    linux 下会用中断增加熵,一些随机中断,是可以用来产生随机数的吧
    zjyl1994
    zjyl1994
    Sep 9, 2018 via Android
    12
    可以考虑用密码学的随机生成器,那个随机性比较高
    alvin666
    alvin666
    Sep 9, 2018 via Android
    13
    linux 用 ssh 生成密钥据说是用的 cpu 热信息,putty 生成 key 是用鼠标在某区域划动
    silhouette
    silhouette
    Sep 9, 2018 via Android
    14
    硬件随机啊
    newtype0092
    newtype0092
    Sep 9, 2018
    15
    rand()不就是“程序上也不能太复杂,也并不是一定要完全随机”吗?
    innoink
    innoink
    Sep 9, 2018 via Android
    16
    use getrandom()
    winglight2016
    winglight2016
    Sep 9, 2018❤️3
    17
    有第三方服务,号称真随机,不过,理论上说,宇宙大爆炸是第一动因,其他都不过是必然的结果,所以真随机的说法也很可疑
    kY8mbXW833Lu28xn
    kY8mbXW833Lu28xn
    Sep 9, 2018 via Android
    18
    必没有,除非你能证明整个宇宙是随机的
    rateltalk
    rateltalk
    Sep 9, 2018 via iPhone
    19
    mt_rand ?
    t6attack
    t6attack
    Sep 9, 2018
    20
    如果你的开发中用得上,自然能接触到解决方案。比在这问的专业多了。
    iwtbauh
    iwtbauh
    Sep 9, 2018 via Android
    21
    cat /dev/random 将返回真随机数

    (至少) Linux 和 FreeBSD 都有这个特性
    Caturra
    Caturra
    Sep 9, 2018
    22
    C++的话 mt19937 应该挺随机的?(道听途说)

    如果只要求看起来勉强随机,但各平台实现简单方便的话可以随机写一个 Rand 如下
    做个模拟扔骰子测试一下感觉还行

    ```C++
    #include<iostream>
    using namespace std;
    unsigned int xjb=233;
    int Rand(){return (xjb=xjb*12345+23333)%6+1;}
    int main(){
    int cnt=1e8, vis[7]={0};
    while(cnt--) vis[Rand()]++;
    cnt=7;
    while(--cnt) cout<<vis[cnt]<<" ";
    return 0;
    }
    ```
    icylogic
    icylogic
    Sep 9, 2018 via iPhone
    23
    这种事情,你要拿需求去评估,才会知道你真正要的是啥。不然等于三千预算进笔记本吧。
    lightening
    lightening
    Sep 9, 2018 via iPhone
    24
    takato
    takato
    Sep 9, 2018
    25
    问题是,你需要多随机呢?至少要有个标准吧。。。

    毕竟,不同的随机程度,成本是截然不同的。。
    qiaobeier
    qiaobeier
    Sep 9, 2018
    26
    @alvin666 鼠标滑动啊,我今天还这么生成了一个 key,我说这软件怎么怪怪的,原来是这个原理。
    swkl86
    swkl86
    Sep 9, 2018
    27
    只有我好奇楼主要拿那么精确的随机值用来干什么么?
    小白没接触过大世面,求场景,求需求
    longaiwp
    longaiwp
    Sep 9, 2018
    28
    @icylogic 加钱加到 2W8 ?
    reus
    reus
    Sep 10, 2018
    29
    windows 和 linux 都有可以用于加密的随机发生源,linux 是 /dev/urandom,windows 是 CryptGenRandom
    不是说 rand 就一定不够随机,要看具体的实现。rand 只是一个接口,可以有不同的实现
    Phariel
    Phariel
    Sep 10, 2018 via iPhone
    30
    mingl0280
    mingl0280
    Sep 10, 2018
    31
    C#有 RngCryptoServiceProvider 可以生成密码学安全的随机数。
    liuyanjun0826
    liuyanjun0826
    Sep 10, 2018 via Android
    32
    时钟随机就足够了,你不可能保证大家都同时起床吧
    dangyuluo
    dangyuluo
    Sep 10, 2018
    33
    好羡慕能遇到这种问题的人,我目前只要用一个 random_device + mt19973 就满足了。
    imdong
    imdong
    Sep 10, 2018
    34
    获取用户键鼠操作
    ipwx
    ipwx
    Sep 10, 2018
    35
    脱离需求讲随机不太有意义。

    譬如求积分,随机性只要保证统计随机性即可。
    dychenyi
    dychenyi
    Sep 10, 2018
    36
    貌似处理器厂商有专门的的库来做这件事。

    https://developer.amd.com/amd-cpu-libraries_random_number_generator_library_eula/
    ifishman
    ifishman
    Sep 10, 2018 via Android
    37
    随机真的比顺序好用么?
    mandy0119
    mandy0119
    Sep 10, 2018
    38
    为什么我觉得用毫秒就可以了(滑稽脸),毕竟就算被伪造请求,每次网络延迟都不同,再不行固定加点 hashcode 后 3 位之类的
    wenzhoou
    wenzhoou
    Sep 10, 2018 via Android
    40
    就连气候都是一定程度可以预测的。原理可以看看蝴蝶效应。也许整个宇宙都是可以预测的呢。推荐大家看看刘慈欣的“ 镜子”。
    pythonee
    pythonee
    Sep 10, 2018
    41
    23 楼说得对,需要从数学角度上定义需求
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1270 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 89ms · UTC 20:32 · PVG 04:32 · LAX 12:32 · JFK 15:32
    ♥ Do have faith in what you're doing.