Portál AbcLinuxu, 21. května 2025 13:43
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.
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?
Asi si trošku nerozumímeRozumí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í.
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;
}
RAND_MAX je jednak typicky velké číslo (2^15)
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.