Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: random dla duzych liczb
Forum PHP.pl > Forum > PHP
flashdev
Czy została napisana jakaś funkcja do losowania dużych (tych z poza zakresu php) liczb?

Jeżeli ktoś posiada coś takiego to prosiłbym o udostępnienie.
erix
No nie podejrzewałbym Cię o coś takiego...

http://tinyurl.com/nrd4y3
flashdev
Problem w tym, że to wcale nie jest tak łatwo znaleźć to o czym piszę.

Pozwolę sobie np. zacytować taki oto kod ze strony:
http://mgccl.com/2007/02/05/a-large-random-number-generator

Cytat
  1. function bcrand($min, $max){
  2. bcscale(0);
  3. if(bccomp($max,$min)!=1){
  4. return 0;
  5. }
  6. $top = bcsub($max,$min);
  7. $length = strlen($top);
  8. $rand ='';
  9. $n = 0;
  10. while(9*$n < $length){
  11. if($length - 9*$n >= 9){
  12. $rand .= mt_rand(0,999999999);
  13. }else{
  14. $rand .= mt_rand(0,str_repeat('9',$length-9*$n));
  15. }
  16. ++$n;
  17. }
  18. while(bccomp($rand,$top)==1){
  19. $rand = substr($rand,1,$length).mt_rand(0,9);
  20. }
  21. return bcadd($rand,$min);
  22. }


Ja osobiście nie nazwał bym tego generatorem liczb losowych, podpisując się pod tym.

Pewnie trudno (dla tak dużych liczb) to sprawdzić doświadczalnie, ale ten kod będzie generował liczby o nierównym rozkładzie statystycznym. Więc to nie jest to co mnie interesuje.

Być może ktoś z forumowiczów już miał podobny problem i napisał coś takiego, lub posiada adres do takiego kodu.
Jeśli tak to ponawiam prośbę o udostępnienie.
redeemer
Na systemach *nixowych można by skorzystać z /dev/urandom.
Przykładowy kod autorstwa 'robert at scabserver dot com' znajdziesz w 'User Contributed Notes' na stronie http://algorytmy.pl/doc/php/ref.bc.php

Pozdrawiam.
pyro
Zależy też jak duże liczby chcesz losować:

  1. <?php
  2.  
  3. echo 'rand: '.getrandmax().'<br />';
  4. echo 'mt_rand: '.mt_getrandmax();
  5.  
  6. ?>


Kod
rand: 32767
mt_rand: 2147483647
flashdev
Cytat(pyro @ 9.09.2009, 08:24:04 ) *
Zależy też jak duże liczby chcesz losować:

  1. <?php
  2.  
  3. echo 'rand: '.getrandmax().'<br />';
  4. echo 'mt_rand: '.mt_getrandmax();
  5.  
  6. ?>


Kod
rand: 32767
mt_rand: 2147483647


Cytat(flashdev @ 7.09.2009, 13:45:13 ) *
Czy została napisana jakaś funkcja do losowania dużych (tych z poza zakresu php) liczb?

Jeżeli ktoś posiada coś takiego to prosiłbym o udostępnienie.


Oczywiście chodzi tutaj o operacje na stringach.
Wicepsik


Może tak? blinksmiley.gif
flashdev
Cytat(Wicepsik @ 9.09.2009, 17:04:08 ) *


Może tak? blinksmiley.gif


Niestety nie, liczba jest konwertowana do float i wyświetlona w zapisie naukowym.

Specyfika mojego problemy jest bardzo nietypowa smile.gif
Potrzebuję losową liczbę rzędu googol, ale z dokładnością do 10^0.

Poradziłem sobie, już korzystajac z wyzej przedstawionej przeze mnie funkcji.
Przy tak dużych liczbach i tak ta funkcja sprawuje się dobrze.
erix
  1. echo (string)mt_rand().(string)mt_rand().(string)mt_rand();

;]
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.