Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Al .NEXT 2026 di Chicago, Nutanix ha mostrato quanto sia cambiata: una piattaforma software che gestisce VM, container e carichi di lavoro IA ovunque, dall’on-premise al cloud pubblico. Con un’esecuzione rapidissima sulle partnership e sulla migrazione da VMware
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-01-2012, 08:51   #1
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
[C] funzione rand()

Ho bisogno di fare il programma stupido del lancio della moneta, ho provato ad utilizzare la rand(), ma purtroppo ad ogni run del programma, mi genera lo stesso numero e quindi esce sempre croce, com'è possibile sto fatto? come faccio a generare numeri diversi all'interno di un intervallo da me imposto??
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 10:43   #2
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
Prima di usare la rand() prova a chiamare la srand() in questo modo:
Codice:
srand ( time(NULL) );
Ricordati di includere time.h
Codice:
#include <time.h>
La srand() puoi chiamarla una volta sola all'inizio del main (per esempio). Ha lo scopo di inizializzare il seme del generatore di numeri causali, in questo caso utilizzando un'informazione imprevedibile presa dall'orologio di sistema. Così ogni volta che avvii il programma dovrebbe avere valore diverso e i successivi usi di rand() danno valori diversi ad ogni esecuzione. Spero di ricordare bene
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 10:46   #3
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da Mettiu_ Guarda i messaggi
Prima di usare la rand() prova a chiamare la srand() in questo modo:
Codice:
srand ( time(NULL) );
Ricordati di includere time.h
Codice:
#include <time.h>
La srand() puoi chiamarla una volta sola all'inizio del main (per esempio). Ha lo scopo di inizializzare il seme del generatore di numeri causali, in questo caso utilizzando un'informazione imprevedibile presa dall'orologio di sistema. Così ogni volta che avvii il programma dovrebbe avere valore diverso e i successivi usi di rand() danno valori diversi ad ogni esecuzione. Spero di ricordare bene
si è giusto, ricordi bene. ma a me serve generare dei valori diversi in un range e con la srand non si può fare.
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 10:50   #4
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
Anche questo è fattibile.
Se vuoi generare un numero casuale compreso tra 0 e 99 (per esempio) devi fare:
Codice:
int num_casuale = rand() % 100;
L'operatore % (modulo) ritorna il resto della divisione intera tra il risultato di rand() e 100 quindi al max 99. Sta a te adattare l'esempio al tuo caso.
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 11:17   #5
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da Mettiu_ Guarda i messaggi
Anche questo è fattibile.
Se vuoi generare un numero casuale compreso tra 0 e 99 (per esempio) devi fare:
Codice:
int num_casuale = rand() % 100;
L'operatore % (modulo) ritorna il resto della divisione intera tra il risultato di rand() e 100 quindi al max 99. Sta a te adattare l'esempio al tuo caso.
ma sai cosa? che ho provato a fare così ma genera sempre gli stessi identici numeri, infatti ho provato a fare anche qualche ciclo di generazione, vengono sempre fuori i soliti numeri , non cambiano, come mai??
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 11:25   #6
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
strano...
Puoi postare il codice "incriminato"?
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 13:52   #7
__ZERO_UNO__
Member
 
L'Avatar di __ZERO_UNO__
 
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
Scrivere rand() % 100 non ha alcun senso perchè rand() genera numeri reali compresi fra 0 e 1 e quindi il risultato di quell'espressione sarà sempre rand().
Se ho capito bene quello che vuoi fare (simulare il lancio di una moneta) puoi fare così:

Codice:
u = rand();
if u <= 0.5
  risultato = croce;
else
  risultato = testa;
per avere un singolo lancio. Se continui ad avere sempre lo stesso risultato controlla bene che ad ogni iterazione venga nuovamente "estratto" il numero casuale qui definito come u.
Per quanto riguarda l'estrazione di numeri casuali da un intervallo ti invito a leggere questo breve post http://www.hwupgrade.it/forum/showthread.php?t=2435128
__________________

AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB
Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX
Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200

Ultima modifica di __ZERO_UNO__ : 14-01-2012 alle 13:56.
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 14:00   #8
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
Quote:
Originariamente inviato da __ZERO_UNO__ Guarda i messaggi
Scrivere rand() % 100 non ha alcun senso perchè rand() genera numeri reali compresi fra 0 e 1
Ma anche no... rand() genera numeri casuali tra 0 e la costante RAND_MAX (definita in qualche header file che non ricordo)...
Infatti rand torna un int, mica un numero in virgola!
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield

