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?

Foi útil?

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

  1. srand é em stdlib.h, não math.h. Para semear com o tempo que você inclui time.h usar time(NULL), não math.h. Não vejo como é relevante.
  2. Se rand e srand não estão disponíveis, você pode criar um deles, por exemplo LCG ou Mersenne Twister.
  3. 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.
  4. 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 semente srand 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top