2011-11-18 2 views
0

내 게임에서 나는 이것에 대한 조건을 사용할 수 있음을 알고 있지만, 내게 더 쉬운 수학 방정식이 있는지 알고 싶었습니다. arc4random()을 사용하고 싶습니다.arc4random()을 사용하는 확률 방정식?

내가해야 할 것은 :

  1. 내 점수는 1-20, 확률 인 경우 : 1
  2. 내 점수는 21-40, 확률의 경우 25 아웃 : 1이면 20
  3. 중 이게 가능 (10)

중 1 : 1

  • 내 점수는 60, 확률 인 경우 15에서 : 내 점수는 확률 41-60입니까? 만약 그렇다면, 어떻게 이것을 달성 할 수 있습니까?

    감사합니다.

  • +2

    가 왜'arc4random_uniform (확률)'사용하지 않는? 전달 된 값 아래에서 균일 한 분포를 보장하므로 10 중 1은'arc4random_uniform (10) == 0' (0은 10 이하의 숫자 일 수 있음)이됩니다. – ughoavgfhw

    답변

    1

    이 트릭을 할해야한다 (이것은 분명 희망!) :

    int modNumber = 25; 
    float alteredScore = score - (floor((score-1)/60) - 1) * 60; 
    modNumber -= floor((alteredScore-1)/20) * 5; 
    int result = arc4random() % modNumber; // Or arc4random_uniform(modNumber) if you want to completely remove modulo bias, but beaing in mind the non-randomness (!) of arc4random and the size of modNumber I highly doubt it would make any real difference 
    if (!result) { 
        // Result is 0 
        // Do stuff for the lucky person 
    } else { 
        // Make them miserable 
    } 
    
    +0

    이 코드는 위의 주석 작성자의 의견과 어떻게 다른가요? –

    +0

    내부적으로 내 생각에 비슷한 일을하는 것 같습니다. 확률이 무엇인지 알아 내기 위해서는 위와 같이 모듈 번호를 계산할 필요가 있으며,'arc4random_uniform()'를 사용하는 것이 훨씬 빠를 것이라고는 상상할 수 없습니다. 또한 iOS 용으로 제공되는지 여부는 알 수 없습니다. – jrtc27

    +0

    문서를 살펴보면,'arc4random_uniform()'는 모듈로 바이어스를 피할 수 있지만, 중요하지 않은 작은 모듈 번호를 다루고 있습니다. 당신이 원하는 것을 사용하십시오. – jrtc27