rango randomize rand numeros generar funcion decimales arreglo arc4random_uniform aleatorios objective-c c random

objective-c - randomize - generar numeros aleatorios en c en un rango



¿Por qué rand()% 7 siempre devuelve 0? (2)

Bien, esto

int seed; for(seed = 1; seed < 10; seed++) { srand(seed); printf("%4d %16d/n", seed, rand()); }

huellas dactilares

1 16807 2 33614 3 50421 4 67228 5 84035 6 100842 7 117649 8 134456 9 151263

lo cual me hace pensar que rand() = seed * 16807

Artículo de Wikipedia El generador congruente lineal confirma que CarbonLib utiliza Xn + 1 = Xn * 16807 para generar números aleatorios.

Esto parece ser un problema realmente extraño:

Este es mi código:

#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool { srand((unsigned int)time(NULL)); int newRandomNumber = 0; newRandomNumber = rand() % 7; NSLog(@"%d", rand() % 7); //This prints out what I expected NSLog(@"newRandomNumber = %d", newRandomNumber); // This always prints out 0! } return 0; }

Si reemplazo esa línea que dice

newRandomNumber = rand() % 7

con

newRandomNumber = rand() % 8

todo funciona a la perfección ¿Por qué es ese el caso?


Parece poco probable, pero al ejecutar algunas pruebas, después de un srand el primer rand parece ser divisible por 7, al menos en una variable de tamaño int.

En varias ejecuciones obtuve 1303562743, 2119476443 y 2120232758, todos los cuales mod 7 a 0.

El segundo rand() funciona, porque es el segundo rand() . Lanza un rand() antes de tu primer rand() ... o mejor aún, usa un mejor generador de números random o arc4rand si está disponible.

También vea Pregunta de desbordamiento de pila ¿ Por qué es (rand ()% cualquier cosa) siempre 0 en C ++? .