2012-02-06 8 views

Odpowiedz

14

można zrobić coś takiego:

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

To ma tendencję modulo. – Alexander

+1

To rozwiązanie daje fałszywe wartości większe niż wartości rzeczywiste, np. 1:10 dla wartości fałszywych, a to dlatego, że udział w tworzeniu 5,10,15,20,25,30 jest podobny do 6/30, co nie ma żadnego sensu. –

3

Należy użyć arc4random dla generatora liczb losowych.

#include <stdlib.h> 

    u_int32_t 
    arc4random(void); 

Funkcja arc4random() wykorzystuje klucz stosowany przez generator strumienia szyfru arc4, który wykorzystuje 8 * 8 S-8-bitowe pola. S-Boxy mogą być w około (2 * 1700) stany. Funkcja arc4random() zwraca liczby losowe o wartości od 0 do (2 * 32) -1 i dlatego ma dwa razy większy zakres od rand i losowych.

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

} 

Aby uzyskać więcej informacji na arc4random typ

człowiek arc4random

na terminalu.

+0

powinien używać 'arc4random_uniform', aby zapobiec odchyleniom modulo, zamiast na nowo odkrywać koło – Alexander

Powiązane problemy