0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 33
|
||||||||||||||||
1 | ||||||||||||||||
Когда твой Random совсем не Random20.04.2016, 11:06. Показов 3699. Ответов 21
Метки нет (Все метки)
Мой код ведет себя весьма странно. У меня есть список экземпляров класса в котором (Уж простите что я такое наделал) есть экземпляр другого класса с 4-мя переменными которые рандомятся вместе с созданием экземпляра базового класса.
Прилагаю код. Занесение экземпляров в коллекцию.
0
|
20.04.2016, 11:06 | |
Ответы с готовыми решениями:
21
Random, повторы при static Random(1 seed) Что не так с 'Random' или There is no overloaded version of 'Random' that can be called with these arguments У меня непонятки с методами Math.random() и Random() Random и объекты класса (pseudo random) |
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
||||||
20.04.2016, 11:20 | 4 | |||||
Сообщение было отмечено vavan194 как решение
Решение
0
|
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|
20.04.2016, 11:22 | 5 |
Попробуй поставить между операциями Thread.Sleep(1);
Random действительно не совсем рандом. Это псевдорандом. Он использует время работы системы для расчёта значений. У тебя все операции успевают сработать за один тик времени. А дебаггером ты создаёшь задержку(время успевает протикать).
0
|
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 33
|
|
20.04.2016, 11:25 [ТС] | 6 |
nimazzzy, Очень просто
0-й элемент был отлажен.
0
|
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 33
|
||||||
20.04.2016, 11:34 [ТС] | 7 | |||||
LeniumSoft, Hkolorotur, а я смотрю на этот код и думаю - "Что же его заставило сделать рандом отдельным полем класса да еще и статическим???"
LeniumSoft, попытка почти удалась. Он делал одинаковыми только по 11 элементов а, дальше у него появлялись новые 11 элементов)
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
20.04.2016, 11:40 | 8 |
Только для инициализации SEED в конструкторе по умолчанию. Последующие вызовы методов Next() это значение меняют и разрешающая способность таймера здесь не причём. Единственное, на что влияет разрешение часов, так это на создаваемые последовательно объекты Random - если между созданием меньше 15 миллисекунд, то такие рандомайзеры будут выдавать одинаковые последовательности.
1
|
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|
20.04.2016, 11:45 | 9 |
Да. В курсе. Я не заметил цикл сверху у TC. Думал что методы Next выдают одно значение. Буду внимательнее смотреть отныне
0
|
Master of Orion
|
|
20.04.2016, 12:29 | 10 |
LeniumSoft, как только человек говорит, что у него "неслучайный рандом", не заходя в тему я знаю, что увижу слово new в цикле. Рандом может быть спрятан, еще что-то, то new будет 100%
2
|
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 33
|
|
20.04.2016, 13:08 [ТС] | 11 |
Psilon, похоже что я не первый)
0
|
20.04.2016, 14:07 | 12 |
Да, вы не оригинальны. Если сделать поиск по слову Random в форуме, то там ваша проблема вcтречается чуть реже чем везде
Кстати недавно обнаружил у рандома забавный глюк. Если к нему обращаться из нескольких потоков, то рано или поздно возникает ситуация, когда он начинает стабильно генерировать нули
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
20.04.2016, 14:18 | 13 |
Storm23, это не глюк, об этом прямо сказано в документации. Правда совсем не очевидно, что так должно быть при многопоточном обращении к Random.
0
|
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|
20.04.2016, 14:25 | 14 |
Там вроде можно статическое поле с Random пометить атрибутом ThreadStatic
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
20.04.2016, 14:29 | 15 |
Ну да. Можно и lock делать. Просто, если к одному объекту Random обращаться из разных потоков, то его так можно и сломать . И об этом прямо сказано. Может это и правда баг, который не стали фиксить, а просто задокументировали
0
|
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|
20.04.2016, 14:34 | 16 |
Не по теме: Не не. ThreadStatic делает поле индивидуальным для потока. Надо будет только проинициализировать разными значениями сам Random. Не будет межпоточного доступа к экземпляру Random. И ошибки соответственно...
0
|
20.04.2016, 14:34 | 17 |
Если у меня высокопроизводительное приложение, то делать lock ради рандома - непозволительная роскошь.
А вот с ThreadStatic - интерснее. Он просаживает скорость работы?
0
|
Master of Orion
|
|||||||||||
20.04.2016, 14:47 | 18 | ||||||||||
Usaga, lock будет блокировать доступ, ThreadStatic просто создаст свой экземпляр для каждого потока. С точки зрения производительности разница разительная.
Обычный Random это примитивный класс с минимумом логики (и следовательно оверхеда). Для сколько-нибудь серьезных приложений используются криптографические рандомайзеры. Тем более, что зачастую нужно не равномерное, а нормальное или еще какое распределение. Их можно и самому сделать, если слегка с теорией ознакомиться, но из коробки и быстрее, и лучше, и надежнее. Короче, рандом - это класс для лабораторок в универе и прототипов на коленке В серьезных приложениях он почти не используется. Добавлено через 1 минуту Storm23, да я выше написал. Довольно полезный атрибут. Например одна из возможных имплементаций с SO:
Правда я бы реализовывал по-другому (с double-check locking легко напутать, например в приведенном выше коде есть баг), например так:
2
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
20.04.2016, 15:07 | 19 |
Я понимаю разницу между локом и ThreadStatic. Просто имел в виду, что без синхронизации доступа к этому Random обращаться нельзя.
0
|
20.04.2016, 15:19 | 20 |
Только вы [ThreadStatic] где-то посеяли.
Но меня интересует механизм работы. Похоже оно хранит эту статическую переменную где-то в локальной памяти потока? Есть ли разница во времени доступа к полю с атрибутом ThreadStatic и без этого атрибута?
0
|
20.04.2016, 15:19 | |
20.04.2016, 15:19 | |
Помогаю со студенческими работами здесь
20
Переделать Math.random() в random() Random корректно работает только когда ему дают "одуматься" Как узнать когда приходили на твой сайт поисковики Регистация собственного проекта в сети Что делать после того, когда твой проект готов??? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |