generowanie liczb pseudolosowych IEEE 754 single precision

0

Mam taki problem - potrzebuję wygenerować zestaw liczb w standardzie IEEE 754 single precision z pełnego zakresu. Dane te potrzebuje do symulacji programu w VHDL-u i Matlabie. Czy istnieją gotowe biblioteki do generacji takich liczb w C - bo ten język "wspiera" liczby single-precision - float. Może ktoś zna jakąś bibliotekę lub stronkę z której można ściągnąć kod na licencji GNU?

0
quazi napisał(a)

IEEE 754 single precision z pełnego zakresu

jezeli RAND_MAX to 0xffffffff to mozesz sprobowac tak:

uint32_t r = rand();
float f = *(float *)&r;

0

A co w wypadku gdy RAND_MAX to nie jest 0xffffffff ?? Bo przecież nie jest...

0
quazi napisał(a)

A co w wypadku gdy RAND_MAX to nie jest 0xffffffff ?? Bo przecież nie jest...

na systemach chocby serii Linux - zakres rand'a jest pelny.
to ze Windows jest ulomny, nie uprawnia do zakladania ze wszyscy sa ulomni. "przeciez" jest nie na miejscu.

coz. na windowsach musisz uzyc innego generatora liczb losowych (np. poszukaj w okolicach Crypto), albo za kazdym razem losowac kilka wartosci z rand(), poskladac je sobie, i modlic sie zeby to nie zepsulo zbytnio (buhahaha?) charakterystyki tegoz generatora..

0

Dzięki za pomoc, ale w sumie to problem i tak jest nieaktualny. Napisałem po prostu w octave

a=round(rand()*254)-127
if a==-127
then b=((round(rand())*2-1)*rand()*2^-126
else b=((round(rand())2-1)(1+rand())*2^a
endif

i wyszedł w miarę nie najgorszy rozkład. Pewnie istnieje na to prostsza metoda, ale w tej nie musiałem się przynajmniej przejmować przypadkami NaN i inf.

0
quazi napisał(a)

A co w wypadku gdy RAND_MAX to nie jest 0xffffffff ?? Bo przecież nie jest...

tak jak queozotcalol (kur... daj Pan jakis skrot tego nicka xD) pisze kilka randow i poskladaj floata ze starszych bitow wylosowanych liczb, i ogolnie to man 3 rand

0
cepa napisał(a)

poskladaj floata ze starszych bitow wylosowanych liczb, i ogolnie to man 3 rand

A nie z młodszych przypadkiem?

0
cepa napisał(a)

(kur... daj Pan jakis skrot tego nicka xD)
Ja tam piszę "wąż" i się nie obraził (jeszcze :P).

0
asdf napisał(a)
cepa napisał(a)

poskladaj floata ze starszych bitow wylosowanych liczb, i ogolnie to man 3 rand

A nie z młodszych przypadkiem?

a nigdy z czegoś podobnego do

j=1+(rand() % 10);

(co korzysta z mniej znaczących bitów)

http://www.digipedia.pl/man/rand.3.html

ja im wierze na slowo, bo az tak w liczbach pseudolosowych nie siedze ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1