Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Randomizer, генератор случайных чисел 
:(
    Опции темы
Entwickler
Дата 23.5.2007, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 14.4.2007

Репутация: нет
Всего: 2



такая проблемка
Код

public class Randomizer
{
  static final int m = 2332980;
  static final int a = 9301;
  static final int c = 49297;
  
  //Die von jeder Randomizer Instanz verwaltete Variable
  int seed = 1;
  
  /***
   *Der Konstruktor der Klasse Randomizer. Er benötigt einen belibiegen
   *Anfangswert("seed") für die Pseudo-Zufallszahlen
   ***/
   public Randomizer(int seed)
   {
     this.seed = seed;
   }
   
   /**
    *Diese Methode berechnet mit einem sehr einfachen Algorithms eine Pseudo-
    *Zufallszahl zwischen 0 und 1. Math.random() und java.util.Random erzeugen
    *sehr viel besser verteilte Zufallszahlen
    **/
    public float randomFloat()
    {
      seed = (seed * a + c) % m;
      return (float)Math.abs((float)seed/(float)m);
    }
    
    /***
     *Diese Methode berechent eine ganze Pseudozufallszahl zwischen 0 und dem
     *angegebenen Maximum.Sie verwendet die oben definierte Methode randomFloat()
     ***/
     public int randomInt(int max)
     {
       return Math.round(max * randomFloat());
     }

     /***
      *Diese verschachtelet Klasse stellt ein einfaches Testprogramm dar:
      *Sie gibt einfach zehn zufällige ganze Zahlen aus. Beachten Sie,
      *wie der Startwert für das Randomizer-Object mit der aktuellen Uhrzeit
      *initialisiert wird
      **/

        public static void main(String[] args)
        {
          Randomizer r = new Randomizer((int)new java.util.Date().getTime());
          for(int i = 0; i < 10; ++i)System.out.println(r.randomInt(100));
        }
}

сверху я продекларировал переменные m,a и c . с мини всё работает прекрасно, но вот если я их немного измею, то он начинает выдавать несколько одинаковых чисел подряд... я хочу чтобы он выдавал только разные числа, можно как то это проверять уже имеющимися средствами или надо придумать алгоритм самому?
PM MAIL   Вверх
batigoal
Дата 23.5.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



<протупил...>

Почему ты не хочешь воспользоваться стандартным классом?

Код

import java.util.Random;

public class Rand
{
    public static void main(String[] args)
    {
        Random rand = new Random();

        for(int i=0; i<10; i++)
        {
            System.out.println(rand.nextInt());
        }
    }
}


Это сообщение отредактировал(а) batigoal - 24.5.2007, 09:41


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
nornad
Дата 23.5.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Entwickler, генераторы псевдослучайных последовательностей должны инициализироваться определёнными числами. Потому что на большинстве инциализирующих групп они через некоторое время (иногда сразу, иногда через некоторое - даже большое - число шагов) зацикливаются и прекращают генерировать. Если хочешь изменить инициализаторы, то придётся подбирать вручную. Хотя, имхо, должны быть некие математические методы проверки.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
danco31
Дата 23.5.2007, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.5.2007

Репутация: 1
Всего: 1



  Сразу прошу прощения, но! Есть такая книжица у Дональда Кнута (D. Knuth), которая на восьмиста страницах примерно объясняет, что есть случайная и что - псевдослучайная последовательность, и как сделать хороший генератор. Разбирает ВСЕ - дотошно до тошноты (нечаянный такой каламбурчик). smile 
  Что касаемо примера, то - нормальный в целом генератор, только делитель возьми - простое число - это позволит повысить шансы получения цикла повторения последовательности размером с этот делитель. А еще лучше - три взаимно простых числа.
PM MAIL   Вверх
Alexandr87
Дата 24.5.2007, 06:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 9
Всего: 39



Ну коль уж пошел такой разговор smile. Это линейный конгруэнтный генератор. Почитать можно в википедии.
wiki
Там довольно неплохо объясняется принцип выбора коэффициентов.


Цитата(danco31 @  24.5.2007,  01:54 Найти цитируемый пост)
которая на восьмиста страницах примерно объясняет, что есть случайная и что - псевдослучайная последовательность, и как сделать хороший генератор.

Гыг, для того чтобы описать, что есть случайная, а что псевдо случайная последовательность - достаточно два абзаца. Надо будет почитать Кнута.


Цитата(danco31 @  24.5.2007,  01:54 Найти цитируемый пост)
Что касаемо примера, то - нормальный в целом генератор, 

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

Это сообщение отредактировал(а) Alexandr87 - 24.5.2007, 11:03
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0946 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.