Portál AbcLinuxu, 21. května 2025 13:05
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.
Tiskni
Sdílej:
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.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.