在 c++ 和 .NET 中生成相同的随机数

Producing same random numbers in c++ and .NET

本文关键字:随机数 c++ NET      更新时间:2023-10-16

我必须将c ++程序移植到C#。

该程序涉及随机数。我必须在两个程序中生成完全相同的随机数才能在测试中获得相同的结果。

在我使用的C++

srand(1000)
...
double r = (double)rand() / (double)(RAND_MAX);

在 C# 中,我使用

private readonly Random _rnd = new Random(1000);
...
_rnd.NextDouble()

然而,尽管种子相同,程序会产生不同的数字。有没有办法产生相同的随机数?

你知道

吗,c++ rand 和 c# 随机类使用什么算法?

您可以尝试自己实现一些 PNG。例如。LCG算法非常简单,在两种语言中都可以轻松实现...只需使用维基页面中的一些常见参数。

本质上,两个随机函数(srand vs Random)都有不同的底层实现,因此你不能依赖它们给出相同的输出。那么,为什么不提供一组"n"个数字,并将它们输入到c ++和c#的算法中 - 当然只是为了测试目的?这样,您始终可以确定您将拥有相同的金额,相同的数字和相同的顺序。

例如:一个文件,每行都有一些数字,然后在C ++/C#中读出它,然后将这些数字输入到您尝试"测试"的算法中。

(另外,您想在这里测试什么?您编写的算法(因此是移植的算法),还是两种语言的"随机"功能?因为,根据您对我上述问题的回答,与您的案件相关的答案可能会有很大不同!那么,您能为我们提供更多背景信息吗?

我用了这个

Random rnd = new Random();

作为我的宣言。

而这个:

Convert.ToString(rnd.Next(1, 49))

作为按下按钮时的执行。

也许你可以对此有所有用的利用。

问候