Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> random dla duzych liczb
flashdev
post 7.09.2009, 12:45:13
Post #1





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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.


--------------------
Go to the top of the page
+Quote Post
erix
post 7.09.2009, 12:50:54
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No nie podejrzewałbym Cię o coś takiego...

http://tinyurl.com/nrd4y3


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
flashdev
post 7.09.2009, 13:06:23
Post #3





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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.

Ten post edytował flashdev 7.09.2009, 13:08:15


--------------------
Go to the top of the page
+Quote Post
redeemer
post 8.09.2009, 23:18:04
Post #4





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


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.


--------------------
Go to the top of the page
+Quote Post
pyro
post 9.09.2009, 07:24:04
Post #5





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


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


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
flashdev
post 9.09.2009, 15:59:11
Post #6





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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.


--------------------
Go to the top of the page
+Quote Post
Wicepsik
post 9.09.2009, 16:04:08
Post #7





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----




Może tak? blinksmiley.gif


--------------------
Go to the top of the page
+Quote Post
flashdev
post 9.09.2009, 16:23:51
Post #8





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


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.


--------------------
Go to the top of the page
+Quote Post
erix
post 9.09.2009, 20:04:02
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. echo (string)mt_rand().(string)mt_rand().(string)mt_rand();

;]


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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 Wersja Lo-Fi Aktualny czas: 19.06.2025 - 03:05