随机()会不会改变?

时间:2013-09-25 07:48:28

标签: ios objective-c macos random

我一直在研究一个需要使用伪随机数生成的开发问题,以允许为给定的种子生成相同的随机数集。 我目前一直在考虑使用long random(void)void srandom(unsigned seed)进行此操作(man page),目前这些在Mac应用,iOS应用和iOS中生成相同的随机数集应用程序(64位)这是我希望的。 iOS测试只在模拟器中进行,所以我不知道这是否会影响结果。

我主要担心的是,这个算法可能会在某些时候发生变化,使我们正在开发的应用程序对旧数据无效。 这些算法在未来设备上更改/不同的可能性有多大?

3 个答案:

答案 0 :(得分:6)

我会说非常可能会因为任何标准都无法保证序列而发生变化。

为什么不使用自己的随机数序列?即使是简单的线性同余生成器也能满足随机性的大多数统计特性。以下是这种发电机的公式:

next_number = (a * current_number + b) % c

a = 1103515245
b = 12345
c = 4294967296

a,b,c的这些值为您提供了良好的统计特性,并且在构建快速和脏的生成器时非常有名。

答案 1 :(得分:2)

我对你提出的问题的答案一无所知。

如果一个相关的问题是“我怎么能绝对确定在10年后产生相同的伪随机序列?”,这个问题的答案是:不要依赖外部库,编写代码明确。

芭丝谢芭提议this generator。你可以谷歌搜索“伪随机生成器算法”。以下是wikipedia上列出的算法列表。

答案 2 :(得分:0)

事实上,srandom根据this blog post自Mac OS X 10.7以来发生了变化。但是,这是应该的 实现srandom的方式:它试图访问未初始化的局部变量,该变量 在C中是未定义的行为。根据帖子,自Mac以来使用的新编译器 OS X 10.7优化了未初始化的内存访问,微妙地改变了它的行为 方式。