Ultima modifica di Mettiu_ : 14-01-2012 alle 14:03.
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 14:03   #9
__ZERO_UNO__
Member
 
L'Avatar di __ZERO_UNO__
 
Iscritto dal: Jul 2009
Città: Milano
Messaggi: 270
Hai perfettamente ragione. Avevo dimenticato che si sta parlando di C.
Chiedo venia.
__________________

AMD PII x4 955 BE | Sapphire HD4850 Vapor-X 1 GB | Samsung SpinPoint F1 500GB | Samsung EcoGreen F4 2TB
Gigabyte GA-MA790FXT-UD5P | Fractal Design Define R3 USB3.0 Titanium Grey | CORSAIR 650W CMPSU-650TX
Noctua U12P SE2 | 2 x 2GB Kingston 1333 MHz | Samsung SyncMaster P2450 | Samsung SyncMaster T200
__ZERO_UNO__ è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2012, 16:48   #10
mesonepigreco
Member
 
L'Avatar di mesonepigreco
 
Iscritto dal: Oct 2011
Messaggi: 48
rand viene sconsigliato nell'uso (chiaramente se si tratta del lancio della monetina va bene) ma se vuoi usare il programma per stimare la percentuale di volte che esce testa, e quella che esce croce su un numero di eventi molto grande e ottenere stime precise (che sarebbe una cosa stupida con la monetina visto che si sa che è del 50 %, ma interessante in un infinità di altri casi) conviene usare lrand48() si inizializza in questo modo:

Codice:
#include <stdlib.h>
#include <time.h>

int main() {
   srand48(time(0)); // Inizializzazione del generatore di numeri casuali
.... codice ...
}

double FloatRandomNumber(double min, double max) {
   return min + (max - min) * lrand48() / (double) RAND_MAX;
}

int IntRandomNumber(int min, int max) {
   return min + lrand48() % (max - min + 1);
}
A questo punto puoi chiamare le due funzioni, la prima genera un numero casuale decimale in un intervallo dato, la seconda un intero. Con qualche accorgimento puoi migliorare ulteriormente la prima per fargli dire se non includere gli estremi dell'intervallo. Il casting a double su RAND_MAX occorre perché altrimenti lrand48() / RAND_MAX risulta una divisione tra interi, quindi il risultato è un intero, poiche lrand48() è sempre minore di RAND_MAX (tranne che in un caso su circa quattromiliardi o giù di li, dipende dalla cpu) quella divisione fa 0 e quindi salta tutto.
mesonepigreco è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 09:58   #11
melko
Member
 
L'Avatar di melko
 
Iscritto dal: Feb 2011
Messaggi: 46
Quote:
Originariamente inviato da mesonepigreco Guarda i messaggi
rand viene sconsigliato nell'uso (chiaramente se si tratta del lancio della monetina va bene) ma se vuoi usare il programma per stimare la percentuale di volte che esce testa, e quella che esce croce su un numero di eventi molto grande e ottenere stime precise (che sarebbe una cosa stupida con la monetina visto che si sa che è del 50 %, ma interessante in un infinità di altri casi) conviene usare lrand48() si inizializza in questo modo:
sicuro?
io nel man di lrand48 (che include anche drand48, erand48, lrand48, nrand48, mrand48, jrand48) leggo:
These functions are declared obsolete by SVID 3, which states that rand(3) should be used instead.

poi nel man di rand:
The versions of rand() and srand() in the Linux C Library use the same random number generator as random(3) and srandom(3), so the lower-order bits should be as random as the higher-order bits. However, on older rand() implementations, and on current implementations on different systems, the lower-order bits are much less random than the higher-order bits. Do not use this function in applications intended to be portable when good randomness is needed. (Use random(3) instead.)
melko è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 11:06   #12
mesonepigreco
Member
 
L'Avatar di mesonepigreco
 
Iscritto dal: Oct 2011
Messaggi: 48
In genere rand viene sconsigliata in genere perché in aclune vecchie implementazioni non ha una grande precisione. lrand48() e simili sono sconsigliate se devono essere all'interno di algoritmi di sicurezza, poiché sono facilmente violabili (da questo punto di vista penso siano obsolete). Nel manuale Practical UNIX & internet security ho trovato questo:
Quote:
23.7.1 rand ( )

