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

时间:2013-12-22 12:38:11

标签: c# c++ .net random random-seed

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

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

在C ++中我使用

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

在C#中我使用

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

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

3 个答案:

答案 0 :(得分:2)

你知道吗,c ++ rand和c#Random class使用了什么算法?

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

答案 1 :(得分:1)

基本上两个随机函数(srand与Random)都有不同的底层实现,因此你不能依赖它们给出相同的输出。那么为什么不提供一组“n”数字并将它们输入到c ++和c#中的算法中 - 仅用于测试目的?通过这种方式,您始终可以确定您的数量,数量和订单数量相同。

例如:一个文件,每行都有一些数字,然后在c ++ / c#中读出,然后将这些数字输入到你试图“测试”的算法中。

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

答案 2 :(得分:0)

我用过这个

Random rnd = new Random();

作为我的宣言。

和此:

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

按下按钮时的执行。

也许你可以对此有用。

问候