- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
它会扔硬币来获得随机位吗?
还是掷骰子来获得1到6之间的随机整数?
还是从经过打乱的牌组中拿出一张卡片来获得1到52之间的数字?
。
。
。
还是可以像我们一样思考或拥有像我们一样的智慧?
显然,以上示例不是生成随机数据的方法。
那么,软件库如何在给定范围内生成random
数字?
哪个更随机:由人还是软件生成?
最佳答案
(注意:这通常是关于计算及其用途中的随机[和伪随机]数。)
确定性的过程永远都不可能有真正的随机数,这就是为什么计算机不太适合生成随机数的原因(因为CPU只能以确定性的方式翻转位)。大多数语言,框架和库都使用所谓的Pseudo-random number generators(PRNG)。那些采用某种初始状态向量的种子,该初始状态向量可以是单个数字或数字数组,并从那里生成一系列看似随机的值。结果通常满足某些统计指标,但并非完全随机,因为同一种子将产生完全相同的序列。
最简单的PRNG之一是所谓的Linear Congruential Generator(LCG)。它只有一个数字作为状态(最初是种子)。然后,对于每个连续的返回值,公式将像这样循环:
其中a,b和c是生成器的常数。 c通常是2的幂,例如232,仅仅是因为它易于实现(自动完成)且速度很快。但是,很难找到a和b的好值。作为最简单的示例,当使用a = 2和b = 0时,您可以看到结果值永远不会是奇数。这限制了发生器可以非常严格地产生的值的范围。通常,LCG是一个非常古老的概念,长期以来被更好的生成器所取代,因此,除非在极其有限的环境中使用(除非即使嵌入式系统通常也可以毫无问题地处理更好的生成器),否则不要使用它们-MT19937或其概括, WELL generators通常对于只不想担心其伪随机数的属性的人来说要好得多。
PRNG的一项主要应用是仿真。由于PRNG可以估计或保证统计特性,并且由于种子的性质可以精确地重复进行实验,因此它们在这里做得很好。假设您要发表论文,并希望其他人复制您的结果。使用硬件RNG(如下所述),除了包含您使用的每个单个随机数之外,您别无选择。对于可以轻松使用数十亿个甚至更多个数字的蒙特卡洛模拟,这是不可行的。
然后是用于密码应用的随机数生成器,例如保护您的SSL连接。例如Windows的CryptGenRandom或Unix的/dev/urandom
。这些通常也是PRNG,但是它们使用所谓的“熵池”进行播种,其中包含不可预测的值。这里的要点是生成不可预测的序列,即使相同的种子仍会产生相同的序列。为了最大程度地减少攻击者猜测序列的影响,需要定期对它们进行重新播种。熵池是从系统中的各个点收集的:事件,例如输入,网络活动等。有时,它也会被初始化为整个系统中假定包含垃圾的内存位置。但是,如果完成,必须注意确保熵池确实包含不可预测的内容。 Something that Debian got wrong in OpenSSL a few years ago.
您也可以直接使用熵池来获取随机数(例如,Linux的/dev/random
; FreeBSD对/dev/random
使用与/dev/urandom
相同的算法),但是一次也不会得到太多它是空的,需要一段时间才能补充。这就是为什么上面提到的算法通常用于将很小的熵扩展到更大的体积的原因。
然后是基于硬件的随机数生成器,它们使用不可预测的自然过程,例如放射性衰变或电线中的电噪声。那些是最苛刻的应用程序,需要许多“真正的”随机数,并且通常每秒可以生成数百MiB的随机性(好吧,该数据点已有几年历史,但是我怀疑这样做可以做很多)现在更快)。
您可以通过编写一个程序来模拟这样的事情,该程序是从带镜头盖的网络摄像头拍摄图像(然后才保留噪点),或者从不存在实际输入的音频输入中获取图像。那些对于一点黑客来说是很好的,但是通常不会产生良好的随机数,因为它们有偏差,即在比特流中零和那些比特没有以相同的频率表示(或者更进一步,序列00
,< cc>,01
和10
的生成频率不同...您也可以对较大的序列执行此操作)。因此,实际硬件RNG的一部分用于确保结果值满足某些统计分布属性。
有些人actually throw dice to get random dice rolls甚至take this into overdrive。人类创造了very bad random number generators。
关于language-agnostic - 哪个更随机:人工生成或软件生成的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6593636/
我一直在阅读Code Complete 2 .由于我不是以英语为母语的人,因此我需要一些时间才能理解某些陈述。我希望你描述作者在他的书中所做的这两个陈述之间的区别: You should progra
我将 TYPO3 安装从 8.6 升级到 9.5。在内容语言设置为“所有语言”的页面上,这些元素不会显示在前端。 似乎在 ContentObjectRenderer->getQueryConstrai
我和一个学生正在建立一个新的口译员家庭,我们希望以现有口译员为基准。我们很乐意下载包含 Computer Language Benchmarks Game 中使用的所有源代码的 tarball 或 z
因此,我正在尝试创建一个双语网站,只需单击一下即可将其从英语切换为葡萄牙语,反之亦然。 我收到此错误:Use of undefined constant language - assumed 'lan
我正在阅读一个比较不同编程语言的演示文稿。衡量的特征之一是“语言表现”。什么意思? 最佳答案 真正的答案:它没有任何意义,或者该演示文稿的作者当时在想什么。 也许它的意思是“执行相对于其他语言具有相同
Go talk 2009 pdf 有评论解释了他们为什么想出 go 语言: No new major systems language in a decade. 系统语言是什么意思? 它是一种应该通过
我现在正在使用 Squeak4.1 学习 SmallTalk。我使用 Squeak by Example 作为教程,在这里我反驳了一个 delema,“Morphic 是由...开发的,用于自编程语言
谁能告诉我如何编译和运行在 ZOMBIE 上编写的程序?例如,如果我编写了以下源代码线以将“hello world”打印到屏幕上,我该如何制作一个 .exe 文件。谢谢! HelloWorld is
我在看帖子Why Language is Important (Why I prefer C#)来自“Dot Net Thoughts”,文章的第一段以以下声明结尾: ...every languag
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
我正在尝试使用 qTranslate X 制作一个基本的语言切换器,例如: FR | EN 有一个函数可以实现这一点:qtranxf_generateLanguageSelectCode('text'
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我正在研究浏览器指纹。在应用程序的 webview 中运行的 js 将通过获取 navigator.language.substr(0,2) == navigator.languages[0].sub
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
"Page description language"、"markup language"、"Page description markup language"有什么区别和关系? 根据他们的 wiki
我正在为 IntelliJ 创建一个自定义语言插件。 我希望新语言的文件可以包含其他语言的文本片段。 我想支持的特定语言是 HTML、JS、CSS 和 SQL。 我还想支持其他自定义语言(即我要为其定
我正在用 mysql 创建一个图书数据库。一本书可以有不同的语言。并且将会有数千本书。 (而且我远不是这个领域的专家,之前只创建过小型和简单的数据库) 1) 只创建一个包含语言列的表并为其创建索引是否
我的网站使用用户可切换的三种不同语言。语言切换由 JavaScript (AngularJS) 在客户端完成。 我在我的网站上使用 reCAPTCHA 2,当用户切换网站语言时需要更改 reCAPTC
我在 Core Image Kernel Language 中有以下函数,我需要在 Metal Shading Language 中等效的东西,但是我对 destCoord 、 unpremultip
“不存在‘编译语言’或‘解释语言’之类的东西。语言实现者选择编写编译器、解释器还是两者之间的任何东西都是实现细节,与语言无关。” 上述说法是否属实? 最佳答案 是的,在最严格的解释中它是正确的。您可以
我是一名优秀的程序员,十分优秀!