The original UNIX random number generator, rand( ) , is not a very good random number generator. It uses a 32-bit seed and maintains a 32-bit internal state. The output of the function is also 32 bits in length, making it a simple matter to determine the function's internal state by examining the output. As a result, rand( ) is not very random. Furthermore, the low-order bits of some implementations are not random at all, but flip back and forth between 0 and 1 according to a regular pattern. The rand( ) random number generator is seeded with the function srand( ) . On some versions of UNIX, a third function is provided, rand_r( ) , for multi threaded applications. (The function rand( ) itself is not safe for multi- threading, as it maintains internal state.)

Do not use rand( ) , even for simple statistical purposes.
23.7.2 random ( )

The function random( ) is a more sophisticated random number generator which uses nonlinear feedback and an internal table that is 124 bytes (992 bits) long. The function returns random values that are 32 bits in length. All of the bits generated by random( ) are usable.

The random( ) function is adequate for simulations and games, but should not be used for security related applications such as picking cryptographic keys or simulating one- time pads.
23.7.3 drand48 ( ), lrand48 ( ), and mrand48 ( )

The function drand48( ) is one of many functions which make up the System V random number generator. According to the Solaris documen- tation, the algorithm uses "the well-known linear congruential algorithm and 48-bit integer arithmetic." The function drand48( ) returns a double-precision number that is greater or equal to 0.0 and less than 1.0, while the lrand48( ) and mrand48( ) functions return random numbers within a specified integer range. As with random( ) , these functions provide excellent random numbers for simulations and games, but should not be used for security-related applications such as picking cryptographic keys or simulating one-time pads; linear congruential algorithms are too easy to break.
__________________
Opok il nuovo gioco open source ispirato ai Pokemon (fatto da me ;-D) (http://sourceforge.net/projects/opok/):
mesonepigreco è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 11:52   #13
melko
Member
 
L'Avatar di melko
 
Iscritto dal: Feb 2011
Messaggi: 46
Quote:
Originariamente inviato da mesonepigreco Guarda i messaggi
In genere rand viene sconsigliata in genere perché in aclune vecchie implementazioni non ha una grande precisione. lrand48() e simili sono sconsigliate se devono essere all'interno di algoritmi di sicurezza, poiché sono facilmente violabili (da questo punto di vista penso siano obsolete). Nel manuale Practical UNIX & internet security ho trovato questo:
da quanto ho visto, per gli algoritmi di sicurezza, in genere viene usata /dev/random (almeno su unix), per il resto random() dovrebbe andare abbastanza bene ed evitare il problema di rand() con le vecchie rappresentazioni
melko è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 16:24   #14
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da melko Guarda i messaggi
da quanto ho visto, per gli algoritmi di sicurezza, in genere viene usata /dev/random (almeno su unix), per il resto random() dovrebbe andare abbastanza bene ed evitare il problema di rand() con le vecchie rappresentazioni
sinceramente non mi interessano molto ora gli algoritmi di sicurezza, più che altro, non mi viene ancora per bene il lancio della monetina :d
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 16:39   #15
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
Quote:
Originariamente inviato da tecno789 Guarda i messaggi
sinceramente non mi interessano molto ora gli algoritmi di sicurezza, più che altro, non mi viene ancora per bene il lancio della monetina :d
Continuo a non capire qual'è il problema
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char* argv[])
{
    srand(time(0));
    int numero_casuale = rand() % 2;
    // numero_casuale vale 1 oppure 0
    if(numero_casuale == 0)
        printf("TESTA\n");
    else
        printf("CROCE\n");
    system("PAUSE");
    return 0;
}
A me sembra sufficiente una cosa simile... Lanci imprevedibili ad ogni esecuzione! Forse preferisci il dollaro anzichè l'euro come moneta da lanciare?
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 17:20   #16
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
Se ripeti l'esecuzione velocemente viene sempre lo stesso risultato per un secondo, a causa di time che da un risultato in secondi: ipotizzo possa essere questo il problema...

Se si vogliono fare più estrazioni si devono fare in un ciclo dopo l'inizializzazione del seme random.
Resta che se si rilancia il programma nello stesso secondo si otterranno gli stessi risultati, ma direi che è una pignoleria un po' esagerata per questo caso.

