1

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

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

在 C++ 中我使用

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

在 C# 中我使用

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

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

4

3 回答 3

2

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

您可以尝试自己实现一些PNG。例如。LCG算法在两种语言中都非常简单且易于实现……只需使用 wiki 页面中的一些常用参数即可。

于 2013-12-22T13:03:31.000 回答
1

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

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

(另外,你想在这里测试什么?你写的算法(移植算法),或者两种语言的“随机”能力?因为,根据你对我上面问题的回答,答案是与您的案例相关的可能会有很大差异!那么您能否为我们提供更多背景信息?)

于 2013-12-22T12:56:30.603 回答
0

我用这个

Random rnd = new Random();

作为我的宣言。

和这个:

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

作为按下按钮时的执行。

也许您可以对此有所帮助。

问候

于 2013-12-22T13:04:54.080 回答