случайное событие

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

случайное событие

Сообщение Sirik » 06.05.2006 (Сб) 9:58

допустим есть событие, которое происходит с вероятностью 99,6%
как создать функцию, которая возвращала данную вероятность?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.05.2006 (Сб) 10:19

Код: Выделить всё
Function PrbValue() As Single
  PrbValue = 0.996
End Function
Lasciate ogni speranza, voi ch'entrate.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 06.05.2006 (Сб) 10:29

м-да...

я передаю вероятность, а функция возвращает (тип boolean) произошло событие или нет

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

Сообщение Amed » 06.05.2006 (Сб) 10:48

:shock:
Код: Выделить всё
Function PrbValue(Probability As Single) As Boolean
Randomize
PrbValue = (Rnd > Probability)
End Function


Sirik, ну от тебя-то никак не ожидал такого вопроса.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 06.05.2006 (Сб) 10:50

просто мне кажеться что функция rnd не совсем возвращает случайные числа. по-моему это называется нормально-распределённая случайность.

мне бы какой-то алгоритм что-ли...

зы. наверное в твоем примере надо знак поменять, а то при вероятности 0.99 - ниодного попадания

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

Сообщение Amed » 06.05.2006 (Сб) 10:57

Алгоритм получения случайных чисел? Тёмыч недавно исследовал этот вопрос, если не изменяет память. Поищи в форуме или в блоге.

Знак надо поменять, да. Заметил мину ;)
Последний раз редактировалось Amed 06.05.2006 (Сб) 11:01, всего редактировалось 1 раз.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.05.2006 (Сб) 10:58

Сначала поясни, чем тебя не устраивает нормальное распределение.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 06.05.2006 (Сб) 11:01

пишу симулятор для одной online игры
там все бои используют случайность

и если у меня будет не достаточная случайность, то вряд ли что-то выгорит.

зы. хотя...может движек игры в самом деле её и использует... буду пробовать так как посоветовали

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.05.2006 (Сб) 11:06

Гы.
Даже нет, LOL.
Lasciate ogni speranza, voi ch'entrate.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 06.05.2006 (Сб) 11:09

почему?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.05.2006 (Сб) 11:11

Потому что если ты таким образом решил "угадывать" выбор онлайновой системы, то это надо увековечить на bash.org.
Lasciate ogni speranza, voi ch'entrate.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 06.05.2006 (Сб) 11:20

всё равно чего-то я не понимаю...

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

Сообщение uhm » 06.05.2006 (Сб) 12:43

Sirik, для начала, ты знаешь, что такое случайная величина? Для продолжения - знаешь ли ты, что такое распределение случайной величины, и чем нормальное распределение отличается от равномерного?

В принципе, твой вопрос должен отпасть уже на первом этапе изучения ответа на мой первый вопрос. :)
Быть... или не быть. Вот. В чём вопрос?

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 06.05.2006 (Сб) 12:45

не надо меня пугать вопросам из инст. программы.

я просто хочу получить вразумительный ответ: rnd функция достаточна случайная или нет?

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

Сообщение Amed » 06.05.2006 (Сб) 12:49

Достаточно случайная. Попробуй посмотреть, какой процент угадываний при вероятности 0.5 для 10000 попыток.

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

Сообщение uhm » 06.05.2006 (Сб) 12:50

rnd дает равномерно распределенную на отрезке [0; 1] случайную величину. На пальцах, это значит, что вероятность попадания в область, близкую к середине отрезка, равна вероятности попасть в область такой же длины на его краях. Другие распределения этим свойством не обладают, в частности, у нормального распределения, вероятность попасть в "центр" больше вероятности попасть в "края"...

А так - да, достаточно случайная :roll:

ЗЫ Для того, чтобы этот ответ был "вразумительным", необходимо хотя бы в общих чертах представлять ответы навопросы из "инст. программы".
Быть... или не быть. Вот. В чём вопрос?

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 07.05.2006 (Вс) 0:34

uhm писал(а):rnd дает равномерно распределенную на отрезке [0; 1] случайную величину.

Все-таки на отрезке [0, 1) -- значение всегда меньше 1, но больше или равно 0.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Сообщение --=GAMER=-- » 07.05.2006 (Вс) 8:34

VVitafresh
А вот и нет - в еденицу тож попадает особено если тип Integer
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 07.05.2006 (Вс) 8:42

--=GAMER=-- писал(а):VVitafresh
А вот и нет - в еденицу тож попадает особено если тип Integer


Ошибочка вышла!

Точная цитата из MSDN:

The Rnd function returns a value less than 1, but greater than or equal to zero.


