Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C++] curiosità rand

  1. #1

    [C++] curiosità rand

    salve a tutti!
    la mia è una semplice curiosità: nel c++ per generare numeri casuali è necessario usare due funzioni:
    - la prima è la srand() definita nella standard template library che ha come parametro la funzione time che a sua volta ha parametro NULL( o 0 ). già qui mi piacerebbe sapere a livello macchina cosa fa questa funzione
    -la seconda è la rand() che genera un numero totalmente casuale tra 0 e RAND_MAX.
    qualcuno ha idea di come potrebbe essere fatto un algoritmo di numeri pseudocasuali( sempre a livello macchina)

    e quindi se un numero con la srand varia dipendentemente dal tempo significa che se io lancio un programma allo stesso anno, mese, giorno e stessa ora i numeri casuali generati dovrebbero essere identici? o sbaglio?

    grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    I valori non sono casuali ma pseudocasuali ovvero sono estratti da una sequenza riproducibile ma abbastanza lunga.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da maluz1 Visualizza il messaggio
    salve a tutti!
    - la prima è la srand() definita nella standard template library che ha come parametro la funzione time
    No. srand() non ha come parametri la funzione time ma un semplice unsigned int.

    Il fatto che si passi sempre time(NULL) è per avere un punto di partenza diverso all'interno della sequenza.

    http://www.cplusplus.com/reference/cstdlib/srand/
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Normalmente la coppia srand/rand implementa un semplice generatore lineare congruenziale (LCG). Per il seed iniziale di solito si usa l'output di time(NULL) (ovvero, la data/ora corrente, espressa in secondi dall'1/1/1970) perché è un input che (ragionevolmente) cambia ad ogni avvio del programma.
    Ultima modifica di MItaly; 30-09-2013 a 17:19
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    vi sono molto grato per la vostra disponibilità, quindi grazie mille a tutti per le vostre spiegazioni

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.