Randomize - своими руками, я не спрашиваю я делюсь=))

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Randomize - своими руками, я не спрашиваю я делюсь=))

Сообщение Джеффи » 10.05.2005 (Вт) 15:06

Недавно я задался вопросом как сделать Функцию Ramdomize перерыл весь инет, ничего не нашёл, и все мои поиски закончились на том что нашёл странную функцию: n(i) = 7 / 11 * pi + n(i - 1) просто без контекста без всего...
Я пихнул её в цыкл, и САМ НЕ ЗНАЮ КАК ПОЛУЧИЛОСЬ ЧТО ОНА ВЫДАЁТ то 0 то число ~ 10042,54267547 +++...
Я подумал а почему это не преобразовать в True и False...
И к моему удивлению получилось что при испытании получается примерно равное количество True и False, однако был один нуанс, если Timer не изменялся т.е. функция выполнялась несколько раз подряд то ответы функции совпадали, однако я добавил отслеживаение повтора параметра правда возможно не совсем идеально, но теперь всё работает нормально...

И пришёл я к выводу что Rnd - баг в сложном алгоритме :wink: :lol: И сама функция может быть написана чисто случайно ведь это и есть Rnd 8) :lol:


В модуль:
Код: Выделить всё
Dim LastRndNum(60) As Double

Public Function RngTF(RndNum As Double) As Boolean
For i = 0 To 59 Step 1
If LastRndNum(i) = RndNum Then RndNum = RndNum + 0.001 * (Timer - 2): LastRndNum(i + 1) = RndNum
Next i
Dim n() As Double
Const pi As Double = 3.14678697088135
ReDim n(RndNum)
For i = 1 To RndNum Step 1
    n(i) = 7 / 11 * pi + n(i - 1)
Next i
If n(RndNum) = 0 Then RngTF = False Else RngTF = True
LastRndNum(0) = RndNum
End Function

А использовать так:
Код: Выделить всё
a = RngTF(Timer)
Последний раз редактировалось Джеффи 10.05.2005 (Вт) 15:18, всего редактировалось 1 раз.

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 10.05.2005 (Вт) 15:09

Ах да совсем зыбыл :lol: Функция выдаёт только True и False 8) (Да и нет) кароче как хотите... :wink:

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 10.05.2005 (Вт) 15:20

А что с помощью нее можно делать?? Это не является альтернативой Rnd() :D
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 10.05.2005 (Вт) 15:23

_Мика_ писал(а):А что с помощью нее можно делать?? Это не является альтернативой Rnd() :D


Вообщето если поэксперементировать с умножением Timer на что-нибудь (увеличивая и уменьшая дробную часть)... Можно задать процентную случайность! А точнее дать больше шансов True или False

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 10.05.2005 (Вт) 15:29

Ну вот например
Код: Выделить всё
RndTF(int(Timer)) ' Будет давать True ПОЧТИ ВСЕГДА, и скорее даже не повезёт получить False

а вот:
Код: Выделить всё
RndTF(int(Timer) - 0.1) ' Будет давать False ПОЧТИ ВСЕГДА, и скорее даже не повезёт получить True

8) 8) 8)

А вот:
Код: Выделить всё
RndTF(int(Timer) - 0.5) ' Будет выдвать и то и то ровно по ровну :D

Будет давать РОВНО ПО РОВНУ! 1000 на 1000, 100 на 100 и т.д. 8)

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 10.05.2005 (Вт) 15:54

Если у кого есть идеи как улучшить функцию предлагайте!

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 10.05.2005 (Вт) 16:24

Собери её из API...
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 10.05.2005 (Вт) 16:37

BV писал(а):Собери её из API...


:shock: :shock: :shock: Это как? :shock: :shock: :shock:

Лёха_Virus
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 24.03.2003 (Пн) 17:13
Откуда: Анграск

Сообщение Лёха_Virus » 10.05.2005 (Вт) 16:46

для справки. rnd - процессорная функция, а не софтовая. этот генератор ПСЕВДослучайных чисел, т.е. эти числа рано или поздно начнут повторяться вновь. два рнд запущенные на разных тачках с одинаковым процем будут давать одинаковые числа. вне зависимости от времени запуска (если не делать рандомайз канешна :))

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.05.2005 (Вт) 17:06

