- 主题:C语言生成的第一个随机数很伪,有什么办法解决嘛?
用的方法是:time()+srand()+rand()
虽然知道计算机无法生成真随机数,但这第一个数个也太假了吧,基本上第一个数正比
于时间戳。各位老师有啥好的办法嘛?弃用第一个数?用生成的第二个数?
--
FROM 111.193.238.*


random()
【 在 sqsl 的大作中提到: 】
: 用的方法是:time()+srand()+rand()
: 虽然知道计算机无法生成真随机数,但这第一个数个也太假了吧,基本上第一个数正比
: 于时间戳。各位老师有啥好的办法嘛?弃用第一个数?用生成的第二个数?
: ...................
--
FROM 117.136.113.*
不是前端啊
【 在 rockyzhang 的大作中提到: 】
: random()
--
FROM 111.193.238.*
intel/amd cpu有RDRND指令可以生成基于热力学熵的真随机数
【 在 sqsl 的大作中提到: 】
: 用的方法是:time()+srand()+rand()
: 虽然知道计算机无法生成真随机数,但这第一个数个也太假了吧,基本上第一个数正比
: 于时间戳。各位老师有啥好的办法嘛?弃用第一个数?用生成的第二个数?
: ...................
--
FROM 114.253.38.*
用openssl的随机函数,那个会收集一些信息来初始化随机数
自己搞的话,windows上可以调用CryptGenRandom()这种API,API内部也是收集一些信息作为随机数的种子,然后用rc4/md5之类的计算随机数。
【 在 sqsl 的大作中提到: 】
: 用的方法是:time()+srand()+rand()
: 虽然知道计算机无法生成真随机数,但这第一个数个也太假了吧,基本上第一个数正比
: 于时间戳。各位老师有啥好的办法嘛?弃用第一个数?用生成的第二个数?
: ...................
--
修改:z16166 FROM 123.118.191.*
FROM 123.118.191.*
因为时间戳很伪。
这样吧,这些信息组成一个长byte串,进行MD5,再从中随机截取64bit。
【 在 sqsl 的大作中提到: 】
: 用的方法是:time()+srand()+rand()
: 虽然知道计算机无法生成真随机数,但这第一个数个也太假了吧,基本上第一个数正比
: 于时间戳。各位老师有啥好的办法嘛?弃用第一个数?用生成的第二个数?
: ...................
--
修改:ylh0315 FROM 221.218.61.*
FROM 221.218.61.*
实际需求是什么?怎样的性能要求?统计要求?可预测性要求?跨平台和依赖库要求?
无论如何c标准库的rand的接口是比较简陋的,很不容易用对。c++标准库的<random>就好多了,接口现代而丰富,通常统计用mt19937引擎,不可预测用random_device引擎就很好。密码学用的随机数都有自己的库,往往性能低一些,就是生成随机字节流。硬件相关的函数可能又快又好,比如rdrand这种。主流操作系统也都有自己的随机数,也主要用于密码学需求。
另外你的观察也并不准确,vc或gcc下rand使用的线性同余序列初值也不至于随种子递增,你的实验次数太少了。
【 在 sqsl 的大作中提到: 】
: 用的方法是:time()+srand()+rand()
:
: 虽然知道计算机无法生成真随机数,但这第一个数个也太假了吧,基本上第一个数正比
: ...................
--
修改:milksea FROM 124.64.16.*
FROM 124.64.16.*
随便用用得了,你使用随机数的场景也没什么高要求的
我告诉你有一种设备,里面利用到了光量子测不准原理,提供高质量真随机,这设备卖几万,你买吗?
【 在 sqsl 的大作中提到: 】
: 用的方法是:time()+srand()+rand()
: 虽然知道计算机无法生成真随机数,但这第一个数个也太假了吧,基本上第一个数正比
: 于时间戳。各位老师有啥好的办法嘛?弃用第一个数?用生成的第二个数?
: ...................
--
FROM 103.37.140.*
通常热采样加纠偏的效果就足够好了,量子随机发生器我总觉得是噱头。
【 在 pigtracer 的大作中提到: 】
: 随便用用得了,你使用随机数的场景也没什么高要求的
:
: 我告诉你有一种设备,里面利用到了光量子测不准原理,提供高质量真随机,这设备卖几万,你买吗?
: ...................
--
FROM 114.249.220.*
读 /dev/random
【 在 sqsl 的大作中提到: 】
: 用的方法是:time()+srand()+rand()
: 虽然知道计算机无法生成真随机数,但这第一个数个也太假了吧,基本上第一个数正比
: 于时间戳。各位老师有啥好的办法嘛?弃用第一个数?用生成的第二个数?
--
FROM 27.38.197.*