Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rand z alternatywą
Forum PHP.pl > Forum > PHP
lukasamd
Witam,
chciałbym wykorzystać rand do losowania z 2 przedziałów liczbowych gdzie:

x E (1,5) v (10,15)

zrobiłem coś takiego:

  1. <?php
  2. $x = rand((1,5) || (10,15));
  3. ?>


ale nie działa. Jak to należy napisać aby działało?
Blodo
  1. <?php
  2. $seed = rand(0, 1);
  3. if ($seed == 0) {
  4. $x = rand(1, 5);
  5. } else {
  6. $x = rand(10, 15);
  7. }
  8. ?>


Prosciej sie juz nie da.
dr_bonzo
Ale jest zle smile.gif

Blodo:
Jakie jest p-stwo wylosowania 1 twoim kodem?
1/2 * 1/5 = 1/10

Jakie jest p-stwo wylosowania 15 twoim kodem?
1/2 * 1/6 = 1/12

1/10 != 1/12

a przeciez losujemy ze zbioru 11 liczb, wiec P-stwo powinno byc zawsze 1/11

albo:


lukasamd: wrzuc te liczby do tablicy a potem array_rand()


  1. <?php
  2. $seed = rand(1, 11); // 11 wartosci 
  3. if ($seed <= 5) {
  4. $x = rand(1, 5);
  5. } else {
  6. $x = rand(10, 15);
  7. }
  8. ?>


i teraz wszystko sie zgadza smile.gif
zimi
@dr_bonzo: a może by tak nie losować 2 razy smile.gif
  1. <?php
  2. $seed = rand(1, 11); // 11 wartosci 
  3. if ($seed > 5) {
  4. $x += 4;
  5. }
  6. ?>

przy okazji mt_rand" title="Zobacz w manualu PHP" target="_manual wg manuala jest średnio 4 razy szybsza
no ale przy losowaniu jednej liczby to raczej ma niewielkie znaczenie smile.gif
dr_bonzo
zimi: no pewnie ze lepiej raz, ja tylko poprawilem skrypt zeby DOBRZE liczyl, nie szybko smile.gif
Blodo
Cytat(dr_bonzo @ 30.09.2007, 12:14:02 ) *
Ale jest zle smile.gif

Niby jak jest zle? To czy losujesz moim czy twoim sposobem daje ten sam wynik, czyli liczbe z przedzialu 1-5 lub 10-15. Gdzie jest blad skoro nie ma roznicy?
zimi
"Dosia. Nie widać różnicy więc po co przepłacać" rotfl
różnica polega na tym że w tamtym kodzie prawdopodobieństwo wylosowania liczby z jednego przedziału jest takie same jak z drugiego..., a przedziały różnią się wielkością...
  1. <?php
  2. $seed = rand(0, 1);
  3. if ($seed == 0) {
  4. $x = rand(1, 2);
  5. } else {
  6. $x = rand(10, 10000);
  7. }
  8. ?>

ten kod też da losową liczbę z przedziałów 1-2 i 10-10000 no nie? los w tym wypadku jest po prostu cudowny...
.radex
albo też szybciutko (wg. powyższego przykładu):

  1. <?php
  2. $seed = rand(0,1);
  3. $x = ($seed = 0) ? rand(1,2) : rand(10,10000);
  4. ?>
zimi
@radex_p: Ty czytasz o czym się w topicu piszę czy tylko chciałeś się pochwalić jak umiesz używać trójargumentowego operatora? przy okazji robiąc znaczącą literówkę ( => $seed=0)
właśnie napisałem że przykład który napisałem jest zły O.o
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.