Лёха_Virus писал(а):для справки. rnd - процессорная функция, а не софтовая.

:shock: :shock: :shock: :shock:
Давай, покажи мне процессор, в котором есть встроенная RND...
Изображение

Лёха_Virus
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 24.03.2003 (Пн) 17:13
Откуда: Анграск

Сообщение Лёха_Virus » 10.05.2005 (Вт) 17:12

я думал что так... звиняйте если нагнал...
но кажись в любой ОСи на одном проце будут выдаваться одинаковые числа
разве в процах нет генератора псевдослучайных чисел? тада где он?

зыы. ответьте мне пожалста на мой вопрос про флексгрид :cry:

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 10.05.2005 (Вт) 18:15

А и правда.. я вот лично не могу понять как можно сгенерировать СЛУЧАЙНОЕ число... И человек-то всегда обдумывает прежде чем сказать.. а уж комп-то тем более... имхо...
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 10.05.2005 (Вт) 18:19

Не, люди... ту что-то не так...

Пишем прогу:

Код: Выделить всё
Private Sub Command1_Click()
MsgBox CInt(Rnd * 99)
End Sub


И она ВСЕГДА выдает одно и тоже...

Сначала 70, потом 53, 57...

Поясните плиз..
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 10.05.2005 (Вт) 19:08

kirrun писал(а):Не, люди... ту что-то не так...

Пишем прогу:

Код: Выделить всё
Private Sub Command1_Click()
MsgBox CInt(Rnd * 99)
End Sub


И она ВСЕГДА выдает одно и тоже...

Сначала 70, потом 53, 57...

Поясните плиз..


Саму функцию нада отрандомить randomize
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 10.05.2005 (Вт) 19:14

Лёха_Virus писал(а):этот генератор ПСЕВДослучайных чисел, т.е. эти числа рано или поздно начнут повторяться вновь.


а как насчёт числа ПИ? :lol:

генератор ПСЕВДослучайных чисел потому есть ПСЕВДО, что есть ЛОГИЧЕСКИЙ алгоритм получения чисел. Пусть и предугадать их нельзя.

Например, Криптовый рандом завязан полеей чем на 100 показаний различных счётчиков.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.05.2005 (Вт) 19:27

Лёха_Virus писал(а):тада где он?

В языке. В VB один, в разных сях другие.
Алгоритмов получения "случайных" чисел дофигища; каждый имеет свою область применимости.
Все, наверное, знают байку про ракету, которая сбилась с курса из-за того, что в Фортране, которым компилировали её программу, был кривой генератор случайных чисел. В отрезок он попадал равномерно, а в квадрат уже нет.
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 10.05.2005 (Вт) 20:15

tyomitch писал(а):В языке. В VB один, в разных сях другие.
Алгоритмов получения "случайных" чисел дофигища; каждый имеет свою область применимости.
Все, наверное, знают байку про ракету, которая сбилась с курса из-за того, что в Фортране, которым компилировали её программу, был кривой генератор случайных чисел. В отрезок он попадал равномерно, а в квадрат уже нет.


Я не знаю :D
Так что с ракетой? Сбилась-таки с курса? :D

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 10.05.2005 (Вт) 21:21

1) for... step 1
никогда так не писал... :)

2) А чем собсно не устраивает встроенная?

3) И нет ни одного рабочего алгоритма получения псевдослучайного
числа от 0 до единицы?


ЗЫ. Мне эта тема тоже интересна.
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 10.05.2005 (Вт) 22:07

А по подробнее про randomize? Че-т я не въехал как он работает... :oops:
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 10.05.2005 (Вт) 22:14

kirrun писал(а):А по подробнее про randomize? Че-т я не въехал как он работает... :oops:


Раскручивает счётчик
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 10.05.2005 (Вт) 22:30

2 kirrun

Инициализирует генератор. Иначе всё одинаково будет.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 10.05.2005 (Вт) 22:44

Не. а синтаксис?
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.05.2005 (Вт) 23:22

Amed писал(а):
tyomitch писал(а):В языке. В VB один, в разных сях другие.
Алгоритмов получения "случайных" чисел дофигища; каждый имеет свою область применимости.
Все, наверное, знают байку про ракету, которая сбилась с курса из-за того, что в Фортране, которым компилировали её программу, был кривой генератор случайных чисел. В отрезок он попадал равномерно, а в квадрат уже нет.


