【问题标题】:What is the exact algorithm for Objective-C's built-in rand() function?Objective-C 内置的 rand() 函数的确切算法是什么?
【发布时间】:2011-01-18 12:45:49
【问题描述】:

如果您有一个客户端/服务器应用程序,并且想要复制 rand() 函数在客户端上生成的相同系列的随机数,但在服务器上,算法/伪代码是什么?客户端和服务器将获得相同的种子(客户端上的 srand())。

谢谢!

请注意:

  • 这是未知的吗?如果有,请说明
  • 可以逆向工程吗?如果是这样,请张贴,除非任何许可协议会阻止您这样做。换句话说,不要做任何违法的事情
  • 我对客户端/服务器应用程序的设计建议不感兴趣
  • 我知道有更好和更新的方法来生成兰特数

【问题讨论】:

  • 您确定 随机 数字是实现更大目标所需的吗?因为这样你就不会在 random 附近生成任何东西:只有预先确定的序列。如果您确实想要 随机 数字,这不是最好的方法。如果您不需要随机数字,为什么要使用rand()
  • @Martinho: rand() 不提供 随机 数字,它提供了一个伪随机序列。这看起来正是提问者想要的(因为他在两个不同的地方使用相同的种子),他只是称它们为“随机数”。
  • 我当然不会为此使用rand,除非 iOS 和 OSX 的文档都指定了确切的算法,并指定了相同的东西。否则,没有理由假设 Apple 不会在未来发布的某个操作系统或其他操作系统中更改它,并且您的客户端/服务器将不再匹配。即使它被记录在案,写一个简单的 PRNG 也很容易,我仍然可能不会冒险rand
  • @Steve Jessop:你是对的。我正在寻找相同的伪随机序列。谢谢你的澄清。
  • @Steve Jessop:是的,我也理解这种风险。感谢您表达这种担忧,很高兴看到它为其他用户写下来。

标签: iphone objective-c c random


【解决方案1】:

来自 Apple 的 Darwin 源代码,here is the Mac implementation of rand(),应该与 iOS 上使用的相同。 Here 也是 random() 的实现。它们似乎都来自 FreeBSD。

【讨论】:

    【解决方案2】:

    我见过的大多数 C 编译器都将linear congruential 随机数生成器用于它们的 rand() 函数。您无需对其进行逆向工程:它是开源的。

    顺便说一句,如果这是某种加密/安全系统的基础。这是一个真的坏主意。

    【讨论】:

    • 费鲁乔,谢谢您的回答。这不适用于加密/安全系统——我同意,那将是一个可怕的想法。我很高兴能进一步研究“线性同余随机数生成器”。
    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多