5

我一直在研究一个需要使用伪随机数生成来允许为给定种子生成同一组随机数的开发问题。我目前一直在研究如何使用long random(void)and void srandom(unsigned seed)手册页),目前它们正在 Mac 应用程序、iOS 应用程序和 iOS 应用程序(64 位)中生成相同的随机数集,这正是我所希望的。iOS 测试只在模拟器中进行,所以我不知道这是否会影响结果。

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

4

3 回答 3

6

我想说它们有可能会改变,因为任何标准都不能保证顺序。

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

next_number = (a * current_number + b) % c

a = 1103515245
b = 12345
c = 4294967296

a、b、c 的这些值为您提供了良好的统计特性,并且以构建快速而肮脏的生成器而闻名。

于 2013-09-25T07:55:07.593 回答
2

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

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

Bathsheba 提出了这个发电机。您可以谷歌搜索“伪随机生成器算法”。这是维基百科上列出的算法列表。

于 2013-09-25T07:55:42.177 回答
0

事实上,srandom根据这篇博文,自 Mac OS X 10.7 以来确实发生了变化。然而,这是由于srandom实现方式:它试图访问未初始化的局部变量,这是 C 中未定义的行为。根据帖子,自 Mac OS X 10.7 起使用的新编译器优化了未初始化的内存访问,改变了它的以微妙的方式行为。

于 2013-10-06T17:25:24.370 回答