2012-01-08 5 views
7

Objective-C에서 임의의 가우시안 이중을 생성하려고합니다 (Java에서 random.nextGaussian과 동일). 그러나 rand_gauss()이 작동하지 않는 것 같습니다. 누구든지 이것을 달성하는 방법을 알고 있습니까?Objective-C/C에서 임의의 가우스 이중 생성

+0

동정, 나는 그것을 보면서 몇 달 전 일을 썼다. – Kevin

답변

9

This link은 표준 random() 기능을 사용하여 계산하는 방법을 보여줍니다.

난 당신 가능성이 [0,1]에서 수 [0,MAX_INT]에서 random()의 출력을 변환 ranf() 루틴을해야합니다 점에 유의해야한다,하지만 너무 어렵지 않을 것이다. 링크 된 기사에서

:

박스 뮬러 변화의 극 양식을 더 빠르고 더 강력한 수치입니다. 알고리즘 설명은 다음과 같습니다. float x1, x2, w, y1, y2; 내가 직장에있는 동안 당신이 요청하지 않았다

 do { 
      x1 = 2.0 * ranf() - 1.0; 
      x2 = 2.0 * ranf() - 1.0; 
      w = x1 * x1 + x2 * x2; 
    } while (w >= 1.0); 

    w = sqrt((-2.0 * ln(w))/w); 
    y1 = x1 * w; 
    y2 = x2 * w; 
+1

'randf'의 경우'drand48()'함수를 사용하십시오. 간격 [0, 1]에서 double을 반환합니다. https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/drand48.3.html – bcattle

+0

또한 자연 로그를 얻으려면'log()'함수를 사용하십시오. http : //en.cppreference.com/w/c/numeric/math/log – bcattle