что означает, как нетрудно догадаться, что функция Rnd возвращает значение меньше чем 1, но большее или равное нулю.
Весь мир матрица, а мы в нем потоки байтов!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.05.2006 (Вс) 8:42

--=GAMER=--
Сам понял, какую глупость сказал?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Tamplier
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 183
Зарегистрирован: 18.11.2005 (Пт) 13:35
Откуда: Москва

Сообщение Tamplier » 07.05.2006 (Вс) 10:39

Извините, что вмешиваюсь в разговор, о великие Гуру.
Рассмотрите следующий код, пожалуйста. Может это вам поможет понять достаточно ли случайнен rnd

Код: Выделить всё
Sub RndArr(arr() As Long, LengthArray As Long) ' Заполнение массива случайными неповторяющимися числами

    Dim i As Long, j As Long
   
    Randomize
1: arr(0) = Int(Rnd * 10 ^ (Int(Rnd * 8)) * (-1) ^ (Int(Rnd * 10)))
    For i = 1 To LengthArray - 1
2:     arr(i) = Int(Rnd * 10 ^ (Int(Rnd * 8)) * (-1) ^ (Int(Rnd * 10)))
        For j = 0 To i - 1
            If arr(j) = arr(i) Then
                i = i - 1
                Exit For
            End If
        Next
    Next
   
End Sub


Прошу не обращать внимание на глупость написания кода. Это писалось давно. Строки 1 и 2 перегружены rnd в целях создания максимального разброса. Для создания массива по данному алгоритму из 10тыс элементов на средней машине уходит порядка минуты. При этом повторение на одном значении счетчика после 5тыс элементов идет в районе 300тыс-1мил

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.05.2006 (Вс) 10:44

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение tyomitch » 07.05.2006 (Вс) 10:48

Tamplier писал(а):Извините, что вмешиваюсь в разговор, о великие Гуру.
Рассмотрите следующий код, пожалуйста. Может это вам поможет понять достаточно ли случайнен rnd

С чего ты взял, что в последовательности "достаточно случайных" чисел не может быть повторов?
Изображение

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 07.05.2006 (Вс) 13:13

просто мне кажеться что функция rnd не совсем возвращает случайные числа

Посмеялся после завтрака, пасиба +_+

Так может, кто даст вразумительный ответ - чем вас не устраивает Rnd?

Tamplier
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 183
Зарегистрирован: 18.11.2005 (Пт) 13:35
Откуда: Москва

Сообщение Tamplier » 07.05.2006 (Вс) 14:49

С чего ты взял, что в последовательности "достаточно случайных" чисел не может быть повторов?


Читай внимательнее текст после кода. Я этого нигде не говорил.

GSerg, я этого не читал. Сие чудо я писал сам с нуля.

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

Сообщение tyomitch » 07.05.2006 (Вс) 15:19

Tamplier писал(а):
С чего ты взял, что в последовательности "достаточно случайных" чисел не может быть повторов?


Читай внимательнее текст после кода. Я этого нигде не говорил.

Код считает в последовательности число повторов.

Как оно связано с "достаточной случайностью"?

Имхо никак. Ни в одну, ни в другую сторону.
Изображение

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Сообщение --=GAMER=-- » 08.05.2006 (Пн) 6:29

GSerg
!Viper!
Ну низнаю, получалось же раньше как-то :oops:
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

Tamplier
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 183
Зарегистрирован: 18.11.2005 (Пт) 13:35
Откуда: Москва

Сообщение Tamplier » 08.05.2006 (Пн) 9:19

Как оно связано с "достаточной случайностью"?

Имхо никак. Ни в одну, ни в другую сторону.

Для создания массива по данному алгоритму из 10тыс элементов на средней машине уходит порядка минуты. При этом повторение на одном значении счетчика после 5тыс элементов идет в районе 300тыс-1мил


Я тут, правда, с порядком обшибся, это результаты 100тыс. Повторение 3тыс-20тыс.

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

Сообщение tyomitch » 08.05.2006 (Пн) 9:41

Tamplier, теперь расскажи, какое отношение выделенные тобой цитаты имеют к "достаточной случайности" Rnd.
Изображение

Tamplier
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 183
Зарегистрирован: 18.11.2005 (Пт) 13:35
Откуда: Москва

Сообщение Tamplier » 09.05.2006 (Вт) 20:43

Что требуется? "Случайность rnd". Что говорится? Насколько часто повторяются числа при использовании данного алгоритма. А "Случайность rnd" и "Повторяемость rnd" - это взаимные антонимы, следовательно при предельном случае мы можем их использовать как синонимы. Ситуация, имхо, предельная, поэтому я решил, что данный код поможет в выяснении данного вопроса. Все.

След.

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

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

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

    TopList  
cron