Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-06-2004, 00:54   #1
[kiriku]
Member
 
L'Avatar di [kiriku]
 
Iscritto dal: Apr 2003
Città: Milano
Messaggi: 58
C e rand()

gente, mi sono accorto che la funzione rand() restituisce sempre lo stesso valore... nel senso che, è vero, se faccio x esempio un ciclo for e faccio scrivere 100 volte il valore di rand() questo è sempre diverso, ma alla successiva esecuzione del programma i numeri sono gli stesis nello stesso ordine... come faccio a evitare la cosa e ad ottenere numeri diversi ad ogni esecuzione del programma?

graz

ciao
__________________
kiriku - Lastcode Software
www.lastcode.org/kiriku
[kiriku] è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 08:25   #2
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
inizializza il seme con un bell srand(time(NULL)) cosi rand ha il seme dell tempo di sisema che è sempre diverso.
Poi per prendere un num fai rand()%N dove N è il numero massimo che vuoi ottenere


Ciao
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 08:50   #3
[kiriku]
Member
 
L'Avatar di [kiriku]
 
Iscritto dal: Apr 2003
Città: Milano
Messaggi: 58
grazie funziona!

ciao
__________________
kiriku - Lastcode Software
www.lastcode.org/kiriku
[kiriku] è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 10:49   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Una piccola nota rand()%N permette di ottenere interi fra 0 e N-1
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 10:50   #5
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
Quote:
Originariamente inviato da cionci
Una piccola nota rand()%N permette di ottenere interi fra 0 e N-1
hai ragione :P
Hai fatto bene a puntualizzare
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 12:15   #6
kk3z
Senior Member
 
L'Avatar di kk3z
 
Iscritto dal: Nov 2003
Messaggi: 980
grazie mille, serve anche a me
kk3z è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 13:14   #7
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
ragazzi scusate ma non è possibile che se il ciclo for è eseguito molto velocemente il srand(time(NULL)) restituisca sempre lo stesso valore, perchè il time(NULL) restituisce sempre lo stesso valore, o questo pericolo non sussiste?

Ultima modifica di VegetaSSJ5 : 07-06-2004 alle 13:49.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 13:20   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Il pericolo sussiste...infatti srand(time(NULL)) va fatto una sola volta all'interno di tutto il programma !!!
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 13:47   #9
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da cionci
Il pericolo sussiste...infatti srand(time(NULL)) va fatto una sola volta all'interno di tutto il programma !!!
cionci una soluzione potrebbe essere fare srand(time(NULL) + i) dove i è il contatore del ciclo for??
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 13:54   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
No...la srand DEVE essere chiamata una sola volta nel programma in modo da sfruttare lo stesso seme per la generazioni di tutti i numeri random di un programma...altrimenti non sono più molto casuali (vabbè che non lo erano nemmeno prima, ma se lo chiami più volte lo sono meno )...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 14:24   #11
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
cionci dimmi se questo può andar bene
Codice:
  .
  .
int i=0;
srand(time(NULL)+i);
for (i=0; i<50; ++i) printf("%d", rand());
  .
  .
va bene così? fammi capire una cosa. la srand cambia il seme per la generezione di numeri casuali. se io metto una costante lui mi genera sempre lo stesso numero. se io metto delle variabili tipo srand(time(NULL)+i) la rand() va a ricalcolarsi ogni volta l'output di time(NULL)+i oppure calcola l'output sempre a partire dall'input che ha ricevuto la prima volta (cioè quando si è chiamato srand(time(NULL)+i))?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 15:34   #12
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16213
Il seme del generatore di numeri casuali e' sempre lo stesso; srand lo inizializza con un valore specifico (eventualmente calcolato sul momento), mentre rand lo usa per calcolare il nuovo valore e lo aggiorna con questo.
Per cui, in una sequenza srand --- rand --- srand --- rand, la seconda rand parte dal valore impostato dalla seconda srand, non da quello impostato dalla prima rand.
[EDIT] Invece, in srand --- rand --- rand, la seconda rand parte dal valore impostato dalla prima rand. [/EDIT]

Io chiamerei srand una volta sola, all'inizio del programma.
La teoria dice che la sequenza dei valori di rand a partire da un seme scelto "casualmente" e' "casuale"; ma non penso che questo valga anche per una serie di semi scelti piu' o meno "sequenzialmente".
Eventualmente, darei la possibilita' di chiamarla con un valore a scelta dell'utente anziche' con l'output di time, in modo da poter sia ottenere un comportamento impredicibile, sia replicare esattamente un esperimento.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu

