Указать вероятность выполнения в процентах

Igorst

Client
Регистрация
07.08.2011
Сообщения
188
Благодарностей
16
Баллы
18
Как правильно указать вероятность выполнения действия в процентах?

Сначала была идея генерить случайные числа

к примеру

от 1 до 1 значить - 100%
от 1 до 2 значить - 50%
от 1 до 3 значить - 33%
от 1 до 4 значит - 25%

Но этот вариант не совсем подходит, может есть более продвинутые методы?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 466
Благодарностей
8 688
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
742
Баллы
113
C#:
Random rnd = Global.Classes.rnd;
lock(rnd)
{
    Random r = new Random();
if(r.Next(1,100) < 50) return "Да";
else return "Нет";
}
Для себя проверял, рандом, кубик рандома от одного до 11, создавал файл с номером цифры и записывал туда эту цифру, сделал 100 тысяч выполнений и после смотрел сколько там строк, было примерно от 9300 до 10800 строк, примерно так. И этот сниппет так же смотрел, если 50 на 50 то примерно одинаково, если не придираться к мелочам.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
C#:
Random rnd = Global.Classes.rnd;
lock(rnd)
{
    Random r = new Random();
if(r.Next(1,100) < 50) return "Да";
else return "Нет";
}
Для себя проверял, рандом, кубик рандома от одного до 11, создавал файл с номером цифры и записывал туда эту цифру, сделал 100 тысяч выполнений и после смотрел сколько там строк, было примерно от 9300 до 10800 строк, примерно так. И этот сниппет так же смотрел, если 50 на 50 то примерно одинаково, если не придираться к мелочам.
это чё за трансформер из двух рандомов?)
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
742
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
Да там процент можно указать, например 20 или 35)
Ну а сниппеты писать, у меня пока нет знаний
ты изначально прописываешь зенновский рандом, а потом зачем-то на основе его лока создаёшь другой рандом)
C#:
Random rnd = Global.Classes.rnd;
lock(rnd)
{
    if(rnd.Next(100) < 50) return "Да";
    else return "Нет";
}
 
  • Спасибо
Реакции: Roman48

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
742
Баллы
113
ты изначально прописываешь зенновский рандом, а потом зачем-то на основе его лока создаёшь другой рандом)
C#:
Random rnd = Global.Classes.rnd;
lock(rnd)
{
    if(rnd.Next(100) < 50) return "Да";
    else return "Нет";
}
Как правильно? Значит я в той теме, где этот сниппет выложен, неправильно все понял.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
742
Баллы
113
Понял)
C#:
Random rnd = Global.Classes.rnd;
lock(rnd)
{
//    Random r = new Random();
if(rnd.Next(1,100) < 50) return "Да";
else return "Нет";
}
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
Понял)
C#:
Random rnd = Global.Classes.rnd;
lock(rnd)
{
//    Random r = new Random();
if(rnd.Next(1,100) < 50) return "Да";
else return "Нет";
}
rnd.Next(1,100)
даёт диапазон в 99 значений, а не 100
делай rnd.Next(0 ,100) или просто rnd.Next(100)
 
  • Спасибо
Реакции: orka13 и Roman48

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)