Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
Pensato per il professionista sempre in movimento, HP Elitebook Ultra G1i 14 abbina una piattaforma Intel Core Ultra 7 ad una costruzione robusta, riuscendo a mantenere un peso contenuto e una facile trasportabilità. Ottime prestazioni per gli ambiti di produttività personale con un'autonomia lontano dalla presa di corrente che permette di lavorare per tutta la giornata
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Basato su piattaforma Qualcomm Snapdragon X Plus a 8 core, il nuovo Microsoft Surface Pro 12 è un notebook 2 in 1 molto compatto che punta sulla facilità di trasporto, sulla flessibilità d'uso nelle differenti configurazioni, sul funzionamento senza ventola e sull'ampia autonomia lontano dalla presa di corrente
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet!
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet!
Il REDMAGIC Astra Gaming Tablet rappresenta una rivoluzione nel gaming portatile, combinando un display OLED da 9,06 pollici a 165Hz con il potente Snapdragon 8 Elite e un innovativo sistema di raffreddamento Liquid Metal 2.0 in un form factor compatto da 370 grammi. Si posiziona come il tablet gaming più completo della categoria, offrendo un'esperienza di gioco senza compromessi in mobilità.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-02-2010, 20:17   #1
h1jack3r
Senior Member
 
L'Avatar di h1jack3r
 
Iscritto dal: May 2002
Città: somewhere in Europe
Messaggi: 2554
generazione di numeri casuali

Credo che il problema della generazione di numeri casuali (pseudo-casuali) sia ben noto a tutti qui.
Riassumendo, in programmazione oggigiorno se si ha la necessita' di generare un numero casuale si usera' una funzione generatrice che non generera' numeri perfettamente casuali bensi' una serie di numeri che avranno una frequenza di ripetizione molto bassa.

La mia domanda e': in linguaggi come il C quando si inizializza una variabile dentro ci saranno dei valori "strani", possono essere considerati casuali?
Intuitivamente mi rispondo da solo: No, perche' prima probabilmente c'era un programma che scriveva nello stesso spazio di memoria, per cui mettiamo caso che un programma scrivesse tutti 1111 in quella zona di memoria trovero' ancora delgi 1111

Ma se alloco della memoria prima di ogni altro processo, che valori trovero' in RAM? Si potrebbero definire casuali?

la vostra
h1jack3r è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 20:25   #2
Kevvort
Member
 
L'Avatar di Kevvort
 
Iscritto dal: Jul 2008
Città: Reggio Emilia
Messaggi: 290
Quote:
Originariamente inviato da h1jack3r Guarda i messaggi
Credo che il problema della generazione di numeri casuali (pseudo-casuali) sia ben noto a tutti qui.
Riassumendo, in programmazione oggigiorno se si ha la necessita' di generare un numero casuale si usera' una funzione generatrice che non generera' numeri perfettamente casuali bensi' una serie di numeri che avranno una frequenza di ripetizione molto bassa.

La mia domanda e': in linguaggi come il C quando si inizializza una variabile dentro ci saranno dei valori "strani", possono essere considerati casuali?
Intuitivamente mi rispondo da solo: No, perche' prima probabilmente c'era un programma che scriveva nello stesso spazio di memoria, per cui mettiamo caso che un programma scrivesse tutti 1111 in quella zona di memoria trovero' ancora delgi 1111

Ma se alloco della memoria prima di ogni altro processo, che valori trovero' in RAM? Si potrebbero definire casuali?

la vostra
Al massimo i valori "strani" che trovi nella variabile sono frutto dell'azione di un programma che ha usato quelle celle della RAM ma che poi ha dichiarato come libera. Quindi quando un programma/processo accede alla RAM in modo ovviamente casuale lascia poi lo "sporco" che ha creato, quindi direi che i valori che potresti ottenere sono casuali. [correggetemi se ho detto fesserie]

Ma perchè non usare la funzione random()?
Kevvort è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 20:32   #3
h1jack3r
Senior Member
 
L'Avatar di h1jack3r
 
