problem z rand



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: problem z rand
Date: Wed, 29 Jun 2005 12:50:36 +0200


Napisalem program pod kompilator gcc.
Ograniczylem w nim zakres generowania liczb losowych.
#undef RAND_MAX
#define RAND_MAX 1000
i ustawilem wartosc startowa
srand(sliczba);
mimo tego liczby generowane przez funkcje rand() nie sa ograniczane do
ustawionego zakresu.
Mozecie mi podpowiedziec dlaczego?
Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: problem z rand
Date: Wed, 29 Jun 2005 13:23:39 +0200


On Wed, 29 Jun 2005 12:50:36 +0200, Jacek M. wrote:
Napisalem program pod kompilator gcc.
Ograniczylem w nim zakres generowania liczb losowych.
#undef RAND_MAX
#define RAND_MAX 1000
i ustawilem wartosc startowa
srand(sliczba);
mimo tego liczby generowane przez funkcje rand() nie sa ograniczane do
ustawionego zakresu.
Mozecie mi podpowiedziec dlaczego?

Hm - a jakie to gcc ?

Bo z ciekawosci zajrzalem do AVRgcc - rand() jest funkcja zewnetrzna
i zaden #define nie bedzie mial na nia wplywu.

Ewentualnie .. zle zrozumiales dokumentacje - to nie sluzy do
ustawiania zakresu liczb generowanych przez rand(), ale sluzy twojemu
programowi, zeby wiedzial jakiego zakresu moze sie spodziewac.

Dzeiki temu mozesz napisac program tak ze po zmianie
biblioteki/procesora program po przekompilowaniu bedzie nadal dobrze
dzialal ..

J.


Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: problem z rand
Date: Wed, 29 Jun 2005 14:30:44 +0200


Ograniczylem w nim zakres generowania liczb losowych.
#undef RAND_MAX
#define RAND_MAX 1000
i ustawilem wartosc startowa
srand(sliczba);
mimo tego liczby generowane przez funkcje rand() nie sa ograniczane do
ustawionego zakresu.
Mozecie mi podpowiedziec dlaczego?

Hm - a jakie to gcc ?
Bo z ciekawosci zajrzalem do AVRgcc - rand() jest funkcja zewnetrzna
i zaden #define nie bedzie mial na nia wplywu.
Ewentualnie .. zle zrozumiales dokumentacje - to nie sluzy do
ustawiania zakresu liczb generowanych przez rand(), ale sluzy twojemu
programowi, zeby wiedzial jakiego zakresu moze sie spodziewac.
Dzeiki temu mozesz napisac program tak ze po zmianie
biblioteki/procesora program po przekompilowaniu bedzie nadal dobrze
dzialal ..

J.
Program jest kompilowany AVRgcc. Wydawalo mi sie, ze uzycie define spowoduje
ograniczenie zakresu generowanych liczb. Niestety funkcja random, ktora
mogla by nadawac sie do ograniczenia zakresu liczb losowych w bibliotece
stdlib dla tego kompilatora jest typu void. Szkoda, ze nie ma mozliwosci
ograniczenia tego zakresu. Dzieki za pomoc.
Jacek M.




Poprzedni Następny
Wiadomość
Spis treści
From: Albert Bartoszko <albertb_at_nospam_nt.kegel.com.pl>
Subject: Re: problem z rand
Date: Wed, 29 Jun 2005 15:17:53 +0200


Użytkownik Jacek M. napisał:
Ograniczylem w nim zakres generowania liczb losowych.
#undef RAND_MAX
#define RAND_MAX 1000
i ustawilem wartosc startowa
srand(sliczba);
mimo tego liczby generowane przez funkcje rand() nie sa ograniczane do
ustawionego zakresu.
Mozecie mi podpowiedziec dlaczego?

Hm - a jakie to gcc ?
Bo z ciekawosci zajrzalem do AVRgcc - rand() jest funkcja zewnetrzna
i zaden #define nie bedzie mial na nia wplywu.
Ewentualnie .. zle zrozumiales dokumentacje - to nie sluzy do
ustawiania zakresu liczb generowanych przez rand(), ale sluzy twojemu
programowi, zeby wiedzial jakiego zakresu moze sie spodziewac.
Dzeiki temu mozesz napisac program tak ze po zmianie
biblioteki/procesora program po przekompilowaniu bedzie nadal dobrze
dzialal ..

J.

