我一直在使用 arc4random() 和 arc4random_uniform() 我总觉得它们不是完全随机的,例如,我是 随机从一个数组中选择值,但当我连续多次生成它们时,得出的值通常是相同的,所以今天我想我会使用 Xcode playground 来查看这些函数的行为方式,所以我首先测试 arc4random_uniform 生成一个介于 0 和 4 之间的数字,所以我使用了这个算法:
import Cocoa
var number = 0
for i in 1...20 {
number = Int(arc4random_uniform(5))
}
我运行了好几次,下面是大多数时候值(value)观是如何演变的:
所以你可以看到数值在反复增加和减少,一旦数值处于最大值/最小值,它们通常会在一段时间内保持不变(参见第 5 步的第一个屏幕截图,该值保持在3 在 6 个步骤中,问题是它一点也不异常,在我的测试中,该函数实际上大部分时间都以这种方式运行。
现在,如果我们看一下 arc4random(),它基本上是一样的:
所以这是我的问题:
谢谢。
编辑:
最后,我做了两个令人惊讶的实验,第一个是真正的骰子:
让我感到惊讶的是,我不会说它是随机的,因为我看到了与 arc4random() 和 arc4random_uniform() 描述为非随机的相同类型的模式,Jean-Baptiste Yunès指出,人类并不善于观察数字序列是否真的是随机的。
我也想做一个更“科学”的实验,所以我做了这个算法:
import Foundation
var appeared = [0,0,0,0,0,0,0,0,0,0,0]
var numberOfGenerations = 1000
for _ in 1...numberOfGenerations {
let randomNumber = Int(arc4random_uniform(11))
appeared[randomNumber]++
}
for (number,numberOfTimes) in enumerate(appeared) {
println("\(number) appeard \(numberOfTimes) times (\(Double(numberOfGenerations)/Double(numberOfTimes))%)")
}
要查看每个数字出现了多少次,并且这些数字实际上是随机生成的,例如,这是控制台的一个输出:
0出现了99次。
1出现97次。
2出现了78次。
3出现80次。
4出现了87次。
5出现107次。
6出现了86次。
7出现了97次。
8出现100次。
9出现了91次。
10出现了78次。
所以肯定没问题?
编辑 #2:我再次进行了更多掷骰子实验,但它仍然让我感到惊讶:
最佳答案
算法无法生成真正的随机数字序列。它们只能产生伪随机数字序列(看起来像随机序列的东西)。因此,根据所选算法的不同,“随机性”的质量可能会有所不同。 arc4random() 序列的质量通常被认为具有良好的随机性。
您无法直观地分析序列的随机性……人类很难检测到随机性!他们倾向于在没有的地方找到一些结构。在你的图表中没有什么真正的伤害(除了罕见的连续 6 个 3 的子序列,但这是随机的,有时会发生不寻常的事情)。如果您使用骰子生成序列并绘制其图形,您会感到惊讶。请注意,只有 20 个数字的样本无法针对其随机性进行认真分析,您需要更大的样本。
如果你需要一些其他的随机性,你可以尝试使用/dev/random伪文件,它会在你每次读入时产生一个随机数。这个序列是由一个混合产生的在您的计算机中发生的算法和外部物理事件的集合。
关于swift - arc4random() 和 arc4random_uniform() 不是真正随机的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27813728/
我正在尝试为我的gem编写规范,它生成otp并将其保存在数据库中。现在我正在为它编写规范。所以基本上我有三种方法generate_otp!、regenerate_otp!、verify_otp(otp)。generate_otp!的作用是调用包含三个变量的方法generate_otpotp_code-基本上是使用secure_random生成的随机值otp_verified-一个bool值,用于设置otp是否已验证的状态otp_expiry_time-设置otp的到期时间,可以由Rails应用在配置中设置。这三个也是我的数据库的列。在generate_otp之后,我正在调用active
我对Ruby知之甚少,所以如果这个问题的答案显而易见,请原谅我。我注意到http://www.ruby-doc.org/stdlib-1.9.3/libdoc/securerandom/rdoc/SecureRandom.html当调用random_bytes时,Ruby使用pid和当前时间来播种OpenSSL::Random。除非幕后发生其他事情,否则这不正是Netscape在90年代中期在其最初的SSL实现中使用的种子吗?http://en.wikipedia.org/wiki/Random_number_generator_attack#Prominent_examples_of
这是我的代码:我想随机排列答案对象。考虑到可能的答案数量少于10个,最有效的方法是什么? 最佳答案 您可以使用shuffle像这样的方法:question.answers.shuffle.eachdo|answer| 关于ruby-on-rails-rails:eachinrandomorder,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/13123197/
我试图在确定性地随机选择东西方面变得聪明,并发现了这个:irb(main):011:0>Random.new(Random.new(1).rand+1).rand==Random.new(1).rand=>trueirb(main):012:0>Random.new(Random.new(5).rand+1).rand==Random.new(5).rand=>falseirb(main):013:0>Random.new(Random.new(5).rand+5).rand==Random.new(5).rand=>true有那么一瞬间,我想“哇,这可能是随机数生成器的一个属性”,但
我正在使用Algoliainstantsearch.js来显示选举候选人(此处:https://laprimaire.org/candidats/)。我希望候选人的初始显示是随机的,以便每个候选人或多或少获得相同的可见度。我在这个答案中读到,它不是Algolia的一个特性,但它应该可以通过一些js技巧来实现:Isitpossibletosortrandomly,andtoqueryonfieldifitexists?问题是我正在使用instantsearch.js,但我找不到如何在instantsearch.js的情况下实现上述searchFunction。我从文档中看到可以使用sea
刚刚在Javascript中尝试在for循环的条件(这就是所谓的?)中生成随机数时遇到了一些有趣的事情。所以,如果我要编写这样的代码:for(vari=0;i它会返回这样的结果:958332684456335345311但是如果我要在第二个for循环之前在变量中生成一个随机数:for(vari=0;i它会返回这样的结果:11131421919171921851518211916151320这里究竟发生了什么?这让我困惑了一会儿。for循环中的Math.random()是否在每次迭代后生成一个新的随机数?循环是否运行代码、迭代和检查条件,并在每次检查条件时生成一个新的随机数?这就是正在发
目录简介torch.nn.init.xavier_uniform_()语法作用举例参考结语简介Hello!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研学习经验:扎实基础+多做笔记+多敲代码+多思考+学好英语! 唯有努力💪 本文仅记录自己感兴趣的内容torch.nn.init.xavier_uniform_()语法torch.nn.init.xavier_uniform_(tensor,gain=1.0)作用根据了解训练深度
如果轮盘游戏网站csgopolygon.com正在调用Math.random和Math.floor,我如何预测它的结果? 最佳答案 您认为在理论上可以预测Math.random结果的直觉是正确的。这就是为什么,如果你想构建一个游戏/赌博应用程序,你应该确保使用cryptographicallysecurepseudo-randomnumbergenerator.如果他们正在使用这样的东西,那就别管它了。但是,如果您是正确的,并且他们使用System.time作为Java附带的标准随机数生成器的种子,那么可能有办法。这将涉及生成数百万
随机森林1.使用Boston数据集进行随机森林模型构建2.数据集划分3.构建自变量与因变量之间的公式4.模型训练5.寻找合适的ntree6.查看变量重要性并绘图展示7.偏依赖图:PartialDependencePlot(PDP图)8.训练集预测结果1.使用Boston数据集进行随机森林模型构建library(rio)library(ggplot2)library(magrittr)library(randomForest)library(tidyverse)library(skimr)library(DataExplorer)library(caret)library(varSelRF)li
我对数组如何与Math.random()等函数协同工作感到困惑。由于Math.random()函数选择了一个大于等于0且小于1的数,那么数组中的每个变量具体分配的是什么数呢?例如,在下面的代码中,必须选择什么数字才能打印出1?必须选择什么数字才能打印出jaguar?varexamples=[1,2,3,56,"foxy",9999,"jaguar",5.4,"caveman"];varexample=examples[Math.round(Math.random()*(examples.length-1))];console.log(example);是否为数组中的每个元素分配了一个等