gpt4 book ai didi

c# - 如果输入相同的种子,Delphi 的随机生成器是否与 C# 的计算相同?

转载 作者:太空狗 更新时间:2023-10-29 18:03:16 25 4
gpt4 key购买 nike

当我遇到这个问题时,我正在将一些 Delphi 代码翻译成 C# 代码。我没有 Delphi 的环境设置,所以我无法自己测试。

德尔福:

RandSeed := var1;
Result := Random($FF);

c#:

Random RandSeed = new Random(var1);
Result = RandSeed.Next(255);

这些会在 Result 中放置相同的值吗?如果没有,有什么办法可以做到吗?

最佳答案

Delphi PRNG 是确定性的 linear congruential generator 134775813 作为 a 和 1 作为 c,并返回范围限制数字的高 32 位。这是 C# 中的一个实现,它返回与 Delphi 相同的值:

using System;

class DelphiRandom
{
int _seed;

public DelphiRandom(int seed)
{
_seed = seed;
}

int GetNext() // note: returns negative numbers too
{
_seed = _seed * 0x08088405 + 1;
return _seed;
}

public int Next(int maxValue)
{
ulong result = (ulong) (uint) GetNext() * (ulong) (uint) maxValue;
return (int) (result >> 32);
}
}

class App
{
static void Main()
{
DelphiRandom r = new DelphiRandom(42);
for (int i = 0; i < 10; ++i)
Console.WriteLine(r.Next(100));
}
}

关于c# - 如果输入相同的种子,Delphi 的随机生成器是否与 C# 的计算相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/537785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com