c # — создание одинаковых случайных чисел в c ++ и .NET

Я должен портировать программу C ++ на C #.

Случайные числа участвуют в программе. Я должен произвести одинаковые случайные числа в обеих программах, чтобы получить одинаковые результаты в тестировании.

В C ++ я использую

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

и в C # я использую

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

Однако программы производят разные числа, несмотря на то же самое семя. Есть ли способ получить те же случайные числа?

1

Решение

По сути, обе случайные функции (srand vs Random) имеют разные базовые реализации, поэтому вы не можете полагаться на них, дающие одинаковый результат. Так почему бы не предоставить набор из «n» чисел и передать их в ваш алгоритм как на с ++, так и на с # — только для целей тестирования курса? Таким образом, вы всегда будете уверены, что у вас будет одинаковое количество, одинаковые цифры и одинаковый порядок.

например: файл с каждой строкой с некоторыми числами, затем считайте его в обоих c ++ / c # и затем введите эти числа в алгоритм, который вы пытаетесь «протестировать».

(Кроме того, что вы хотите здесь проверить? Алгоритм, который вы написали (таким образом, перенесенный алгоритм), или «случайные» возможности в обоих языках?
Потому что, в зависимости от вашего ответа на мои вопросы выше, ответ, который будет иметь отношение к вашему делу, может сильно отличаться! Так не могли бы вы предоставить нам больше контекста?)

1

Другие решения

Знаете ли вы, какой алгоритм используется для классов c ++ rand и c # Random?

Вы можете попробовать реализовать некоторые PNG самостоятельно. Например. LCG Алгоритм очень прост и легко реализуем на обоих языках … Просто используйте некоторые общие параметры со страницы вики.

2

я использовал это

Random rnd = new Random();

как мое заявление.

и это:

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

как выполнение, когда кнопка нажата.

Может быть, вы можете иметь полезное использование этого.

Привет

0
По вопросам рекламы [email protected]