2012-02-06 8 views

Respuesta

14

que puede hacer algo como esto:

+(BOOL) getYesOrNo 
{ 
    int tmp = (arc4random() % 30)+1; 
    if(tmp % 5 == 0) 
     return YES; 
    return NO; 
} 
+0

Esto tiene sesgo de módulo. – Alexander

+1

Esta solución produce valores falsos más que valores verdaderos, algo así como 1:10 para valores falsos y eso es porque el porcentaje de hacer 5,10,15,20,25,30 es como 6/30, lo que no tiene sentido en absoluto –

3

que puedes usar arc4random para el generador de números aleatorios.

#include <stdlib.h> 

    u_int32_t 
    arc4random(void); 

La función arc4random() utiliza el generador de flujo de clave empleada por el sistema de cifrado arc4, que utiliza 8 * 8 8 bits cajas S. Los S-Box pueden ser en aproximadamente estados (2 * 1700). La función arc4random() devuelve números aleatorios pseudo- en el rango de 0 a (2 * 32) -1, y por lo tanto tiene el doble del rango de rand y aleatorio.

-(BOOL)foo4random 
{ 
u_int32_t randomNumber = (arc4random() % ((unsigned)RAND_MAX + 1)); 
if(randomNumber % 5 ==0) 
    return YES; 
return NO; 

} 

Para obtener más información sobre arc4random tipo

hombre arc4random

en el terminal.

+0

Usted debería usar 'arc4random_uniform' para evitar el sesgo de módulo, en lugar de reinventar la rueda – Alexander

Cuestiones relacionadas