Ir para conteúdo
Fórum Script Brasil
  • 0

[Dúvidas] Aleatoridade srand(time(NULL))


ImBigBoo

Pergunta

Galera . . .

Sou estudante de Ciência e venho trabalhando muito com numeros randomicos.

Dentre as formas de trabalho que utilizo, destacam-se os numeros gerados atraves de entrada do usuario e os gerados atraves de entrada do sistema.

Os numeros gerados atraves de entradas do usuario são simples: o usuario digita qualquer informação (numero ou caracter), e o sistema utiliza um algoritmo para transformar tais informações em um numero aleatório, sem muitas surpresas . . .

Porem, venho perdendo o sono por causa dos numeros gerados atraves de entradas do sistema. Como todo mundo, utilizo a função srand(time(NULL)), que por padrão retira informações da hora do sistema para a criação de numeros randomicos. Só que esses numeros, quando criados em curtos periodos de tempo tornam-se quase que repetitivos.

Minha atual necessidade é de abastecer um programa com um numero randomico que alcance a casa de 100000 (ou seja, vá de o a 99999), porem até agora só alcancei a casa dos 39000. Já tentei de tudo, até srand(time(NULL)*time(NULL)), que gerou numeros distantes, mas abaixo da faixa . . .

Algue faz alguma ideia de como posso fazer para alcançar na totalidade essa faixa numerica, sem ser por meio de intervenção do usuario??

Desde já, grato.

Obs.: Estou programando em C, pois se fosse em C# ou Linguagem Visual não passaria por este problema.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Caro Durub

Infelizmente não estou conseguindo acesso a página do Cplusplus, mas assim que possivel testarei.

Quanto ao Mersenne twister, vou dar uma lida e providenciarei os testes o quanto antes.

Conversei com algumas pessoas que me disseram que é porque estou declarando como variaveis int, mas já tentei outros tipos de variaveis.

Outro ponto em que estou tendo dúvidas é quanto aos dados trabalhados pela função time(NULL). Qual é o exato dado de tempo que ele trabalha?

Segue o trecho do meu CF:

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

int main()
{
    int num_alea, tent=0, qtd_num=100000;
    srand(time(NULL));
    num_alea=rand()%qtd_num;
    printf("numero gerado %d\n\n", num_alea);
    system("pause");
}

Assim que tiver um retorno, lhe informo.

Desde já, grato.

ImBigBoo

Editado por Jonathan Queiroz
Adicionar tag's (Jonathan)
Link para o comentário
Compartilhar em outros sites

  • 0

Olá amigo!

A função time(); retorna um tipo time_t, que na prática é um inteiro com o número de segundos passados desde a UNIX Epoch (1 de janeiro de 1970, às 00:00).

Quanto aos números aleatórios, acho que não posso ajudar muito. Uma dica, que só funciona se estiver no Linux, é ler os números aleatórios a partir do /dev/random.

Um abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

ae ImBigBoo, vou tentar explicar o que está acontecendo..

#include <stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
int num_alea;
srand(time(NULL));
num_alea=rand() % 20-0;     //gera valor aleatorio entre de 20 á 0.
printf("numero gerado %i\n\n", num_alea);
}
no seu caso seria..
num_alea=rand() % 100000-90000;
uma observação, cada numero na linguagem C, ocupa 4 espaço na memoria, agora imagine quando um numero é grande, ocupara vários espaços. bom.. para que o compilador gere numeros aleatorios de grande valores, é necessário que tenha um bom processador e que tenha uma memório alta, se você reparar quando você compila e gera os valores, ele sempre vai chegar até a casa dos 39000 ou numeros negativos, devido a capacidade do pc. desse jeito você vai ver que ele gera valor para cada casa, e implementa no vetor
#include <stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
int num_alea, vet[6],i;

srand(time(NULL));

for (i=0;i<6;i++)
    vet[i] = rand() % 9-0;
printf("%i", vet[i]);
}

vou ver se faço uma struct ou uma função q tente gerar para você, é que estou sem tempo e tenho uma prova hoje, flws ae..

Editado por Jonathan Queiroz
Adicionar tag's (Jonathan)
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...