Pergunta
Estou tentando codificar uma função de geração de números aleatórios em C incorporado, onde não posso incluir o math.h
Arquivo. É por isso que não sou capaz de usar a semente srand
função.
Existe alguma outra maneira de semeá -lo além do tempo?
Solução
Considere usar o Mersenne Twister, as fontes são por exemplo aqui -- Muito de maior qualidade do que os geradores congruentes lineares tradicionais, um período soberbamente longo, profundamente estudado e abençoado por muita literatura acadêmica recente.
Outras dicas
srand
é emstdlib.h
, nãomath.h
. Para semear com o tempo que você incluitime.h
usartime(NULL)
, nãomath.h
. Não vejo como é relevante.- Se
rand
esrand
não estão disponíveis, você pode criar um deles, por exemplo LCG ou Mersenne Twister. - Se a velocidade e a segurança não forem uma preocupação, você pode armazenar o estado atual do PRNG em memória persistente e reiniciar a partir desse ponto quando um número aleatório é necessário. Por exemplo, o MT19937 tem período de 219937 - 1 que deve ser suficiente para fins normais quando sem recaência.
- Se a semeadura for realmente necessária, qualquer coisa que não seja constante em nenhuma escala possa ser usada como semente.
Considere ter uma aparência através disso Palestra, pode lhe dar algumas idéias (e código). O PDF passa por algumas opções diferentes e até fornece um pouco de código.
Estou tentando codificar uma função de geração de números aleatórios em C incorporado, onde não posso incluir o
math.h
Arquivo. É por isso que não sou capaz de usar a sementesrand
função.
srand()
é comumente semeado usando time()
, e isso é definido em <time.h>
, não em <math.h>
.
Existe alguma outra maneira de semeá -lo além do tempo?
Claro, você pode semeá -lo com o que quiser. Depende da sua plataforma o que está disponível.