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
Trả lời
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;
Để '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
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
Đá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