Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2011, 22:38   #1
tolmik
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 46
Восклицание Как получить рандомное число C#?

Нужен работающий рандом на C#. Кажется что может быть проще?
Использовал метод:
Код:
Random rand = new Random();
DateTime dt = DateTime.Now;
x = (dt.Millisecond + rand.Next(0, 100)) % (20) ;
Он работает причем отлично, но т.к. этот метод в программе циклически вызывается около 200 раз, а процессоры нынче "Быстрые" то на выполнение этих операций требуется очень мало времени(счет на милисекунды), следовательно рандом представляется в виде 1 1 1 1 1 1 1 ..... 1 2 2 2 2 2 2.....2 2 2 3 3.....3 3 и так далее, пробовал использовать такты процессора
Код:
DateTime dt = DateTime.Now;
dt.Ticks
не помогло. Кто знает алгоритмы реальных часто-запрашиваемых рандомов - выкладывайте, буду признателен.
tolmik вне форума Ответить с цитированием
Старый 23.11.2011, 23:05   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

RNGCryptoServiceProvider
Rififi вне форума Ответить с цитированием
Старый 23.11.2011, 23:27   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Весьма странный алгоритм.
Вероятно следует обратиться к теории:
Д. Кнут, Искусство программирования для ЭВМ, т.2, Глава 3. Случайные числа.
Тема развернута достаточно полно, более 150 страниц, и алгоритмы разные приводятся.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 23.11.2011, 23:30   #4
tolmik
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 46
По умолчанию

а можно поподробнее. Как например получить рандомное int?
tolmik вне форума Ответить с цитированием
Старый 24.11.2011, 09:20   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

главная ошибка - не надо иницилизировать генератор МНОЖЕСТВО раз.
достаточно это сделать ОДИН раз.

посмотрите, например на код:
Код:
            Random rand = new Random(DateTime.Now.Millisecond);
            int[] xArray = new int[20];
            for (int i = 0; i < 20; i++)
            {
                xArray[i] = rand.Next(0, 100);                
            }

            for (int i = 0; i < 20; i++)
            {
                Console.Write(" {0} ", xArray[i]);
            }
            Console.WriteLine();
p.s. я ввёл массив xArray, и разнёс в разные циклы, генерацию и вывод случайных чисел, я специально, чтобы максимально уменьшить время между вызовами функции генерации следующего случайного числа!

выделеннная в моём примере строчка кода должна вызываться в программе ОДИН раз!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.11.2011, 14:51   #6
tolmik
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 46
Хорошо

[QUOTE=Serge_Bliznykov;921069]главная ошибка - не надо иницилизировать генератор МНОЖЕСТВО раз.
достаточно это сделать ОДИН раз.

посмотрите, например на код:
Код:
            Random rand = new Random(DateTime.Now.Millisecond);
            int[] xArray = new int[20];
            for (int i = 0; i < 20; i++)
            {
                xArray[i] = rand.Next(0, 100);                
            }

            for (int i = 0; i < 20; i++)
            {
                Console.Write(" {0} ", xArray[i]);
            }
            Console.WriteLine();
Спасибо! то что нужно! Очень помог!
tolmik вне форума Ответить с цитированием
Старый 07.04.2016, 19:48   #7
PinkiePie
Новичок
Джуниор
 
Регистрация: 07.04.2016
Сообщений: 1
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
главная ошибка - не надо иницилизировать генератор МНОЖЕСТВО раз.
достаточно это сделать ОДИН раз.

посмотрите, например на код:
Код:
            Random rand = new Random(DateTime.Now.Millisecond);
            int[] xArray = new int[20];
            for (int i = 0; i < 20; i++)
            {
                xArray[i] = rand.Next(0, 100);                
            }

            for (int i = 0; i < 20; i++)
            {
                Console.Write(" {0} ", xArray[i]);
            }
            Console.WriteLine();
p.s. я ввёл массив xArray, и разнёс в разные циклы, генерацию и вывод случайных чисел, я специально, чтобы максимально уменьшить время между вызовами функции генерации следующего случайного числа!

выделеннная в моём примере строчка кода должна вызываться в программе ОДИН раз!!
Выдаёт ошибку на слове Random в первой строке кода.
Random rand = new Random(DateTime.Now.Millisecond);

Ошибка:
The type or namespace name 'Random' could not be found

С чем это может быть связанно?

Нашёл причину. Нужно было писать, используя класс System.Random, так:
System.Random rnd = new System.Random();

Последний раз редактировалось PinkiePie; 07.04.2016 в 20:13. Причина: Нашёл решение проблемы.
PinkiePie вне форума Ответить с цитированием
Старый 07.04.2016, 19:50   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Код:
using System;
есть?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как в Excel, забив число, получить его текстовую расшифровку TaTiana85 Microsoft Office Excel 4 14.10.2011 20:29
как получить случайное число до 1 млн HelenSecuriter Общие вопросы C/C++ 18 06.07.2011 00:16
Как получить десятичное число в результате деления ArtGrek Visual C++ 1 20.04.2011 01:55
Как получить число из char* qip2005 Помощь студентам 2 02.03.2011 19:56
Получить максимальное совершенное число. bloodflood Помощь студентам 10 15.12.2010 13:58