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.
problem z rand
Jun 29, 2005
18 Replies
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.
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.
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.
U¿ytkownik "Jacek M." snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:d9u19o$lik$ snipped-for-privacy@news.onet.pl...
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...
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
Użytkownik Jacek M. napisał:
Wydawało Ci się. Przecież ta biblioteka jest już skompilowana.
Niestety funkcja random, ktora
Niee, wtedy to byłby już zupełny kanał ;-)
Szkoda, ze nie ma mozliwosci
Jest. Np:
#define my_random(x) (random() & 7)
Albert
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.
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.
Jak z wszystkim ;-)
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
Ach, dla zapewnienia bezpieczeństwa to postarałbym się przede wszystkim o lepszego programistę niż twórca wątku ;-) (bez obrazy)
Albert
Owszem, ale z tym jednak trzeba uwa¿aæ szczególnie.
Równie¿ nie s±dzê i dlatego odradzam jego u¿ywanie, je¶li celem nie jest generowanie szumu do g³o¶ników. ;-)
:-) Jednak i najlepszy programista nie da rady zrobiæ bezpiecznego systemu, je¶li dane "losowe" bêdzie bra³ z funkcji rand()...
Pozdrawiam Piotr Wyderski
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.
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
Co za skrzywienie zawodowe. A moze Jacek robi np sterownik lampek choinkowych, ktorego nikt nie bedzie lamal :-)
J.
Z kontekstu (cyt. "Wlasnie tego sie obawiam") wynika, ¿e chodzi o co¶ powa¿niejszego, czyli moje skrzywienie s³usznie mnie uwiera... ;-)
Pozdrawiam Piotr Wyderski
U¿ytkownik "Albert Bartoszko" snipped-for-privacy@nt.kegel.com.pl> napisa³ w wiadomo¶ci news:da2t1h$ahf$ snipped-for-privacy@nemesis.news.tpi.pl...
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.
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.
[...]
Troche podstawowych informacji:
formatting link
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:
formatting link
pzdr. j.
Użytkownik Jacek M. napisał: [...]
Nie jestem, ani nie czuję się omnibusem. Jeśli uraziłem to serdecznie przepraszam, nie było to moim celem.
Albert
U¿ytkownik "Albert Bartoszko" snipped-for-privacy@nt.kegel.com.pl> napisa³ w wiadomo¶ci news:daah1t$k6m$ snipped-for-privacy@nemesis.news.tpi.pl...
OK. I tak nie obrazilem sie... :-)) Pozdrawiam Jacek M.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required