Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Rand z alternatywą
-lukasamd-
post
Post #1





Goście







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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Blodo
post
Post #2





Grupa: Zarejestrowani
Postów: 51
Pomógł: 1
Dołączył: 1.02.2005

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
zimi
post
Post #4





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

Ostrzeżenie: (0%)
-----


@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
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


zimi: no pewnie ze lepiej raz, ja tylko poprawilem skrypt zeby DOBRZE liczyl, nie szybko smile.gif


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Blodo
post
Post #6





Grupa: Zarejestrowani
Postów: 51
Pomógł: 1
Dołączył: 1.02.2005

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
zimi
post
Post #7





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

Ostrzeżenie: (0%)
-----


"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...
Go to the top of the page
+Quote Post
.radex
post
Post #8





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

Ostrzeżenie: (0%)
-----


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. ?>


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
zimi
post
Post #9





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

Ostrzeżenie: (0%)
-----


@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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:53