• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Losowanie liczb z przediału 1 - 1 000 000 000

Object Storage Arubacloud
+1 głos
1,473 wizyt
pytanie zadane 29 maja 2016 w C i C++ przez sim_sony Początkujący (310 p.)

Witam, chcę wylosować liczby z przedziału od 1 do 1 000 000 000. Używam funkcji srand() oraz rand(), ale problem polega na tym, że wylosowane liczby nie przekraczają pięciu cyfr długości, a do miliarda trochę brakuje...

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

int main()
{
    srand(time(NULL));
    while (true)
        cout << rand()%1000000000+1 << endl;
}

W jaki inny sposób wylosować liczbę z tak ogromnego przedziału?

3 odpowiedzi

+1 głos
odpowiedź 29 maja 2016 przez Radfler VIP (101,030 p.)
edycja 29 maja 2016 przez Radfler
 
Najlepsza

Sprawdź jaką wartość ma rozwinięcie makra RAND_MAX.

cout << RAND_MAX << '\n';

Możliwe, że ta wartość jest niewystarczająca do uzyskania dużych liczb.

#PS Spróbuj zapoznać się z biblioteką random.

#include <iostream>
#include <random>
 
using namespace std;
 
int main()
{
	mt19937 generator(random_device{}());
	
	uniform_int_distribution<> distro(0, 1'000'000'000);
	
    while(true) {
        cout << distro(generator) << '\n';
	}
}
1
komentarz 29 maja 2016 przez sim_sony Początkujący (310 p.)

RAND_MAX miało 32767, ale użyłem random i śmiga :)

1
komentarz 29 maja 2016 przez Radfler VIP (101,030 p.)
edycja 29 maja 2016 przez Radfler
Dobra, super. Jakbyś chciał dowiedzieć się więcej o generowaniu liczb losowych w C++, to masz tu referencję: http://en.cppreference.com/w/cpp/numeric/random.
+1 głos
odpowiedź 29 maja 2016 przez niezalogowany

Maksymalna wartość możliwa do wylosowania jest określana przez RAND_MAX i wynosi ona 0x7FFF. Masz 2 wyjścia:

1.(Zalecane) Użyj biblioteki random

2. Funkcja która zwróci ci liczbę od 0x0 do 0xFFFFFFFF

unsigned int rand32byte(){
  return (unsigned int)rand() | ((unsigned int)rand()<<15) | ((unsigned int)rand()<<30);
}

 

0 głosów
odpowiedź 29 maja 2016 przez DragonCoder Nałogowiec (36,500 p.)
Chodzi o zakres. Stwórz zmienną, która to pomieści.

Link co do wielkości zmiennych>

http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Pojecie-zmiennej-i-podstawowe-typy-danych/11

Podobne pytania

0 głosów
1 odpowiedź 548 wizyt
pytanie zadane 30 listopada 2016 w C i C++ przez Dynamic Bywalec (2,910 p.)
+1 głos
1 odpowiedź 324 wizyt
pytanie zadane 4 lutego 2021 w C i C++ przez NukaNuka56 Obywatel (1,080 p.)
0 głosów
1 odpowiedź 647 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...