2012-01-08 10 views
7

Tôi đang cố gắng tạo ngẫu nhiên Gaussian double trong Objective-C (giống như random.nextGaussian trong Java). Tuy nhiên rand_gauss() dường như không hoạt động. Bất cứ ai cũng biết một cách để đạt được điều này?Tạo ngẫu nhiên Gaussian đôi trong Objective-C/C

+0

Đáng tiếc bạn đã không hỏi khi đang làm việc, tôi đã tra cứu và viết một vài tháng trước. – Kevin

Trả lời

9

This link cho biết cách tính toán bằng chức năng tiêu chuẩn random().

Tôi nên lưu ý rằng bạn có thể phải thực hiện quy trình ranf() chuyển đổi đầu ra của random() từ [0,MAX_INT] thành từ [0,1], nhưng điều đó không quá khó.

Từ bài viết liên quan:

Các hình thức cực của việc chuyển đổi Box-Muller là cả hai nhanh hơn và số lượng mạnh mẽ hơn. Mô tả thuật toán của nó là: 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' sử dụng hàm' drand48() '. Nó trả về một đôi trong khoảng [0, 1]. Xem https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/drand48.3.html – bcattle

+0

Cũng sử dụng hàm 'log()' để ghi nhật ký tự nhiên, xem http: //en.cppreference.com/w/c/numeric/math/log – bcattle