Gerar números aleatórios

1. Gerar números aleatórios

Thiago de Freitas
thiagofreitas

(usa Ubuntu)

Enviado em 02/04/2010 - 21:17h

há alguma maneira de gerar números aleatórios em C, sem ser pela função srand(time(NULL))?

utilizando outra semente, porque meu programa precisa gerar um vetor de números aleatórios, só que utilizando a semente como tempo coincide alguns números, pois o programa em si, roda relativamente rápido pro tempo variar assim.

obrigado


  


2. Re: Gerar números aleatórios

Andi
upc0d3

(usa Gentoo)

Enviado em 03/04/2010 - 07:02h

1) cade o codigo ?
2) uma ideia poderia ser escrever uma funcao para gerar estes numeros !


3. Re: Gerar números aleatórios

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 03/04/2010 - 08:54h

Utilize outra função da time.h que, por exemplo, retorne o tempo em milisegundos ou nanosegundos (e não em segundos como a função time() faz).

t+


4. Re: Gerar números aleatórios

Thiago de Freitas
thiagofreitas

(usa Ubuntu)

Enviado em 03/04/2010 - 09:49h

E como que eu faço isso?
utilizar o tempo em nanosegundos, ao invés de segundos?

o código q estou usando
//Alocando espaço para a matriz de pontos aleatórios e já colocando os pontos
void MatrizAleatorios (int TamAmostras, float ***MatrizAmostras, int Dimensoes)
{
int i,j;
float aux;
(*MatrizAmostras) = malloc(TamAmostras*sizeof(float*));
for (i=0; i < TamAmostras; i++)
{
(*MatrizAmostras)[i] = malloc(Dimensoes*sizeof(float));
for(j = 0; j < Dimensoes; j++){
aux = (drand48()); //prenche a matriz com números aleatórios
(*MatrizAmostras)[i][j] = aux;
}
}
}

//Alocando espaço pazAleatoriora a matriz de pontos escolhidos dentro dos pontos dados e já colocando esses pontos
void geraMatrizDadosDados (int TamAmostras, float ***MatrizDadosDados, int Dimensoes, int BaseDados, float **MatrizDados)
{
int i, j;
int aux=0;
(*MatrizDadosDados) = malloc(TamAmostras*sizeof(float*));
for (i=0; i < TamAmostras; i++)
{
(*MatrizDadosDados)[i] = malloc(Dimensoes*sizeof(float));
aux = lrand48() % BaseDados;
for (j = 0; j < Dimensoes; j++)
(*MatrizDadosDados)[i][j] = MatrizDados[aux][j];
//copia TamAmostras números aleatórios da matriz base de dados para a matriz aleatórios
}
}



5. Re: Gerar números aleatórios

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 03/04/2010 - 13:28h

Hum.. em relação aos nanosegundos, só consegui achar códigos utilizando diferença de tempo (tempo final - tempo inicial), não achei nada que retornasse o tempo atual em outras unidades :(

Bem, uma "gambiarra" é você colocar a srand dentro do for que preenche as matrizes. Coloque outros parâmetros em srand para que o valor da semente seja único a cada iteração:

---
aux = 0 ;
for(j = 0; j < Dimensoes; j++){
srand( time(NULL) + j + aux ) ;
aux = (drand48()); //prenche a matriz com números aleatórios
(*MatrizAmostras)[i][j] = aux;
}
---

A cada iteração devemos ter um número aleatório diferente, porque teremos valores diferentes para j e para aux.

Teste aí e diga o resultado.
t+






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts