2012-02-06 16 views

risposta

14

si può fare qualcosa di simile:

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

Questo ha il bias del modulo. – Alexander

+1

Questa soluzione produce valori falsi più di valori veri, qualcosa come 1:10 per valore falso e questo perché la percentuale di fare 5,10,15,20,25,30 è come 6/30 che non ha alcun senso –

3

si dovrebbe usare arc4random per il generatore di numeri casuali.

#include <stdlib.h> 

    u_int32_t 
    arc4random(void); 

La funzione arc4random() utilizza il generatore di flusso della chiave dipendenze cifrario ARC4, che utilizza 8 * 8 8 bit S-Box. Le S-Box possono essere in circa (2 * 1700) stati. La funzione arc4random() restituisce pseudo- numeri casuali nell'intervallo da 0 a (2 * 32) -1 e pertanto ha il doppio del raggio di rand e casuale.

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

} 

Per ulteriori informazioni su arc4random tipo

uomo arc4random

sul morsetto.

+0

You dovrebbe usare 'arc4random_uniform' per prevenire il bias del modulo, piuttosto che reinventare la ruota – Alexander

Problemi correlati