BG Development


  Reply to this topicStart new topicStart Poll

> PHP - проценти и работа с тях
YipMan
Публикувано на: 09-10-2018, 15:53
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 1
Регистриран на: 09.10.18



Здравейте,
имам нужда от малко помощ с логиката при разпределение на проценти и вероятността да се случи нещо.

Имам списък с продукти:
- мляко 50%
- кафе 30%
- вода 20%

Трябва при отварянето на даден екшън да се избере една от тези три опции (условно казано) и шанса за падането на тази опция да зависи от процента, който е зададен.
Процента да се падне мляко е 50% от всички заявки. Но въпреки това трябва да е сравнително рандъм icon_smile.gif

Благодаря предварително за насоките и съдействието.
PMEmail Poster
Top
JanBirdX
Публикувано на: 09-10-2018, 16:48
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1542
Регистриран на: 21.02.05



rand-> 0-1
0.0-0.5 мляко
0.5-0.8 кафе
0.8-1.0 вода
PMEmail Poster
Top
stewie
Публикувано на: 10-10-2018, 00:30
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4276
Регистриран на: 14.07.16



QUOTE (JanBirdX @ 09-10-2018, 17:48)
rand-> 0-1
0.0-0.5 мляко
0.5-0.8 кафе
0.8-1.0 вода

Тактовете на цпуто и вероятности са крайно несъвместими.
PM
Top
JanBirdX
Публикувано на: 10-10-2018, 07:16
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1542
Регистриран на: 21.02.05



QUOTE (stewie @ 10-10-2018, 00:30)
Тактовете на цпуто и вероятности са крайно несъвместими.

а комбинацията: тактове, температура, напрежение и активност на слънцето отнесени към вероятности съвместими ли са?
PMEmail Poster
Top
stewie
Публикувано на: 10-10-2018, 09:36
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4276
Регистриран на: 14.07.16



QUOTE (JanBirdX @ 10-10-2018, 08:16)
QUOTE (stewie @ 10-10-2018, 00:30)
Тактовете на цпуто и вероятности са крайно несъвместими.

а комбинацията: тактове, температура, напрежение и активност на слънцето отнесени към вероятности съвместими ли са?

Не те троля бе. Не съществува истински рандом генератор. Решението дето го даваш е стандартно, някои даже си правят масив с елементите в съотношение вероятността да се паднат и после избират рандом индекс от него. Интересно ако имаш примерно 100 елемента равновероятни по 0.01, и пак ползваме тая схема, тоя генератор колко пъти ще ти върне най-първият. Почти никога.
PM
Top
SuN
Публикувано на: 10-10-2018, 10:14
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 6960
Регистриран на: 27.01.05



Така е, затова се правят симулации да видиш, че се пада въобще (няма програмна грешка). Дали в крайния продукт ще се падне е все тая.


--------------------
Копирай лесно ударено и - ѝ Ѝ
Замърсяване на въздуха в София - http://aqicn.org/city/bulgaria/sofia/druzhba/
PMEmail Poster
Top
JanBirdX
Публикувано на: 10-10-2018, 10:26
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1542
Регистриран на: 21.02.05



QUOTE (stewie @ 10-10-2018, 09:36)
Не те троля бе. Не съществува истински рандом генератор. Решението дето го даваш е стандартно, някои даже си правят масив с елементите в съотношение вероятността да се паднат и после избират рандом индекс от него. Интересно ако имаш примерно 100 елемента равновероятни по 0.01,  и пак ползваме тая схема, тоя генератор колко пъти ще ти върне най-първият. Почти никога.

И аз не те троля, почти... https://en.wikipedia.org/wiki/RdRand
PMEmail Poster
Top
stewie
Публикувано на: 10-10-2018, 11:31
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 4276
Регистриран на: 14.07.16



Аз бих разбъркал още повече манджата и то на всяка заявка. Вземаш съотношението на вероятностите на елементите. Тука е 5:3:2. Правиш си некъв масив с 10 елемента. С рандом пак попълваш тоя масив съответно там с 5 бахур, 3 създарма и 2 дроб сърма. И чак тогава си вземаш рандом число 0 - 1, умножаваш по 10, после го floor-ваш и по тоя индекс вземаш от масива.
PM
Top
JanBirdX
Публикувано на: 10-10-2018, 15:33
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1542
Регистриран на: 21.02.05



А няма ли да е по-просто така:
CODE
rand -> [0, RAND_MAX)
a1 + a2 + ... + an = RAND_MAX
for(i = 0; i < a.len; i++) {
  if rand < a[i]
     return i
 
  rand -= a[i]
}
return len - 1//TODO: is it possible
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0