加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 03:52:13 所属栏目:大数据 来源:网络整理
导读:当我遇到这个时,我正在将一些Delphi代码翻译成c#代码.我没有Delphi的环境设置,所以我不能自己测试它. 德尔福: RandSeed := var1;Result := Random($FF); C#: Random RandSeed = new Random(var1);Result = RandSeed.Next(255); 这些在Result中会有相同的值
当我遇到这个时,我正在将一些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));
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读