Delphi的随机生成器与C#的计算方法是否相同?

前端之家收集整理的这篇文章主要介绍了Delphi的随机生成器与C#的计算方法是否相同?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我遇到这个时,我正在将一些Delphi代码翻译成c#代码.我没有Delphi的环境设置,所以我不能自己测试它.

德尔福:@H_301_3@

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

C#:@H_301_3@

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

这些在Result中会有相同的值吗?如果没有,有什么想法可以这么做吗?@H_301_3@

解决方法

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));
    }
}

猜你在找的Delphi相关文章