Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 08.04.2013, 19:13   #1
emdroof
Пользователь
 
Аватар для emdroof
 
Регистрация: 10.04.2011
Сообщений: 46
По умолчанию собственный генератор случайных чисел

Стоит задача написания собственного генератора случайных чисел, без использования встроенного класса Random(). Кто подскажет, какие алгоритмы лучше использовать? Или же есть уже какой-то исходник!? В интернете особо нет какой-то конкретики или искать не умею. Спасибо!
emdroof вне форума Ответить с цитированием
Старый 08.04.2013, 19:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Тупо: остаток от деления количества секунд на количество дней
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.04.2013, 20:27   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
В интернете особо нет какой-то конкретики или искать не умею.
Второе.
Генератор псевдослучайных чисел (Вики).
Линейный конгруэнтный генератор (она же).
Генератор Фибоначчи (ещё раз она же).
Abstraction вне форума Ответить с цитированием
Старый 08.04.2013, 20:35   #4
emdroof
Пользователь
 
Аватар для emdroof
 
Регистрация: 10.04.2011
Сообщений: 46
По умолчанию

Попытался написать линейный конгруэнтный метод, но наверное здесь куча ошибок:

Код:
double[] values = new double[1000];
            double[] mas = new double[1000];
            double a = Convert.ToDouble(textBox7.Text);
            double x = Convert.ToDouble(textBox8.Text);
            double c = Convert.ToDouble(textBox9.Text);
            double m = Convert.ToDouble(textBox10.Text);
            int p = 2; //здесь по сути должны быть все простые числа, 
                         //но для примера ввел только одно
            for (int i = 0; i < 1000; i++)
            while (c != m)
            {
                if (c > m)
                    c = c - m;
                else m = m - c;
                if (c == 1) //простые
                    if ((a - 1) % p == 0)
                        if (m % p == 0)
                            if (m % 4 == 0)
                                if ((a - 1) % 4 == 0)
 
                                    values[i] = (a * x + c) % m;
            }
emdroof вне форума Ответить с цитированием
Старый 08.04.2013, 21:14   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
while (c != m)
Рискуете получить бесконечный цикл: вещественные числа нельзя сравнивать на равенство. И вообще, этот генератор - для целых чисел, если не заметили (он порождает псевдослучайные целые числа от 0 до m-1).

Кроме того, разнесите: проверки a, c, m - отдельно (и вообще их хорошо бы загнать в отдельную функцию), вычисление значений - отдельно. Обратите внимание, что вычисление третьего значения базируется на (уже вычисленном к этому моменту) втором значении. Грубо говоря, там, где Вы пишете x, надо писать values[i-1].
Abstraction вне форума Ответить с цитированием
Старый 08.04.2013, 21:53   #6
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

лучше всего, купить процессор Intel Sandy Bridge или старше и пользоваться железячным генератором:

Код:
Random PROC
    randwait:
        RDRAND rax
    JNC randwait
    RET
Random ENDP
) сори, про .NET и С# я пропустил

Последний раз редактировалось f.hump; 08.04.2013 в 22:02.
f.hump вне форума Ответить с цитированием
Старый 08.04.2013, 22:55   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

...вот мои генераторы случайных чисел

1-


2- http://www.youtube.com/watch?v=JQNYe2JE0zM

Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
генератор случайных чисел Nicolas_46 Microsoft Office Excel 9 03.12.2012 13:35
Генератор случайных чисел remont_it, C++ Builder 1 12.05.2012 20:11
Генератор случайных чисел Evgenii(Евгений) Помощь студентам 6 23.01.2011 22:41
Генератор случайных чисел Костян Пират Общие вопросы Delphi 8 23.01.2011 22:08
генератор случайных чисел на С++ ANTI Общие вопросы C/C++ 20 12.04.2009 12:02


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840