¿Qué función se usa para aceptar números aleatorios entre límite inferior y superior en C?

Fuente: http://c-faq.com/lib/randrange.html

La forma obvia

rand()%N

(que intenta devolver números del 0 al N-1) es pobre, porque los bits de orden inferior de muchos generadores de números aleatorios son angustiosamente no aleatorios. (Ver http://c-faq.com/lib/notveryrand….)

Un método mejor es algo como

(int)((double)rand() / ((double)RAND_MAX + 1) * N)

Si prefiere no usar coma flotante, otro método es

rand() / (RAND_MAX / N + 1)

Obviamente, estos métodos requieren conocer RAND_MAX (que ANSI define en ), y asumir que N es mucho menor que RAND_MAX.

Si está comenzando con un generador de números aleatorios que devuelve valores de punto flotante entre 0 y 1, todo lo que tiene que hacer para obtener enteros de 0 a N-1 es multiplicar la salida de ese generador por N:

(int)(drand48() * N)

Referir:

  • http://stackoverflow.com/a/6852396
  • Código C – 35 líneas – teclado
  • Guía C – 2.13 stdlib.h
  • Guía C – 2.13 stdlib.h

¿Realmente estás pidiendo una función que genere números aleatorios entre dos límites? No creo que haya una función C estándar que haga eso, y la mayoría de las personas simplemente toman la salida de rand() o algo similar, y escalan / cambian su salida de acuerdo a sus necesidades.

ACTUALIZACIÓN: Dado que Mayank Agarwal ya le indicó la P13.16 de las preguntas frecuentes de comp.lang.c, también podría darle la solución a su pregunta, que estaba en la parte del texto que no citó:

M + rand() / (RAND_MAX / (N - M + 1) + 1)

que, como describí anteriormente (asumiendo el límite inferior M y el límite superior N ):

  • escala la salida de rand () desde el rango [0, RAND_MAX] a [0, (NM)], luego
  • agrega M para cambiar el número aleatorio del rango [0, (NM)] a [M, N]

More Interesting

¿Cuál es el algoritmo más simple que permite a un robot descubrir e inventar?

Quiero hacer mi doctorado en aprendizaje automático. ¿Cuál es el mejor libro de texto para obtener una base sólida en probabilidad y estadística?

¿Qué algoritmos gráficos debe implementar un estudiante de segundo año de CS?

¿Cuáles son las mejores preguntas de la entrevista de estructura de datos de árbol?

¿Cuáles son algunas optimizaciones comunes que los clientes de GPS como Google Maps usan además de los algoritmos elementales de ruta más corta como la búsqueda A *?

¿Qué es un algoritmo que calculará si se puede pagar la cantidad [math] n [/ math] si tenemos un suministro ilimitado de monedas para cada valor entre [math] a [/ math] y [math] b [/ math] ?

¿Qué método es el más adecuado para resolver problemas de programación de enfermería, programación dinámica o algoritmos genéticos, y por qué?

¿Cuál es la diferencia entre un tipo estable e inestable?

¿Qué tipo de algoritmo de localización utilizan generalmente los misiles de crucero?

¿Cuál crees que es la razón por la cual las personas pueden resolver acertijos complejos? ¿Es práctica o nacen genios?

¿Existe un algoritmo para aplicar a una imagen que muestre lo que vería alguien que necesita corrección de la visión?

¿Las funciones de JavaScript como map (), reduce () y filter () ya están optimizadas para recorrer la matriz?

¿Cuál es el algoritmo de árboles extra en el aprendizaje automático?

¿Debo aprender a clasificar?

¿Cuál es el algoritmo utilizado por Diffbot para extraer datos web?