Program jest kompilowany AVRgcc. Wydawalo mi sie, ze uzycie define spowoduje
ograniczenie zakresu generowanych liczb.
Wydawało Ci się.
Przecież ta biblioteka jest już skompilowana.

Niestety funkcja random, ktora
mogla by nadawac sie do ograniczenia zakresu liczb losowych w bibliotece
stdlib dla tego kompilatora jest typu void.
Niee, wtedy to byłby już zupełny kanał ;-)

Szkoda, ze nie ma mozliwosci
ograniczenia tego zakresu. Dzieki za pomoc.

Jest. Np:

#define my_random(x) (random() & 7)


Albert

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: problem z rand
Date: Thu, 30 Jun 2005 21:10:03 +0200


Albert Bartoszko wrote:

#define my_random(x) (random() & 7)

O, z takimi pomysłami trzeba bardzo uważać -- przycięcie zakresu
może wpłynąć na rozkład prawdopodobieństwa uzyskiwanych wyników,
a czasami to jest istotne. Druga sprawa to to, że algorytm rand używany
w większości bibliotek standardowych C(++) jest bardzo słabiutki,
zazwyczaj jest to jakiś łatwy do odtworzenia liniowy generator
kongruencyjny. Dlatego jeśli potrzebujesz liczb losowych do zapewnienia
bezpieczeństwa systemu, koniecznie użyj innego generatora.

Pozdrawiam
Piotr Wyderski


Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: problem z rand
Date: Thu, 30 Jun 2005 23:13:10 +0200



Użytkownik "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl> napisał w
wiadomości news:da1g2a$5i6$1_at_nospam_news.dialog.net.pl...
Albert Bartoszko wrote:

#define my_random(x) (random() & 7)

O, z takimi pomysłami trzeba bardzo uważać -- przycięcie zakresu
może wpłynąć na rozkład prawdopodobieństwa uzyskiwanych wyników,
a czasami to jest istotne. Druga sprawa to to, że algorytm rand używany
w większości bibliotek standardowych C(++) jest bardzo słabiutki,
zazwyczaj jest to jakiś łatwy do odtworzenia liniowy generator
kongruencyjny. Dlatego jeśli potrzebujesz liczb losowych do zapewnienia
bezpieczeństwa systemu, koniecznie użyj innego generatora.

Pozdrawiam
Piotr Wyderski
Wlasnie tego sie obawiam. Mozesz mi podpowiedziec jakies jakiego generatora
moglbym uzyc? Ewentualnie gdzie w sieci moge o takich generatorach poczytac.
Pozdrawiam
Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: problem z rand
Date: Fri, 1 Jul 2005 15:33:03 +0200


Jacek M. wrote:

Mozesz mi podpowiedziec jakies jakiego generatora moglbym uzyc?

Nie, ponieważ nie napisałeś, do jakiego celu potrzebujesz takiego
generatora i jakim budżetem dysponuje osoba chcąca go złamać.
Najpierw musisz określić takie założenia, a dopiero później dobrać
odpowiedni algorytm.

Ewentualnie gdzie w sieci moge o takich generatorach poczytac.

W sieci to nie wiem, ale jest na ten temat cały rozdział (w tym m.in.
o liniowych i nieliniowych rejestrach przesuwających) w Applied
Cryptography Brucea Schneiera i tam skierowałbym Cię po dokładne
omówienie tego problemu i algorytmów.

Pozdrawiam
Piotr Wyderski


Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: problem z rand
Date: Fri, 01 Jul 2005 18:31:41 +0200


On Fri, 1 Jul 2005 15:33:03 +0200, Piotr Wyderski wrote:
Jacek M. wrote:
Mozesz mi podpowiedziec jakies jakiego generatora moglbym uzyc?

Nie, ponieważ nie napisałeś, do jakiego celu potrzebujesz takiego
generatora i jakim budżetem dysponuje osoba chcąca go złamać.

Co za skrzywienie zawodowe. A moze Jacek robi np sterownik
lampek choinkowych, ktorego nikt nie bedzie lamal :-)

J.


Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: problem z rand
Date: Fri, 1 Jul 2005 20:32:33 +0200


J.F. wrote:

Co za skrzywienie zawodowe. A moze Jacek robi np sterownik
lampek choinkowych, ktorego nikt nie bedzie lamal :-)

