Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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
Delphi 如何使两个程序具有相同的随机数序列?_Delphi_Random_Numbers - Fatal编程技术网

Delphi 如何使两个程序具有相同的随机数序列?

Delphi 如何使两个程序具有相同的随机数序列?,delphi,random,numbers,Delphi,Random,Numbers,两个应用程序(服务器和客户端)是否可以生成相同的随机数序列?我需要的是: 在服务器上: i1:=randomrange(10,50); //i1 will be 15 i2:=randomrange(10,50); //i2 will be 40 i3:=randomrange(10,50); //i3 will be 20 在客户端: i1:=randomrange(10,50); //i1 will be 15 i2:=randomrange(10,50); //i2 will be 40

两个应用程序(服务器和客户端)是否可以生成相同的随机数序列?我需要的是:

在服务器上:

i1:=randomrange(10,50); //i1 will be 15
i2:=randomrange(10,50); //i2 will be 40
i3:=randomrange(10,50); //i3 will be 20
在客户端:

i1:=randomrange(10,50); //i1 will be 15
i2:=randomrange(10,50); //i2 will be 40
i3:=randomrange(10,50); //i3 will be 20

序列需要依赖于服务器计算并发送给客户端的值。实际上,随机数生成器通常是伪随机的。给定相同的初始状态,伪随机数生成器(PRNG)将生成相同的数字序列

通常情况下,通过种子提供thia状态。如果您使用的是RTL提供的PRNG,那么您可以通过将值指定给来设置种子。在每个程序中使用相同的种子,您将生成相同的值


如果您使用的是不同的PRNG,请查阅其文档,了解如何为其设定种子

如果你想自己实现一个伪随机序列,你可以从线性同余生成器开始。其实很简单

acm值只有3个限制

  • mc是相对优质的
  • a-1可被m的所有素数因子整除
  • a-1可被4整除,如果m可被4整除

  • 有关详细信息,请参见wiki。

    如果您在服务器端和客户端使用相同的随机数生成器,并使用相同的种子初始化生成器,则应获得相同的“随机”数序列。David是对的,但他假定为非加密PRNG。如果您想要相同的随机数,那么请避免加密PRNG,它们被设计为即使使用相同的种子也不会给出相同的随机数——它们使用其他系统变量以及任何提供的种子来初始化RNG。@rossum正如David所说,如果PRNG具有相同的初始状态,它将生成相同的序列。如果生成的序列不是由初始状态100%定义的,则它不是PRND。这对于任何PRND都是正确的,包括加密PRNG。加密PRNG确实有一个初始状态。只是初始状态并不是完全由用户定义的。除了所使用的种子外,它们还使用各种内部系统级的熵源,至少在理论上,攻击者很难确定这些熵源。初始状态存在,但不是完全由用户确定的。因此,没有两个实例可以可靠地设置为相同的初始状态。