|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Napoli
Messaggi: 522
|
numeri casuali
salve! avrei la necessità di generare (usando c) un numero casuale reale compreso tra -1 ed 1 sapreste dirmi come posso fare ??
|
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Codice:
time_t t;
double r;
srand((unsigned)time(&t));
r=rand()*2.0/RAND_MAX-1;
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Salerno
Messaggi: 1390
|
Considera la seguente istruzione:
i = rand (); la funziona rand ti genera un numero compreso tra 0 e rand_max! Ciauz, Alberto.
__________________
La POTENZA è nulla senza il CONTROLLO! |
|
|
|
|
|
#4 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
Come ti hanno già detto repne scasb prima e Albozzo poi, in stdlib.h è dichiarata una funzione rand, che restituisce un intero uniformemente distribuito tra 0 e RAND_MAX inclusi. Di questo generatore pseudorandom devi inizializzare casualmente il seme, ossia il valore di partenza, per esempio leggendo l'ora di sistema.
Se vuoi generare dei numeri in virgola mobile tra a incluso e b escluso, la cosa che ti conviene fare è partire da una funzione che ti generi un numero casuale in virgola mobile tra 0 incluso e 1 escluso: Codice:
double frand() {
return rand() / (RAND_MAX+1.0);
}
Codice:
x = a + frand()*(b-a);
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" 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 : 27-03-2006 alle 00:03. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Se non ti serve un numero casuale affidabile basta rand(), altrimenti se hai veramente la necessità di un numero casuale più casuale devi cercare un algoritmo più serio, prova sui Numerical Recipes.
Ultima modifica di tomminno : 27-03-2006 alle 10:13. |
|
|
|
|
|
#6 | |
|
Bannato
Iscritto dal: Feb 2003
Messaggi: 947
|
Quote:
Un esempio chiarira' meglio il concetto: se ho la necessita' di generare numeri casuali compresi tra 0 e N (interi ad esempio), e se N>RAND_MAX allora e' chiaro che alcuni numeri N non "appariranno mai" nella sequenza di numeri casuali generati da rand(). Questo e' realmente un grosso limite (distribuzioni multiple, interferenza...), che si supera con l'uso di funzioni di generazione di numeri casuali piu' avanzate. Un possibile palliativo utilizzando la funzione standard 'rand()' potrebbe essere (codice scritto in C--): Codice:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N_RAND_NUMS 100
void main(void)
{
time_t t;
double r;
int i;
double double_rand_nums[N_RAND_NUMS],single_rand_nums[N_RAND_NUMS];
srand((unsigned)time(&t));
for(i=0;i<N_RAND_NUMS;i++)
single_rand_nums[i]=rand();
srand(~t);
for(i=0;i<N_RAND_NUMS;i++)
double_rand_nums[i]=rand()+single_rand_nums[i]*RAND_MAX;
for(i=0;i<N_RAND_NUMS;i++)
printf("%f\n",double_rand_nums[i]);
}
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Napoli
Messaggi: 522
|
ok grazie mille ragazzi oggi proverò le vostre soluzioni. In realtà andrebbero bene anche numeri casuali tra -1 e 1 con precione decimale (in pratica -1 , -0.9 -0.8.... 0.1 0.2 0.3 ....etc)
In python ho la possibilità di definire una lista di numeri e poi scegliere casualmente in questa lista. Che voi sappiate esiste questa possibilità in C ?? |
|
|
|
|
|
#8 | ||
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
Quote:
Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:48.


