Z kontekstu (cyt. "Wlasnie tego sie obawiam") wynika, że chodzi
o coś poważniejszego, czyli moje skrzywienie słusznie mnie uwiera... ;-)

Pozdrawiam
Piotr Wyderski


Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: problem z rand
Date: Fri, 1 Jul 2005 21:46:37 +0200


Użytkownik "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl> napisał w
wiadomości news:da428b$g3$1_at_nospam_news.dialog.net.pl...
J.F. wrote:

Co za skrzywienie zawodowe. A moze Jacek robi np sterownik
lampek choinkowych, ktorego nikt nie bedzie lamal :-)

Z kontekstu (cyt. "Wlasnie tego sie obawiam") wynika, że chodzi
o coś poważniejszego, czyli moje skrzywienie słusznie mnie uwiera... ;-)

Pozdrawiam
Piotr Wyderski
Problem na tym etapie jest na tyle niezdefiniowany, ze sam jeszcze nie wiem
czy bedzie konieczna ochrona danych. Projekt dotyczyc ma transmisji danych
poprzez radio ramkami o specyficznej budowie. Na razie mam zdefiniowany
wyglad ramki. Reszta bedzie okreslona w pozniejszym etapie.

Pozdrawiam
Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek R. Radzikowski" <jacek_at_nospam_spamer.die.die.die.piranet.org>
Subject: Re: problem z rand
Date: Fri, 1 Jul 2005 20:02:05 +0000 (UTC)


Jacek M. <tymkonto_at_nospam_poczta.onet.pl> wrote:

[...]
Wlasnie tego sie obawiam. Mozesz mi podpowiedziec jakies jakiego generatora
moglbym uzyc? Ewentualnie gdzie w sieci moge o takich generatorach poczytac.

Troche podstawowych informacji:
http://ece.gmu.edu/courses/ECE636/viewgraphs_S05/lecture12 rng3.pdf

a poza tym to polecana juz "Applied Cryptography" Schneiera i absolutna
podstawa: "Handbook of Applied Cryptography" Menezesa, van Oorschot i
Vanstone (gruba, napisana w dosc zwiezly sposob, na lekture do poduszki
raczej nie polecam, ale znajdziesz tam w zasadzie wszystko).
Ta ostatnia jest dostepna w calosci w wersji elektronicznej:
http://www.cacr.math.uwaterloo.ca/hac/

pzdr.
j.

Pozdrawiam
Jacek M.





Poprzedni Następny
Wiadomość
Spis treści
From: Albert Bartoszko <albertb_at_nospam_nt.kegel.com.pl>
Subject: Re: problem z rand
Date: Fri, 01 Jul 2005 10:28:58 +0200


Użytkownik Piotr Wyderski napisał:
Albert Bartoszko wrote:

#define my_random(x) (random() & 7)


O, z takimi pomysłami trzeba bardzo uważać
Jak z wszystkim ;-)

-- przycięcie zakresu
może wpłynąć na rozkład prawdopodobieństwa uzyskiwanych wyników,
a czasami to jest istotne. Druga sprawa to to, że algorytm rand używany
w większości bibliotek standardowych C(++) jest bardzo słabiutki,
zazwyczaj jest to jakiś łatwy do odtworzenia liniowy generator
kongruencyjny.
Koledze chodziło o gcc.
Nie sądzę, aby port na avr odbiegał od wersji standardowej

Patrz "man rand", "man random"

Dlatego jeśli potrzebujesz liczb losowych do zapewnienia
bezpieczeństwa systemu, koniecznie użyj innego generatora.
Ach, dla zapewnienia bezpieczeństwa to postarałbym się przede
wszystkim o lepszego programistę niż twórca wątku ;-) (bez obrazy)

Albert

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: problem z rand
Date: Fri, 1 Jul 2005 15:23:35 +0200


Albert Bartoszko wrote:

Jak z wszystkim ;-)

Owszem, ale z tym jednak trzeba uważać szczególnie.

Nie sądzę, aby port na avr odbiegał od wersji standardowej

Również nie sądzę i dlatego odradzam jego używanie, jeśli
celem nie jest generowanie szumu do głośników. ;-)

Ach, dla zapewnienia bezpieczeństwa to postarałbym się przede
wszystkim o lepszego programistę niż twórca wątku ;-) (bez obrazy)

-) Jednak i najlepszy programista nie da rady zrobić
bezpiecznego systemu, jeśli dane "losowe" będzie brał
z funkcji rand()...

