Есть ли какой то вариант указать во входящих настройках действие с вероятностью в %?

AndreyAAA

Client
Регистрация
07.05.2016
Сообщения
1 250
Благодарностей
78
Баллы
48
Нужно именно в % а не рандом число от и до. Что бы можно было указывать 31 %, или 78% и т.д.
 

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 700
Благодарностей
1 078
Баллы
113
Я делаю так
C#:
Random rnd = new Random();
int ver = Convert.ToInt32(project.Variables["veroyatnost"].Value);
int chance = Global.Classes.rnd.Next(1, 101);
//return chance;
if (ver >= chance)
{
    return "ok";
}
else
{
    return null;
}
 
  • Спасибо
Реакции: izubr

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 516
Благодарностей
3 369
Баллы
113
Global.Classes.rnd.Next(1, 101);
Зря, он не потокобезопасен, будет UB.

Есть Global.Variables.MainRandom он в ThreadLocal, но не безопасен в async.

Но вообще, не используйте их, а создавайте свои, что бы потом не удивляться, почему постер глючит.
 
  • Спасибо
Реакции: zarufakis

AndreyAAA

Client
Регистрация
07.05.2016
Сообщения
1 250
Благодарностей
78
Баллы
48
Я не понял не первое сообщение, не второе(.Ну понял одно, что походу это очень сложно все что ли?
Что создавать свои? Что не использовать?))))
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 440
Благодарностей
503
Баллы
113
А что мешает указать во входящих процент от 0 до 100, а в шаблоне сгенерить рандом переменную от 0 до 101 и проверить эту переменную на попадание в нужный процентаж?
 
  • Спасибо
Реакции: zhenya777

AndreyAAA

Client
Регистрация
07.05.2016
Сообщения
1 250
Благодарностей
78
Баллы
48
А что мешает указать во входящих процент от 0 до 100, а в шаблоне сгенерить рандом переменную от 0 до 101 и проверить эту переменную на попадание в нужный процентаж?
Так бы прокатило, если бы % был ровный, типо 10,20,50 и т.д.
Ну а вот мне нужно 95 % или 75% как это сделать?
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 440
Благодарностей
503
Баллы
113
При чём здесь ровный процент или нет? Сделать ровно так как я написал. Во входящих указываем допустимый шанс выполнения действия в процентах. Допустим 59. В шаблоне генерим.число в диапазоне от 0 до 101. Далее сравниваем два числа. Конкретно в нашем примере если это число больше 59, то действие не выполняется, если меньше - выполняется. Вот и получается совершенно точное указанный в процентах шанс на выполнение. Возможно я не совсем правильно понял, но вроде как именно шанс таким образом и будет рассчитан.
 

AndreyAAA

Client
Регистрация
07.05.2016
Сообщения
1 250
Благодарностей
78
Баллы
48
При чём здесь ровный процент или нет? Сделать ровно так как я написал. Во входящих указываем допустимый шанс выполнения действия в процентах. Допустим 59. В шаблоне генерим.число в диапазоне от 0 до 101. Далее сравниваем два числа. Конкретно в нашем примере если это число больше 59, то действие не выполняется, если меньше - выполняется. Вот и получается совершенно точное указанный в процентах шанс на выполнение. Возможно я не совсем правильно понял, но вроде как именно шанс таким образом и будет рассчитан.
ХМ)))
Возможно ты и прав знаешь), думал, думал, походу да),ну че то не до конца уверен я, но походу да.может кто еще тоже проверить?
Я тоже изначально думал как сделать при помощи рандома,но не дошел до такого что ты предложил)
 

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 307
Благодарностей
865
Баллы
113
ХМ)))
Возможно ты и прав знаешь), думал, думал, походу да),ну че то не до конца уверен я, но походу да.может кто еще тоже проверить?
Я тоже изначально думал как сделать при помощи рандома,но не дошел до такого что ты предложил)
Ну так и делают рандом в %, нечего тут думать) Но я бы чуток изменил код выше:
C#:
int ver = int.Parse(project.Variables["veroyatnost"].Value);
Random rnd = new Random();
int chance = rnd.Next(1, 101);

if (ver >= chance)
{
    return "ok";
}
else
{
    throw new Exception("Не попали в % и вышли по красной");
}
 
  • Спасибо
Реакции: AndreyAAA

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
Зря, он не потокобезопасен, будет UB.

Есть Global.Variables.MainRandom он в ThreadLocal, но не безопасен в async.

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

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 516
Благодарностей
3 369
Баллы
113
Можете ли вы в двух словах объяснить, как вы узнали, что он не потокобезопасен?
Потому что там используется обычный рандом .net + разработчики могут это подтвердить (если очевидного недостаточно).
 
  • Спасибо
Реакции: volody00

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
Потому что там используется обычный рандом .net + разработчики могут это подтвердить.
Я очень плохо разбираюсь в этой теме, но кого ещё спросить не знаю. Возможно часть вопросов может быть вообще нелогична, но буду рад, если черканете пару строк (может что-то для меня прояснится).

1) Что такое новый поток в ZennoPoster на языке c#? Т.е. это Thread, ThreadPool, Task, Async/Await? Чтобы я мог поспрашивать ChatGpt.
2) Я спросил ChatGpt какие методы являются не потокобезопасными. Он сказал, что коллекции, такие как List<T>, Dictionary<TKey, TValue> не являются потокобезопасными, при этом я ни разу на форуме не видел, чтобы их обрамляли конструкцией lock(). Почему люди не сталкиваются с проблемами?

И может кинете пару ссылок, что стоит почитать про потокобезопасность, чтобы это касалось написания кода на C# в ZennoPoster.

Спасибо за помощь
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 516
Благодарностей
3 369
Баллы
113
1) Что такое новый поток в ZennoPoster на языке c#? Т.е. это Thread, ThreadPool, Task, Async/Await?
Как минимум Thread, раньше были таски, но это могло создавать проблемы.
Чтобы я мог поспрашивать ChatGpt.
2) Я спросил ChatGpt
Не стоит тратить время. Только введёте себя же в заблуждение...
я ни разу на форуме не видел, чтобы их обрамляли конструкцией lock()
Потому что есть их потокобезопасные варианты, об этом уже поднималось на форуме когда-то
+ у нас форум далёк от программирования и в основном такое положение дел устраивает клиентов, так как проблема клиента (и заказчика) :bn:
И может кинете пару ссылок, что стоит почитать про потокобезопасность, чтобы это касалось написания кода на C# в ZennoPoster.
MSDN, используйте поиск.
 
  • Спасибо
Реакции: volody00

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