当我碰到这个时,我正在将一些Delphi代码翻译成c#代码.我没有Delphi的环境设置,所以我不能自己测试它.
德尔福:
RandSeed := var1;
Result := Random($FF);
Run Code Online (Sandbox Code Playgroud)
C#:
Random RandSeed = new Random(var1);
Result = RandSeed.Next(255);
Run Code Online (Sandbox Code Playgroud)
这些会在结果中使用相同的值吗?如果没有,有什么想法可以这么做吗?
Bar*_*lly 17
Delphi PRNG是一个确定性线性同余生成器,134775813为a1和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));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2413 次 |
| 最近记录: |