Pozdrawiam
Piotr Wyderski


Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: problem z rand
Date: Fri, 1 Jul 2005 20:46:35 +0200



Użytkownik "Albert Bartoszko" <albertb_at_nospam_nt.kegel.com.pl> napisał w wiadomości
news:da2t1h$ahf$1_at_nospam_nemesis.news.tpi.pl...
Dlatego jeśli potrzebujesz liczb losowych do zapewnienia
bezpieczeństwa systemu, koniecznie użyj innego generatora.
Ach, dla zapewnienia bezpieczeństwa to postarałbym się przede
wszystkim o lepszego programistę niż twórca wątku ;-) (bez obrazy)

Albert
Dzieki wszystkim za pomoc. Jak do tej pory nie uzywalem generatorow liczb
losowych, stad moja tak pobiezna znajomosc tego zagadnienia. Byc moze
Albercie jestem zbyt "cienki" by realizowac to zadanie ale czy Ty jestes
omnibusem w kazdej dziedzinie? Proponuje Ci wiecej powsciagliwosci w
wyrazaniu tak radykalnych opini. Nieznajomosc danego zagadnienia jak
dotychczas pobudzala mnie do tego by je poznac i takie podejscie
wielokrotnie sprawdzilo mi sie. Temu tez mial sluzyc ten wywolany przeze
mnie watek. Teraz juz wiem gdzie moge znalezc wiecej informacji. Szczegolne
podziekowania dla Piotra Wyderskiego.
Jeszcze raz dziekuje wszystkim.

Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: Albert Bartoszko <albertb_at_nospam_nt.kegel.com.pl>
Subject: Re: problem z rand
Date: Mon, 04 Jul 2005 07:53:42 +0200


Użytkownik Jacek M. napisał:
[...]
Albercie jestem zbyt "cienki" by realizowac to zadanie ale czy Ty jestes
omnibusem w kazdej dziedzinie? Proponuje Ci wiecej powsciagliwosci w
wyrazaniu tak radykalnych opini. Nieznajomosc danego zagadnienia jak
dotychczas pobudzala mnie do tego by je poznac i takie podejscie
wielokrotnie sprawdzilo mi sie. Temu tez mial sluzyc ten wywolany przeze
mnie watek. Teraz juz wiem gdzie moge znalezc wiecej informacji. Szczegolne
podziekowania dla Piotra Wyderskiego.

Nie jestem, ani nie czuję się omnibusem. Jeśli uraziłem to serdecznie
przepraszam, nie było to moim celem.

Albert

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: problem z rand
Date: Thu, 7 Jul 2005 11:11:49 +0200



Użytkownik "Albert Bartoszko" <albertb_at_nospam_nt.kegel.com.pl> napisał w wiadomości
news:daah1t$k6m$1_at_nospam_nemesis.news.tpi.pl...
Użytkownik Jacek M. napisał:
[...]
Albercie jestem zbyt "cienki" by realizowac to zadanie ale czy Ty jestes
omnibusem w kazdej dziedzinie? Proponuje Ci wiecej powsciagliwosci w
wyrazaniu tak radykalnych opini. Nieznajomosc danego zagadnienia jak
dotychczas pobudzala mnie do tego by je poznac i takie podejscie
wielokrotnie sprawdzilo mi sie. Temu tez mial sluzyc ten wywolany przeze
mnie watek. Teraz juz wiem gdzie moge znalezc wiecej informacji.
Szczegolne
podziekowania dla Piotra Wyderskiego.

Nie jestem, ani nie czuję się omnibusem. Jeśli uraziłem to serdecznie
przepraszam, nie było to moim celem.

Albert
OK. I tak nie obrazilem sie... :-))
Pozdrawiam
Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: problem z rand
Date: Wed, 29 Jun 2005 13:32:06 +0200


Napisalem program pod kompilator gcc.
Ograniczylem w nim zakres generowania liczb losowych.
#undef RAND_MAX
#define RAND_MAX 1000
i ustawilem wartosc startowa
srand(sliczba);
mimo tego liczby generowane przez funkcje rand() nie sa ograniczane do
ustawionego zakresu.
Mozecie mi podpowiedziec dlaczego?
Jacek M.

