Portál AbcLinuxu, 21. května 2025 13:04

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
Luboš Doležel (Doli) avatar 22.6.2008 02:10 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: GITS; omezení rand() ze vstupu; undefined reference
Odpovědět | Sbalit | Link | Blokovat | Admin
Druhá otázečka: proč se děje následující? Píši jinou aplikaci (v mých, zatím oblíbených, wxWidgets) a při překladu se dozvím následující chybu:
Kompiluješ to asi bez window.cpp
Jenže s tím programem (v C++) jsem se krapet zasekl --- maximální hodnota vygenerovaná funkcí rand(void) je omezena konstantou RAND_MAX, jenže ta musí být známá už při překladu --- jak to mám udělat, aby maximální hodnotu zadával uživatel?
To maximum můžeš obejít tím, že sečteš nebo vynásobíš výsledky rand(). Pokud jde o snížení té hranice, tak operátor modulo.
Fluttershy, yay! avatar 22.6.2008 02:56 Fluttershy, yay! | skóre: 93 | blog:
Rozbalit Rozbalit vše Re: GITS; omezení rand() ze vstupu; undefined reference
Kompiluješ to asi bez window.cpp

Taková capina... Díky!

To maximum můžeš obejít tím, že sečteš nebo vynásobíš výsledky rand(). Pokud jde o snížení té hranice, tak operátor modulo.

Asi si trošku nerozumíme, takže upřesním: mám dynamické pole, jehož počet prvků N zadává uživatel. To pole se má naplnit náhodnými čísly velikosti maximálně N. Pak N vláken podle teď nepodstatného algoritmu zpracovává to pole. No a já myslel, že by třeba mohla existovat funkce náhodné_číslo(minimální_hodnota, maximální_hodnota), ne?

🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
Luboš Doležel (Doli) avatar 22.6.2008 03:01 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: GITS; omezení rand() ze vstupu; undefined reference
Asi si trošku nerozumíme
Rozumíme, viz ten operátor modulo :-)
No a já myslel, že by třeba mohla existovat funkce náhodné_číslo(minimální_hodnota, maximální_hodnota), ne?
Zbytečné. Velikost rozsahu od min do max ohlídá modulo a minimální hodnotu její přičtení.
Fluttershy, yay! avatar 22.6.2008 04:02 Fluttershy, yay! | skóre: 93 | blog:
Rozbalit Rozbalit vše Re: GITS; omezení rand() ze vstupu; undefined reference
Jo takhle, na záchodě mi to mezitím došlo. ^_^
🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
Luboš Doležel (Doli) avatar 22.6.2008 03:02 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: GITS; omezení rand() ze vstupu; undefined reference
cislo = minimum + rand() % (maximum-minimum+1)
Fluttershy, yay! avatar 22.6.2008 04:02 Fluttershy, yay! | skóre: 93 | blog:
Rozbalit Rozbalit vše Re: GITS; omezení rand() ze vstupu; undefined reference
Díky.
🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
22.6.2008 11:04 MJ | Tady a teď
Rozbalit Rozbalit vše Re: GITS; omezení rand() ze vstupu; undefined reference
Pozor, modulením si kazíte rovnoměrnost rozdělení! (Pokud tedy není náhodou velikost rozsahu funkce rand() dělitelná velikostí Vašeho rozsahu.)

Příklad: kdyby rand() generoval čísla od 0 do 7 a modulil jste jeho výsledek pěti, bude mít 0, 1 a 2 dvakrát větší pravděpodobnost než ostatní čísla.

Lépe to lze udělat například takto:

unsigned random_max(unsigned max)
{
  unsigned r, l;
  l = (RAND_MAX+1) - ((RAND_MAX+1) % max);
  do
    r = rand();
  while (r >= l);
  return r % max;
}
Luboš Doležel (Doli) avatar 22.6.2008 12:04 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: GITS; omezení rand() ze vstupu; undefined reference
RAND_MAX je jednak typicky velké číslo (2^15) a všeoecně: pokud by to vadilo, tak použiju /dev/(u)random
22.6.2008 18:08 Jirka P
Rozbalit Rozbalit vše Re: GITS; omezení rand() ze vstupu; undefined reference
RAND_MAX je jednak typicky velké číslo (2^15)
  1. 2^15 je malé číslo
  2. Při RAND_MAX=2^15 máte popsaný problém při generování čísel už třeba z rozsahu 0..20000
všeoecně: pokud by to vadilo, tak použiju /dev/(u)random
... čímž se nic nevyřeší, protože čtení bitů z /dev/random má stejný problém, se stejným řešením.
Luboš Doležel (Doli) avatar 22.6.2008 18:59 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: GITS; omezení rand() ze vstupu; undefined reference
Musíte pochopit, o jakém generování náhodných čísel se tu bavíme. Hlavně účel.
24.6.2008 12:09 Jirka P.
Rozbalit Rozbalit vše Re: GITS; omezení rand() ze vstupu; undefined reference
Jednak ten účel neznám, druhak pokud by se s tím tazatel nechtěl moc namáhat, poradil bych mu nechat to na jiných a použít boost::random.
22.6.2008 09:57 Mandarinka
Rozbalit Rozbalit vše Re: GITS; omezení rand() ze vstupu; undefined reference
Odpovědět | Sbalit | Link | Blokovat | Admin
Ano, poradíme: Solid state society!

Háhá!!!

P.S. Ta náhrada Tachikom je paradaoxně prakticky shodná (tvarově) s tím, jak ty poajšené tanky vypadaly v původní manze (ale tam byly stejně inteligentní jako tachikomy a jmenovaly se fuchikomy: viz). Ono vůbec, ta poslední scéna (rauchpauza a la sakurové lístky) je téměř přesně obšlehnutá úvodní scéna mangy... Jako velmi mnoho věcí v tom seriálu. Je to moc zajímavá adaptace, bere si motivy z různých míst různých předloh a skládá si je po svém...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.