Per completezza riporto anche un veloce esempio di aumento precisione temporale del seme iniziale (GNU/Linux \ BSD):
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char* argv[])
{
    timespec ts;
    clock_gettime(CLOCK_MONOTONIC, &ts); 
    srand(ts.tv_nsec);  //Usando solo i nanosecondi della struttura è possibile
                        //che si reinizializzi il seme allo stesso valore

    int numero_casuale = rand() % 2;
    // numero_casuale vale 1 oppure 0
    if(numero_casuale == 0)
        printf("TESTA\n");
    else
        printf("CROCE\n");
    return 0;
}
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 17:26   #17
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
ma non si può fare un algoritmo che non dipenda dal tempo??
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 18:18   #18
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
Certo, basta trovare un'altro valore casuale che sia sempre diverso... ok, a quel punto non serve più rand.
Oppure un'altro valore che sia costantemente crescente; se non interessa la sicurezza potrebbe essere il numero assoluto di esecuzioni di quel programma (che occorrerebbe salvare da qualche parte).

Il tempo ha la caratteristica di essere un valore monotono crescente, è quindi perfetto per inizializzare srand a valori sempre diversi, con due limiti:
  • precisione di questa misurazione con ripetizione del seme in esecuzioni ravvicinate
  • overflow del seme se troppo precisa, con ripetizioni periodiche della sequenza dei semi; questo potrebbe creare problemi importanti solo se anche le esecuzioni dovessero avvenire con pattern temporali che si ripetono (usando solo i nanosecondi è più probabile, si dovrebbero prendere un po' di secondi e scalare ai microsecondi o ai millisecondi, ecc...)

Qui arrivano le mie conoscenze in materia, non escludo che mi sfugga qualcosa non essendomi mai interessato molto all'argomento.
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 20:30   #19
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
Anni fa lessi un libro in cui si parlava del cosiddetto "pool di entropia", ovvero di un pozzo che viene riempito dal SO (Linux in quel caso) con dati casuali provenienti da sorgenti di input (tastiera, mouse, interrupt)... Praticamente puoi attingere da questo pozzo per prelevare i bytes che ti servono. Non ho mai usato una cosa del genere ma se vuoi puoi approfondire cerca un pò in rete, partendo da wiki:
http://it.wikipedia.org/wiki//dev/random
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 15-01-2012, 21:07   #20
melko
Member
 
L'Avatar di melko
 
Iscritto dal: Feb 2011
Messaggi: 46
Quote:
Originariamente inviato da Mettiu_ Guarda i messaggi
Anni fa lessi un libro in cui si parlava del cosiddetto "pool di entropia", ovvero di un pozzo che viene riempito dal SO (Linux in quel caso) con dati casuali provenienti da sorgenti di input (tastiera, mouse, interrupt)... Praticamente puoi attingere da questo pozzo per prelevare i bytes che ti servono. Non ho mai usato una cosa del genere ma se vuoi puoi approfondire cerca un pò in rete, partendo da wiki:
http://it.wikipedia.org/wiki//dev/random
è esattamente il /dev/random di cui sopra, vi si può attingere usando fread, ad esempio:
Codice:
void seed_random(){
        /* Lettura di un seed dal device random */
        FILE* seme = fopen("/dev/random","r");
        if(seme == NULL)
                errore("Errore nella lettura del device urandom\n",1);
        if(fread(&seed,3,1,seme) != 1)
                errore("Errore nell'inizializzazione del seed\n",2);
        fclose(seme);
}
dove seed è la variabile da inizializzare con il numero casuale

oltre a /dev/random c'è anche /dev/urandom, che a differenza del primo non si esaurisce mai, ma come c'è scritto nel man:

A read from the /dev/urandom device will not block waiting for more entropy. As a result, if there is not sufficient entropy in the entropy pool, the returned values are theoretically vulnerable to a cryptographic attack on the algorithms used by the driver.
melko è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
L'Iran avrebbe acquistato un satellite p...
VivaTech compie dieci anni e raddoppia p...
Le vendite di CPU si sono ridotte di 25 ...
Starship: SpaceX ha completato lo static...
Huawei FusionSolar Roadshow 2026: l'inno...
Nuovo trailer per Street Fighter: un fil...
Sovranità sui dati: arriva la pri...
Schede video NVIDIA e AMD di nuovo su Ma...
Robot aspirapolvere, TV OLED, iPhone 17 ...
EUREKA J15 Pro Ultra super interessante ...
Intel porta l'AI nei notebook entry-leve...
6000 mAh, 5G e 108MP a meno di 200€: ecc...
FRITZ!Mesh Set 2700: Wi-Fi 7 in tutta la...
Amazfit Cheetah 2 Pro: lo smartwatch per...
Intel, focus su GPU workstation e datace...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:49.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v