Podobnie dzieje sie z random(). Mimo ograniczenia wartosci maksymalnej
podobnie jak wyzej poprzez
#undef RANDOM_MAX
#define RANDOM_MAX 1000
i ustawienia wartosci poczatkowej srandom(sliczba); generowane liczby nie sa
ograniczne do zadeklarowanego zakresu...
Moze ktos podpowie co zrobic by program dzialal w sposob przewidywalny.
Jacek M.



Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysztof Rudnik" <rudnik_at_nospam_kki.net.pl>
Subject: Re: problem z rand
Date: Wed, 29 Jun 2005 14:34:51 +0200



Użytkownik "Jacek M." <tymkonto_at_nospam_poczta.onet.pl> napisał w wiadomości
news:d9u19o$lik$1_at_nospam_news.onet.pl...
Napisalem program pod kompilator gcc.
Ograniczylem w nim zakres generowania liczb losowych.
#undef RAND_MAX
#define RAND_MAX 1000
i ustawilem wartosc startowa
srand(sliczba);
mimo tego liczby generowane przez funkcje rand() nie sa ograniczane do
ustawionego zakresu.
Mozecie mi podpowiedziec dlaczego?
Jacek M.

Podobnie dzieje sie z random(). Mimo ograniczenia wartosci maksymalnej
podobnie jak wyzej poprzez
#undef RANDOM_MAX
#define RANDOM_MAX 1000

Przeciez ta funkcja nie ma pojecia co sobie we wlasnym kodzie ustawiles,
szczegolnie przez #define (to nie istnieje w kodzie wynikowym).
Moze jakby to byla zmienna globalna...


i ustawienia wartosci poczatkowej srandom(sliczba); generowane liczby nie
sa
ograniczne do zadeklarowanego zakresu...
Moze ktos podpowie co zrobic by program dzialal w sposob przewidywalny.

rand() nie dziala (a w kazdym razie nie powinno) dzialac w sposob
przewidywalny...
Albo przypadek albo przewidywalnosc... :)))

A tak naprawde po prostu musisz przeliczyc wynik do odpowiedniego zakresu
funkcja liniowa (chyba ze potrzebujesz inny rozklad).

Krzysiek Rudnik



Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek M." <tymkonto_at_nospam_poczta.onet.pl>
Subject: Re: problem z rand
Date: Wed, 29 Jun 2005 16:25:18 +0200



Użytkownik "Jacek M." <tymkonto_at_nospam_poczta.onet.pl> napisał w wiadomości
news:d9u19o$lik$1_at_nospam_news.onet.pl...
Napisalem program pod kompilator gcc.
Ograniczylem w nim zakres generowania liczb losowych.
#undef RAND_MAX
#define RAND_MAX 1000
i ustawilem wartosc startowa
srand(sliczba);
mimo tego liczby generowane przez funkcje rand() nie sa ograniczane do
ustawionego zakresu.
Mozecie mi podpowiedziec dlaczego?
Jacek M.

Podobnie dzieje sie z random(). Mimo ograniczenia wartosci maksymalnej
podobnie jak wyzej poprzez
#undef RANDOM_MAX
#define RANDOM_MAX 1000

Przeciez ta funkcja nie ma pojecia co sobie we wlasnym kodzie ustawiles,
szczegolnie przez #define (to nie istnieje w kodzie wynikowym).
Moze jakby to byla zmienna globalna...


i ustawienia wartosci poczatkowej srandom(sliczba); generowane liczby
nie
sa
ograniczne do zadeklarowanego zakresu...
Moze ktos podpowie co zrobic by program dzialal w sposob przewidywalny.

rand() nie dziala (a w kazdym razie nie powinno) dzialac w sposob
przewidywalny...
Albo przypadek albo przewidywalnosc... :)))

A tak naprawde po prostu musisz przeliczyc wynik do odpowiedniego zakresu
funkcja liniowa (chyba ze potrzebujesz inny rozklad).

Krzysiek Rudnik

Zgadza sie. Przepraszam ale siedze nad programem od rana i "zapetlilem sie"
-)). Wiem, ze moge zmniejszyc przedzial generowanych liczb przez
przemnozenie wyniku przez wspolczynniki ale to pociaga za soba dodatkowa
kwantyzacje. Piszac o przewidywalnosci funkcji random() czy rand() chodzilo
mi o to, ze beda one w sposob okreslony reagowac na zmiane wartosci
zdefiniowanych wartosci maksymalnych. Okazalo sie, ze bylem w bledzie.
Jeszcze raz dziekuje i pozdrawiam
Jacek M.