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

 

22.6.2008 02:01 | nic | poslední úprava: 3.1.2019 14:43

Cupiditate sit voluptatibus architecto minus voluptatem quia et in. Facere repellendus natus ullam sunt eius non. Tempore inventore et nihil alias. Possimus sequi voluptates repellat odio quia suscipit dolores. Et nihil nihil dolore nemo harum qui quidem excepturi. Sit ut ipsa eum.

       

Hodnocení: 67 %

        špatnédobré        

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

Komentáře

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

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

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