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)); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |