Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> arytmetyka liczb dużej precyzji - liczby losowe
kufalo
post
Post #1





Grupa: Zarejestrowani
Postów: 251
Pomógł: 2
Dołączył: 24.08.2005

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


Witam, niestety w bibliotece bc nie ma czegos takiego jak bcrand.
Potrzebuje wylosowac liczbe z przedzialu 0 - x, gdzie x jest to liczba calkowita dodatnia zapisana jako string.
Moze jakies podpowiedzi jak to najwydajniej zrobic w miare krotkim kodem ?
I co wazne aby prawdopodobienstwo otrzymania dowolnej liczby bylo jednakowe dla calej puli liczb.

Ten post edytował kufalo 24.08.2007, 08:40:37
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
qqrq
post
Post #2





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


No to wymóżdżyłem coś takiego:

  1. <?php
  2. function BCRand($max)
  3. {
  4.  if (!ctype_digit($max))  // tak jakby ktoś chciał losować nie po liczbie...
  5. return false;
  6.  if ($max<1) // sie rozumie...
  7. return false;
  8.  
  9.  $rand = '';
  10.  $is_max = true; // zmienna sprawdza, czy wszystkie wylosowane dotąd cyferki należą do górnego ogra
    niczenia
  11.  $length = strlen($max);
  12.  
  13.  for ($k=0;$k<$length;$k++)
  14.  {
  15. $rand .= (string)rand(0,($is_max)?$max[$k]:9);
  16. if ($rand[$k] != $max[$k])
  17.  $is_max = false;
  18.  }
  19.  return $rand
  20. }
  21. ?>


Od razu mówię - to tak z głowy, nieprzetestowane, ale zasadę działania tego wszystkiego chyba widać.

Pozdrawiam!
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.10.2025 - 16:42