Iscritto dal: May 2002
Città: somewhere in Europe
Messaggi: 2554
Quote:
Originariamente inviato da Kevvort Guarda i messaggi
Al massimo i valori "strani" che trovi nella variabile sono frutto dell'azione di un programma che ha usato quelle celle della RAM ma che poi ha dichiarato come libera. Quindi quando un programma/processo accede alla RAM in modo ovviamente casuale lascia poi lo "sporco" che ha creato, quindi direi che i valori che potresti ottenere sono casuali. [correggetemi se ho detto fesserie]

Ma perchè non usare la funzione random()?
se rileggi c'e' tutto scritto solo in maniera un po' confusionaria...
la funzione random() non restituisce dei valori casuali ma pseudo-casuali. Il che vuol dire che restituisce delle sequenze di numeri che si ripetono.
ad esempio 10 - 2 - 187 (dopo moltissimi numeri ritroverai la stessa sequenza esattamente come all'inizio)
h1jack3r è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 20:32   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2773
Quote:
Originariamente inviato da h1jack3r Guarda i messaggi
Credo che il problema della generazione di numeri casuali (pseudo-casuali) sia ben noto a tutti qui.
Riassumendo, in programmazione oggigiorno se si ha la necessita' di generare un numero casuale si usera' una funzione generatrice che non generera' numeri perfettamente casuali bensi' una serie di numeri che avranno una frequenza di ripetizione molto bassa.

La mia domanda e': in linguaggi come il C quando si inizializza una variabile dentro ci saranno dei valori "strani", possono essere considerati casuali?
Intuitivamente mi rispondo da solo: No, perche' prima probabilmente c'era un programma che scriveva nello stesso spazio di memoria, per cui mettiamo caso che un programma scrivesse tutti 1111 in quella zona di memoria trovero' ancora delgi 1111

Ma se alloco della memoria prima di ogni altro processo, che valori trovero' in RAM? Si potrebbero definire casuali?

la vostra
Credo che la cosa più logica sarebbe trovare tutti zeri. Comunque immagino dipenda dall'architettura dell'elaboratore.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 20:38   #5
Kevvort
Member
 
L'Avatar di Kevvort
 
Iscritto dal: Jul 2008
Città: Reggio Emilia
Messaggi: 290
Quote:
Originariamente inviato da h1jack3r Guarda i messaggi
se rileggi c'e' tutto scritto solo in maniera un po' confusionaria...
la funzione random() non restituisce dei valori casuali ma pseudo-casuali. Il che vuol dire che restituisce delle sequenze di numeri che si ripetono.
ad esempio 10 - 2 - 187 (dopo moltissimi numeri ritroverai la stessa sequenza esattamente come all'inizio)
Uhm si è vero
Probabilmente la sequenza si ripete perchè la funzione random() legge un registro della CPU, forse quello degli indirizzi, non ricordo

Ma perchè ti servono numeri così tanto, passami il termine, casuali?
Kevvort è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 20:50   #6
h1jack3r
Senior Member
 
L'Avatar di h1jack3r
 
Iscritto dal: May 2002
Città: somewhere in Europe
Messaggi: 2554
Quote:
Originariamente inviato da Kevvort Guarda i messaggi
Uhm si è vero
Probabilmente la sequenza si ripete perchè la funzione random() legge un registro della CPU, forse quello degli indirizzi, non ricordo

Ma perchè ti servono numeri così tanto, passami il termine, casuali?
no e' proprio una funzione matematica, non legge da nessuna parte.
I numeri casuali servono in generale in informatica, ad esempio sono usati molto in sicurezza per generare chiavi sicure.
h1jack3r è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 20:52   #7
h1jack3r
Senior Member
 
L'Avatar di h1jack3r
 
Iscritto dal: May 2002
Città: somewhere in Europe
Messaggi: 2554
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Credo che la cosa più logica sarebbe trovare tutti zeri. Comunque immagino dipenda dall'architettura dell'elaboratore.
parliamo di macchine consumer, le solite architetture x86 x64.
h1jack3r è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 20:59   #8
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2773
Quote:
Originariamente inviato da h1jack3r Guarda i messaggi
parliamo di macchine consumer, le solite architetture x86 x64.
Non saprei però dove cercare, o comunque credo sia una ricerca un po' onerosa, spero ci sia qualcuno che sappia già la risposta.
Ho detto tutti zeri andando a logica, non vedo perché all'accensione la ram dovrebbe contenere dei valori (ma soprattutto perché diversi ad ogni accensione). Ovviamente è una mia ipotesi.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 21:09   #9
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12814
Come già detto quando scrivi:

int a;

il sistema riserva una area di memoria (sullo stack) che risulta "libera".

Ogni processo ha la sua area per lo stack e per l'heap (l'area di memoria dinamica).

Chiaramente quando una locazione di memoria non ti serve più (magari perché chiami una free o termini il processo) il sistema non perde tempo a riscriverci "0".

All'avvio del sistema succedono molte cose tra cui caricamento di eseguibili vari in memoria per cui è possibile che tu trova locazioni di memoria "sporche".

I generatori pseudo-casuali possono essere di diverso tipo, quelli più usati comunemente dovrebbero essere quelli che sfruttano il meccanismo delle congruenze lineari (sostanzialmente si basano sui resti delle divisioni modulo 2^31, maggiore è il modulo usato maggiore sarà il periodo di ripetizione, tuttavia dipendono anche dai semi e da altri parametri).

Notare che la divisione per una potenza di 2 è facilmente ottenibile facendo uno shift di bit a destra:

Se ho in binario 100 (4), dividerlo per 2 significa shiftare l'1 di una posizione:

10 (2)

Questo li rende abbastanza efficienti da implementare.

Cmq mi sembra che Linux disponga di un device virtuale particolare da cui estrarre numeri pseudo-casuali basati sul rumore dei segnali elettro-magnetici.

Questo dovrebbe renderlo molto efficacie.

Edit: trovato -> http://en.wikipedia.org/wiki//dev/random

Ultima modifica di WarDuck : 23-02-2010 alle 21:12.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 21:17   #10
h1jack3r
Senior Member
 
L'Avatar di h1jack3r
 
Iscritto dal: May 2002
Città: somewhere in Europe
Messaggi: 2554
grazie WarDuck, so bene come funziona la generazione di numeri casuali classica.

La domanda si concentra di piu' su "cosa c'e' nella memoria all'avvio?"
Abbiamo tutti zero o valori spuri?
h1jack3r è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 21:59   #11
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da h1jack3r Guarda i messaggi
La domanda si concentra di piu' su "cosa c'e' nella memoria all'avvio?"
Abbiamo tutti zero o valori spuri?
parlando di Windows e degli eseguibili nel relativo formato (PE), abbiamo tutti zeri. se in un programma per Windows scritto in C tu non inizializzi una variabile globale, questa risulta nulla.
per quanto riguarda quelle locali il discorso é piu complesso: anche le pagine di stack sono inizializzate a zero, ma spesso una variabile locale non inizializzata assume valori "strani" perché prima dell'invocazione del tuo main é avvenuta l'invocazione dell'entry point del runtime linkato staticamente al tuo programma, il quale ha usato diverse pagine di stack scrivendoci dati arbitrari.

ad ogni modo il sistema che tu ipotizzi non é di certo un sistema crittograficamente sicuro. la caratteristica fondamentale di un buon generatore di numeri pseudocasuali non é quella di generare numeri che si ripetono con frequenze molto basse, ma quella di generare numeri impredicibili da una macchina polinomiale.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 22:05   #12
h1jack3r
Senior Member
 
L'Avatar di h1jack3r
 
Iscritto dal: May 2002
Città: somewhere in Europe
Messaggi: 2554
Quote:
Originariamente inviato da fero86 Guarda i messaggi
parlando di Windows e degli eseguibili nel relativo formato (PE), abbiamo tutti zeri. se in un programma per Windows scritto in C tu non inizializzi una variabile globale, questa risulta nulla.
per quanto riguarda quelle locali il discorso é piu complesso: anche le pagine di stack sono inizializzate a zero, ma spesso una variabile locale non inizializzata assume valori "strani" perché prima dell'invocazione del tuo main é avvenuta l'invocazione dell'entry point del runtime linkato staticamente al tuo programma, il quale ha usato diverse pagine di stack scrivendoci dati arbitrari.

ad ogni modo il sistema che tu ipotizzi non é di certo un sistema crittograficamente sicuro. la caratteristica fondamentale di un buon generatore di numeri pseudocasuali non é quella di generare numeri che si ripetono con frequenze molto basse, ma quella di generare numeri impredicibili da una macchina polinomiale.

la mia idea molto brutalmente sarebbe quella di fare un dump della memoria fisica senza avere un OS installato (se mai fosse possibile, o all'avvio dell'OS) per poter vedere che valori ci sono dentro.
h1jack3r è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2010, 22:48   #13
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da h1jack3r Guarda i messaggi
la mia idea molto brutalmente sarebbe quella di fare un dump della memoria fisica senza avere un OS installato (se mai fosse possibile, o all'avvio dell'OS) per poter vedere che valori ci sono dentro.
ah, capito, era una domanda di livello molto piu ingegneristico.

dunque, so per certo che i flip-flop, non appena pigliano corrente, partono a fantasia (ho avuto esperienze pratiche in merito), cioé si trovano in stato non affidabile dettato solo da condizioni esterne/ambientali troppo aleatorie e difficili da prevedere, e quindi la tua idea costituirebbe in effetti un sistema crittograficamente sicuro (anche se un po' curioso).

tuttavia la cosa ha ancora delle dipendenze: dipende dall'architettura hardware e dalla specifica implementazione; per esempio in un'architettura hardware potrebbe essere richiesto che tutta la RAM venga azzerata all'accensione e, se anche non fosse richiesto, la specifica implementazione (la realizzazione, i circuiti insomma) potrebbe farlo lo stesso.

il motivo per cui prima dicevo che come sistema é un po' curioso é che l'uomo ha a disposizione dei sistemi matematici abbastanza affidabili per generare sequenze pseudocasuali piuttosto che affidarsi allo stato aleatorio di un circuito che subisce i fattori fisici dell'ambiente circostante.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2010, 08:23   #14
h1jack3r
Senior Member
 
L'Avatar di h1jack3r
 
Iscritto dal: May 2002
Città: somewhere in Europe
Messaggi: 2554
Quote:
Originariamente inviato da fero86 Guarda i messaggi

il motivo per cui prima dicevo che come sistema é un po' curioso é che l'uomo ha a disposizione dei sistemi matematici abbastanza affidabili per generare sequenze pseudocasuali piuttosto che affidarsi allo stato aleatorio di un circuito che subisce i fattori fisici dell'ambiente circostante.

ti sei risposto da solo: abbatanza affidabili VS stato aleatorio
Dovessi scegliere sceglierei stato aleatorio
Comunque ieri sera ho trovato un paper di un tizio che dumpava la memoria dopo qualche minuto che il pc era spento e ci trovava ancora i valori che erano stati settati dall'OS...guardero' meglio questa sera.
h1jack3r è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso Microsoft Surface Pro 12 è il 2 in 1 pi&u...
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet! Recensione REDMAGIC Astra Gaming Tablet: che spe...
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2 Dopo un mese, e 50 foto, cosa abbiamo capito del...
Gigabyte Aero X16 Copilot+ PC: tanta potenza non solo per l'IA Gigabyte Aero X16 Copilot+ PC: tanta potenza non...
Lenovo Legion Go 2 mostrata in un video:...
iOS 26 Beta 4, torna il Liquid Glass! Ec...
Degrado batteria, ottime notizie anche p...
Un hard disk esterno Seagate da 20TB a 3...
GeForce RTX 5080, 5060 Ti e Radeon RX 90...
Sconti oggi sugli SSD Orico PCIe Gen.4 d...
Prezzo crollato per le Samsung Galaxy Bu...
MetaMask, bug nel wallet crypto: distrug...
Motorola edge 50 Neo 12/512GB o edge 60 ...
Dick Pic addio? L'AI di Flirtini insegna...
WhoFi: riconoscimento biometrico tramite...
Zero-day SharePoint: Microsoft punta il ...
Grab & Go, il nuovo Telepass per chi...
Primo chip quantistico con elettronica e...
Da Microsoft due nuovi Surface Laptop 5G...
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: 08:46.


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