Diskuze: Rand() a interval.
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Interval jako takový předat funkci rand() přímo nemůžeš, ale funkci rand() můžeš použít k vytvoření vlastní funkce nebo makra s parametry. Prototyp vytvořené funkce může být např. následující:
int range(int a, int b);
Funkce rand() vrací pseudonáhodné číslo v rozsahu 0 až RAND_MAX.
Použitím operátoru modulo (%) omezíš rozsah na 0 až n-1.
rand() % n
Pro interval <a;b> po úpravách (posunu rozsahu)
(rand() % (b - a + 1)) + a
Je ale třeba mít stále namysli platný rozsah hodnot funkce rand().
Děkuji, funguje to Když
tento postup aplikuji i na realna čisla, tak mi to např. z intervalu
<10;20>, generuje čislo jako 20.11, 20.9 atd., je to v pořádku?
Jelikož si nejsem jisty, jestli ten interval neříká, že tam může být 20,
ale nikoli 20.1 atp. ?
Diky
Operátor modulo pracuje správně pouze s celočíselnými operandy a tudíž je funkce provádějící generování pseudonáhodného čísla v daném intervalu omezena na celá čísla. Pro reálná čísla lze funkci volat znovu tentokrát v rozsahu <0-999>. Toto druhé volání představuje desetinnou část čísla s přesností na 3 desetinná čísla, což obvykle bývá pro většinu aplikací dostačující. Násobným voláním funkce v rozsahu <0-999> můžeme získávat vyšší přesnost reálných čísel.
Zobrazeno 4 zpráv z 4.