Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    [C]Generare numeri unsigned int random

    Salve, stavo provando a simulare l' accesso a una memoria virtuale di 4 GB, con quindi 32 bit come spazio di indirizzamento.
    Il problema è che la funzione rand restituisce numeri interi che arrivano fino a 2 alla 31, mentre vorrei arrivare fino a 2 alla 32, come fare?

  2. #2
    rand() non arriva necessariamente fino a 2^31, a seconda delle implementazioni può fare un po' quel che gli pare, a patto che documenti il suo limite nella macro RAND_MAX (il minimo è 32767). Se tu hai necessità di avere valori casuali nel range preciso [0, 2^32) ti conviene implementarti a manina un LCG con interi a 32 bit senza segno, è un algoritmo molto semplice.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ho capito l' algoritmo su wikipedia, ma non ho idea di come implementarlo in C

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Stavo pensando a come implementare questo LCG, quando mi è venuta una bella idea.
    Ho detto : se il numero generato deve essere a 32 bit, perchè non generarlo in due parti distinte?
    Mi spiego meglio con un esempio:
    codice:
    unsigned int random_number;
    int part1,part2;
    srand ((unsigned) time(NULL));
    part1=rand()%65536;
    part2=rand()%65535;
    random_number=(part1<<16)+part2;
    In questo modo il numero è un intero senza segno grande al massimo (2**32)-1

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 © 2024 vBulletin Solutions, Inc. All rights reserved.