Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如果我在5o'时调用arc4random_uniform(6);时钟还是5:01,我能得到相同的号码吗?_Ios_Random_Arc4random - Fatal编程技术网

Ios 如果我在5o'时调用arc4random_uniform(6);时钟还是5:01,我能得到相同的号码吗?

Ios 如果我在5o'时调用arc4random_uniform(6);时钟还是5:01,我能得到相同的号码吗?,ios,random,arc4random,Ios,Random,Arc4random,我正在制作一款iOS骰子游戏,一位测试人员说他喜欢这样的想法,即掷骰子是预先确定的,因为我使用的是arc4random\u uniform(6)。我不确定他们是不是。因此,撇开代码可能连续选择同一个数字的可能性不谈,如果我在5秒或10秒的时间内点击骰子,我会生成一个不同的数字吗?基本上,它是随机的。不,它不是以时间为基础的。苹果已经记录了这是如何随机的:基本上,这是随机的。不,它不是以时间为基础的。苹果在这里记录了这是如何随机的:您的测试人员可能认为软件随机数生成器实际上是伪随机的。它们的输出并

我正在制作一款iOS骰子游戏,一位测试人员说他喜欢这样的想法,即掷骰子是预先确定的,因为我使用的是
arc4random\u uniform(6)
。我不确定他们是不是。因此,撇开代码可能连续选择同一个数字的可能性不谈,如果我在5秒或10秒的时间内点击骰子,我会生成一个不同的数字吗?

基本上,它是随机的。不,它不是以时间为基础的。苹果已经记录了这是如何随机的:

基本上,这是随机的。不,它不是以时间为基础的。苹果在这里记录了这是如何随机的:

您的测试人员可能认为软件随机数生成器实际上是伪随机的。它们的输出并不像压模辊那样是真正随机的物理过程:它是由生成器保持或给定的某种状态决定的

PRNG的一个简单实现是“线性同余生成器”:标准库中的函数
rand()
使用此技术。它的核心是一个简单的数学函数,每个输出都是通过输入前一个来生成的。因此它需要一个“种子”值,这就是测试人员所想的--您得到的输出值序列完全由种子值决定

如果您使用
rand()
创建一个简单的C程序,您可以(事实上必须)使用配套函数
srand()
(即“seed rand”)为LCG提供一个起始值。如果使用一个常量作为种子值:
srand(4)
,每次都将以相同的顺序从
rand()
获得相同的值

获取任意--not random--seed for
rand()
的一种常见方法是使用当前时间:
srand(time(NULL))
。如果您这样做了,并以足够快的速度重新设定种子并生成了一个数字,
time()
的返回值没有改变,那么您确实可以从
rand()
中看到相同的输出

这不适用于
arc4random()
:它不使用LCG,也不与
rand()
共享此特性。它被认为是*;也就是说,它的输出与真实的物理随机性是无法区分的

这部分是因为
arc4random()
arc4random()在您使用它时会重新对其进行种子设定,并且种子设定本身是基于操作系统收集的不可预测的数据。决定输出的状态完全在算法内部;作为普通用户(即,不是攻击者),您不会查看、设置或以其他方式与该状态交互

因此,您不能可靠地重复
arc4random()
的输出。然而,可重复的伪随机算法确实存在,您当然可以使用它们进行测试



*Wikipedia指出,在过去几年中已经发现了一些弱点,它可能不再适用于加密技术。不过,只要不涉及任何金钱,这对你的游戏来说应该没问题

您的测试人员可能认为软件随机数生成器实际上是伪随机的。它们的输出并不像压模辊那样是真正随机的物理过程:它是由生成器保持或给定的某种状态决定的

PRNG的一个简单实现是“线性同余生成器”:标准库中的函数
rand()
使用此技术。它的核心是一个简单的数学函数,每个输出都是通过输入前一个来生成的。因此它需要一个“种子”值,这就是测试人员所想的--您得到的输出值序列完全由种子值决定

如果您使用
rand()
创建一个简单的C程序,您可以(事实上必须)使用配套函数
srand()
(即“seed rand”)为LCG提供一个起始值。如果使用一个常量作为种子值:
srand(4)
,每次都将以相同的顺序从
rand()
获得相同的值

获取任意--not random--seed for
rand()
的一种常见方法是使用当前时间:
srand(time(NULL))
。如果您这样做了,并以足够快的速度重新设定种子并生成了一个数字,
time()
的返回值没有改变,那么您确实可以从
rand()
中看到相同的输出

这不适用于
arc4random()
:它不使用LCG,也不与
rand()
共享此特性。它被认为是*;也就是说,它的输出与真实的物理随机性是无法区分的

这部分是因为
arc4random()
arc4random()在您使用它时会重新对其进行种子设定,并且种子设定本身是基于操作系统收集的不可预测的数据。决定输出的状态完全在算法内部;作为普通用户(即,不是攻击者),您不会查看、设置或以其他方式与该状态交互

因此,您不能可靠地重复
arc4random()
的输出。然而,可重复的伪随机算法确实存在,您当然可以使用它们进行测试



*Wikipedia指出,在过去几年中已经发现了一些弱点,它可能不再适用于加密技术。不过,只要不涉及任何金钱,这对你的游戏来说应该没问题

您尝试时发生了什么?arc4random_uniform是随机的。您是否在询问
arc4random
的随机性是否受到时钟的任何影响?换句话说,您是否想知道,为了讨论起见,如果您现在调用
arc4random\u uniform(6)
,是否会得到
4
的结果,但如果您在调用
arc4random\u uniform(6)
之前多等了一分钟,可能会得到不同的结果