Witam !
Chciałbym wygenerować 1000, a nawet 20,000 liczb pseudolosowych z przedziału liczby całkowitej - Integer (-2147483648; 2147483647). Za każdym razem po wykonaniu tego kodu:
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <ctime>
using namespace std;
int main(){
fstream myfile;
srand(time(NULL));
myfile.open ("liczby.txt", std::ios::in | std::ios::out);
for(int i=0; i<200; i++){
int liczba = rand() %4294967294 + (-2147483648);
myfile << liczba << "\n";
}
myfile.close();
return 0;
}
W pliku liczby.txt generują mi się podobne liczby ujemne, takie jak:
-2147469643
-2147483188
-2147473308
Analiza:
rand() %4294967294 + (-2147483648);
Liczba 4294967294 to górna granica integera pomnożona przez 2 i od tego odjęta dolna granica, czyli -2147483648 -> żeby nie wyjść poza przedział Integera.
Skrajny przypadek nr 1: wylosowało mi największą liczbę dodatnią i od tej liczby odejmuję właśnie -2147483648
4294967294 -2147483648 = 2147483646, a więc liczba mieści się w przedziale.
Skrajny przypadek nr 2: wylosowało mi najmniejszą liczbę dodatnią i od tej liczby odejmuję właśnie -2147483648
0 -2147483648 = -2147483648, a więc liczba mieści się w przedziale.
Nie wiem, gdzie popełniam błąd. Na koniec dodam, że próbowałem również zakodować ten problem w JAVIE, ale losuje te same duże ujemne liczby.
Z góry dziękuję za pomoc ! =)