random int



Автор Amangeldi Anaklychew задал вопрос в разделе Другие языки и технологии

проблема с random() c# и получил лучший ответ

Ответ от ...[гуру]
Потому, что Random не даёт случайные значения, а даёт псевдослучайные (формулой).
Цитата из MSDN:
Начальное значение по умолчанию извлекается из системных часов, которые обладают конечной разрешающей способностью. Вследствие этого различные объекты Random, создаваемые в закрытой последовательности путем вызова конструктора по умолчанию, будут обладать одинаковым начальным значением по умолчанию и, как результат, будут производить идентичные наборы случайных чисел. Эту проблему можно устранить, используя единый объект Random для генерации всех случайных чисел. Можно также обойти его, изменив начальное значение, возвращенное системным часами, а затем явно предоставив это новое начальное значение конструктору Random(Int32). Дополнительные сведения см. в описании конструктора Random(Int32).
Т. к. функция вызывается очень часто и быстро а Вы его каждый раз создаете (new Random) => переинициализируете и генератору нехватает "точности".
Решений 3:
1 - Вынести Random за функции или передавать его как параметр
2 - Генерировать seed вручную
3 - Thread.Sleep (чтобы таймер успел "сдвинуться")
Подробнее:
1:
class Program
{
private static Random t = new Random();
public static int slu(int e, int u)
{
int y = t.Next(e, u + 1);
return y;
}
static void Main()
{
for(int i=0; i<10; i++) {
Console.WriteLine(slu(-3,3));
}
}
}
2:
class Program
{
public static int slu(int e, int u)
{
Random t = new Random((int) DateTime.Now.Ticks & 0x0000FFFF);
int y = t.Next(e, u + 1);
return y;
}
static void Main()
{
for(int i=0; i<10; i++) {
Console.WriteLine(slu(-3,3));
}
}
}
3:
class Program
{
public static int slu(int e, int u)
{
Random t = new Random();
System.Threading.Thread.Sleep(10);
int y = t.Next(e, u + 1);
return y;
}
static void Main()
{
for(int i=0; i<10; i++) {
Console.WriteLine(slu(-3,3));
}
}
}
P.S: Не вижу смысла в функции slu.
...
Просветленный
(44357)
Какой?
Лучше не увлекаться заменой стандартных функий на свои - это приводит к спагетти-коду и к усложненному разбору.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: проблема с random() c#

Как сделать Random в C#
Есть три способа (основные в С#):

1ый) это System.Random - его описали выше.
подробнее...

C++ случайные числа
Вкратце:
все генераторы выдают некое количество (множество) значений, и эти значения попадают в
подробнее...
спросили в Randomness Stdlib h
язык программирования Си: Почему ругается на RANDOM и RANDOMIZE? Причем в разных задачах, что не так?
Вот тебе образец

Инициализация генератора случайных чисел.

Синтаксис
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в Randomness Stdlib h
random в C++
#include < cstdlib >
#include < ctime >
....подробнее...

как генерировать случайное число в java?
import java.util.Random;

public class Main {
public Main() { }
public static
подробнее...

Помогите новичку (python)
print (random.randint(a,b))

Тукок
(469)
Ты правильно первый раз
подробнее...
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*