Rozsiewanie generatora liczb losowych C ++ [duplikat]

To pytanie ma już tutaj odpowiedź:

Jak wygenerować losową liczbę w C ++? 10 odpowiedzi

Mam dwa pytania.

Jakie są inne sposoby rozsiewania generatora liczb losowych w C ++ bez użyciasrand(time(NULL))?

Powód, dla którego zadałem pierwsze pytanie. Obecnie używam czasu jako mojego źródła dla mojego generatora, ale liczba, którą zwraca generator, jest zawsze taka sama. Jestem prawie pewien, że powodem jest to, że zmienna przechowująca czas jest do pewnego stopnia obcinana. (Mam komunikat ostrzegawczy, mówiąc: „Niejawna konwersja traci dokładność całkowitą:„ time_t ”(alias„ długi ”) na„ unsigned int ”). Zgaduję, że to mówi mi, że w istocie moje ziarno nie zmieni się do następnego roku Dla moich celów używanie czasu, jako że moje ziarno będzie działać dobrze, ale nie wiem, jak pozbyć się tego ostrzeżenia.

Nigdy wcześniej nie otrzymałem tego komunikatu o błędzie, więc zakładam, że ma to coś wspólnego z moim komputerem Mac. Jest to 64-bitowy OS X 10.8. Używam także Xcode do pisania i kompilowania, ale nie miałem problemów na innych komputerach z Xcode.

Edytuj: Po zabawie i zbadaniu tego więcej odkryłem błąd, który mają 64-bitowe komputery Mac. (Proszę, popraw mnie, jeśli się mylę.) Jeśli spróbujesz wybrać, aby twój Mac wybrał losową liczbę od 1 do 7, użyjtime(NULL) jako nasienie zawsze otrzymasz numer cztery. Zawsze. Skończyło się na używaniumach_absolute_time() zasiać mój randomizer. Oczywiście eliminuje to wszelką przenośność z mojego programu ... ale jestem tylko hobbystą.

Edit2: Kod źródłowy:

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

using namespace std;

int main(int argc, const char * argv[]) {

srand(time(NULL));

cout << rand() % 7 + 1;

return 0;
}

Ponownie uruchomiłem ten kod, aby go przetestować. Teraz jest tylko powrót 3. To musi mieć coś wspólnego z moim komputerem, a nie z samym C ++.

questionAnswers(2)

yourAnswerToTheQuestion