Я не знаю :D
Так что с ракетой? Сбилась-таки с курса? :D

Таки-да, сбилась :-)

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

Мораль байки в том, что алгоритмы для получения случайного числа и случайной пары чисел д.б. разными. Поэтому никто и не зашивает генерацию случайных чисел в процессор, равно как и вообще какой бы то ни было прикладной алгоритм - они всегда должны подбираться под конкретную задачу.
А то некоторым дай волю, они и сортировку пузырьком в процессор загонят :-D


2kirrun: синтаксис в MSDN детально описан.
Изображение

Rostik Ultra (2)
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 159
Зарегистрирован: 10.05.2005 (Вт) 2:41
Откуда: Антарктическая республика

Сообщение Rostik Ultra (2) » 11.05.2005 (Ср) 2:17

У меня идея :

Использовать несколько Randomize в разных процедурах
Эти процедуры вызываются по определённому СОЧЕТАНИЮ действий юзера

+ Использовать положение мышки и системное время в случайный момент времени...

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 11.05.2005 (Ср) 6:36

Rostik Ultra (2) писал(а):У меня идея :

Использовать несколько Randomize в разных процедурах
Эти процедуры вызываются по определённому СОЧЕТАНИЮ действий юзера

+ Использовать положение мышки и системное время в случайный момент времени...


:shock:

Вообще-то мы тут обсуждаем как написать аналог Rnd не используя его... ПРИЧЁМ ТУТ Randomize???? :shock: :roll:

Костя111
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 04.03.2005 (Пт) 14:59

Сообщение Костя111 » 11.05.2005 (Ср) 9:39

Я быть может не в тему скажу но...
Как то на заре програмирования ( в моей жизни) мы с одним корешом задумывались как создать генератора случайный чисел. Проблема заключалась в том что у нас получался слишком узкий диапазон и чтоб его раздуть необходимо было писать какой нить аддонс. И естественно он тож должен был быть рандомным. Короче после двух недель раздумья мы пришли к выводу что невозможно создать идеальный ген.случ.чис используя только какието математические команды. Выход из этой ситуации заключается в следующем. Для того чтоб создать действительно генератор случайных чисел необходимо использовать какой то внешний фактор, равно тому как например постоянно меняется скорость ветра (ИМХО). Например можно использовать изменение скорости кулера на проце. Кнешно пускай она тож будет повторяться(хотя это в случае идеального состояния окружающей среды и напряжения питания) но это гдето уже ближе к истине.
Кто то тут говорил что сам человек прежде чем сказать какое число думает перед етим. Я так думаю что если попросить кого нить с некоторой перидичностью говорить по десять чисел то мы врядли обнаружим какюто связь или зависимость. Выедь в данном случае человек не задумывается над последствиями сказанного и не будет как то пытаться предсказать результат.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 11.05.2005 (Ср) 11:17


uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 11.05.2005 (Ср) 11:35

Кстати, tyomitch:

Наступает новое время - всё меняется; и вот уже появляются процессоры со встроенными ГСЧ (в смысле, Генератором Случайных Чисел).
Примером является камень от VIA Technologies(www.via.com.tw) с ядром 'Nehemiah'(the First x86 Processor to Market with Embedded Security Features).

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 11.05.2005 (Ср) 14:36

Все-равно все это не то... Вот как действует генератор ДЕЙСТВИТЕЛЬНО СЛУЧАЙНЫХ чисел? (хм.. да вообще есть такой?) Как, например, в ВБ генерируюцца числа?
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

Лёха_Virus
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 24.03.2003 (Пн) 17:13
Откуда: Анграск

Сообщение Лёха_Virus » 11.05.2005 (Ср) 15:29

кстати насклько я знаю в некоторых программах криптозащиты используются генераторы псевдослучайных чисел... и числа рано или поздно повторяются, просто цикл повторения уж очень большой, чтобы об этом беспокоиться... и невозможно узнать след число, пока не знаешь текущее положение.

В языке.

мда, чё-т я об этом не подумал :)

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 178

    TopList