Hvordan generere tilfeldige floats i C ++

Hvordan generere tilfeldige floats i C ++

Flere teknikker kan brukes i C ++ for å produsere Tilfeldige flytere. For en rekke applikasjoner, inkludert simuleringer og å produsere tilfeldige tall for testing, kan det være en fordel å generere Tilfeldige flytere i c++. Denne artikkelen vil gå gjennom forskjellige teknikker for å lage Tilfeldige flytere i c++.

Tilfeldige floatnumre i C++

Tilfeldige flyter kan genereres I C ++ ved å bruke to måter.

    • Bruke Rand () -funksjon
    • Bruker std :: uniform_real_distribution

1: Bruke RAND () -funksjon

Vi kan generere Tilfeldige flytere Ved å bruke C ++ bibliotekets standard Rand () funksjon. Vi kan generere et heltall via Rand () funksjon, konvertere den til en flottør, og bruk den til å generere Tilfeldige flytere. For å gjøre dette, kan vi dele det genererte heltallet med et stort tall for å få et tall mellom 0 og 1. EN Tilfeldig float kan deretter oppnås ved å multiplisere denne verdien med ønsket flytområde. For eksempel kan følgende kode brukes til å produsere en Tilfeldig float mellom 0 og 1:

#inkludere
#inkludere
#inkludere
int main ()

Srand (tid (null));
for (int i = 0; i < 10; i++)
float r = rand () / static_cast(Rand_max);
std :: cout << r << std::endl;

retur 0;


I koden ovenfor, Rand () Funksjon brukes til å generere 10 Tilfeldige flytende punktverdier mellom 0 og 1, og tid() funksjon brukes til å frø den tilfeldige tallgeneratoren. De Rand () Metoden genererer et tall som er helt tilfeldig og ligger mellom 0 og rand_max. For å garantere at den tilfeldige tallsekvensen er unik hver gang programmet kjøres, Srand (Time (NULL)) Funksjon skaper frøet for den tilfeldige tallgeneratoren avhengig av gjeldende tid.

Produksjon



Imidlertid å bruke Rand () teknikk for å generere Tilfeldige flytere har en rekke begrensninger. Tallene er ikke virkelig tilfeldige, ettersom en algoritme ble brukt for å generere dem. Fordelingen av verdiene som genereres er heller ikke ensartet siden visse verdier produseres oftere enn andre.

2: Bruke std :: uniform_real_distribution

Å bruke C ++ 11 tilfeldig bibliotek er en ekstra metode for å produsere Tilfeldige flytere. For å produsere tilfeldige antall forskjellige slag, tilbyr dette biblioteket flere distribusjoner. Vi kan bruke uniform_real_distribution distribusjon for å produsere Tilfeldige flytere. Denne distribusjonen produserer Tilfeldige flytere Innenfor et gitt område ved bruk av to argumenter: en minimumsverdi og en maksimal verdi.

Ta en titt på denne koden for å generere Tilfeldige flytere ved hjelp av uniform_real_distribution.

#inkludere
ved hjelp av navneområdet STD;
int main ()

standard_random_engine rand_number;
uniform_real_distribution distribusjon (0.0,5.0);
for (int i = 1; i < 10; i++)
cout << distribution(rand_number) << '\n';

retur 0;


I koden ovenfor bruker vi det tilfeldige biblioteket som oppretter 5 Tilfeldig flytende punkt verdier mellom 0 og 4. Den genererer en jevn distribusjonsobjektfordeling med et område på [0.0, 5.0] og en standard tilfeldig tallmotorobjekt rand_number. For Loop bruker distribusjonsobjektet og genmotoren for å produsere 5 tilfeldige heltall, og bruker deretter cout å vise dem på konsollen.

Produksjon



Problemet med å bruke std :: uniform_real_distribution er at vi ikke klarer å produsere noen tilfeldige sekvenser, noe som resulterer i lignende sekvenser hver gang. Frekvensen eller sannsynligheten i et spesifikt område kan beregnes ved å bruke denne tilnærmingen, men over et stort antall tester.

Konklusjon

I C ++ er det flere tilnærminger å produsere Tilfeldige flytere. En strategi kan være mer passende enn de andre avhengig av omstendighetene. Den enhetlige virkelige distribusjonsklassen i C ++ 11 tilfeldig bibliotek gir en medlemsfunksjon som genererer enhetlig distribuerte kontinuerlige verdier eller tilfeldige reelle tall fra et inngangsområde. De Rand () Funksjon tilbyr en enkel metode for å produsere Tilfeldige flytere. Den valgte teknikken vil til slutt avhenge av programmererens behov og kravene til programvaren deres.