Ultima modifica di Ziosilvio : 07-06-2004 alle 17:47.
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 16:11   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Concordo con Ziosilvio
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 16:15   #14
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
se ho capito bene secondo quanto detto da ziosilvio la rand() oltre che a generare un valore partendo da un seme, aggiorna quel seme al valore appena calcolato, pertanto quando si fa una rand() è superfluo fare una srand() per aggiornare il seme quindi la srand() va fatta solo all'inizio del programma giusto?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 16:20   #15
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Sì...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2004, 15:46   #16
melanippe
Junior Member
 
Iscritto dal: Sep 2004
Città: Cittadina del Mondo
Messaggi: 10
Quote:
Originariamente inviato da cionci
Una piccola nota rand()%N permette di ottenere interi fra 0 e N-1

Come posso fare per ottenere invece un random decimale, un float compreso tra 0 e 1?
melanippe è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2004, 15:56   #17
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Dipende....hai un numero di decimali prefissato che vuoi ottenere ?

Se non vuoi un numero di decimali prefissato basta dividere per RAND_MAX (è una costante che solitamente identifica il numero massimo positivo rappresentato sugli interi)...

(double)rand() / RAND_MAX

Il risultato è ovviamente un double...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2004, 15:59   #18
Ubi-Wan
Bannato
 
L'Avatar di Ubi-Wan
 
Iscritto dal: Jul 2004
Città: Tatooine
Messaggi: 506
per usare sempre rand puoi fare cosi' per esempio:

float x;

x=(float)(rand()%101)/100.0;

cosi' ottieni un numero decimale compreso tra 0 e 1 con precisione di 2 zeri dopo la virgola
Ubi-Wan è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2004, 16:18   #19
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16213
Quote:
Originariamente inviato da cionci
Se non vuoi un numero di decimali prefissato basta dividere per RAND_MAX (è una costante che solitamente identifica il numero massimo positivo rappresentato sugli interi)...

(double)rand() / RAND_MAX
rand genera valori "casuali tra 0 e RAND_MAX inclusi, quindi sarebbe piu' giusto:
Codice:
(double)rand() / (RAND_MAX+1)
che tuttavia potrebbe dare dei problemi di overflow, perche' RAND_MAX+1 ha il tipo di RAND_MAX e potrebbe essere negativo.
Il metodo "esatto" dovrebbe essere questo:
Codice:
(double)rand() / (RAND_MAX+1U)
che e' il rapporto tra un valore double compreso tra 0 e RAND_MAX inclusi, e un valore intero senza segno, quindi sicuramente positivo.
A questo punto, una variabile aleatoria bernoulliana X di parametro p (che vale 1 con probabilita' p, 0 con probabilita' 1-p) si genera semplicemente ponendo:
Codice:
X = ((double)rand() / (RAND_MAX+1U)) < p;
EDIT: ho corretto un RAND (sbagliato) in RAND_MAX(giusto)
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu

Ultima modifica di Ziosilvio : 13-09-2004 alle 16:25.
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 13-09-2004, 16:18   #20
melanippe
Junior Member
 
Iscritto dal: Sep 2004
Città: Cittadina del Mondo
Messaggi: 10
Quote:
Originariamente inviato da Ubi-Wan
per usare sempre rand puoi fare cosi' per esempio:

float x;

x=(float)(rand()%101)/100.0;

cosi' ottieni un numero decimale compreso tra 0 e 1 con precisione di 2 zeri dopo la virgola

Grazie, è quello che cercavo di ottenere, anche se temo di non essermi espressa chiaramente!
melanippe è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
JMEV SC01, la supersportiva cinese da 30...
Tesla Model 3 superata per la prima volt...
AMD ha già risolto la crisi della...
La “batteria di Baghdad” funziona davver...
Pannelli solari al contrario? Non propri...
Google Gemini si espande: arrivano le es...
Mercato TV: la leadership di Samsung reg...
L'AI che lavora 100 volte più vel...
LIDAR, battaglia finale: MicroVision met...
Il 2025 è stato l'anno di BYD: +2...
L'IA enterprise entra nella fase decisiv...
Il tiktoker Khaby Lame cede la sua socie...
Apple Pencil Pro scende a 122€ su Amazon...
Ring in forte sconto su Amazon: videocit...
Blink torna a fare sul serio: Mini 2K+ c...
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: 01:12.


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