Tôi thỉnh thoảng nhận được ngoại lệ stackoverflow trong phương pháp này.Nguyên nhân của tràn ngăn xếp trong phương pháp này (toán học dấu phẩy động)
double norm_cdf(const double x) {
double k = 1.0/(1.0 + 0.2316419*x);
double k_sum = k*(0.319381530 + k*(-0.356563782 + k*(1.781477937 + k*(-1.821255978 + 1.330274429*k))));
if (x >= 0.0) {
return (1.0 - (1.0/(pow(2*M_PI,0.5)))*exp(-0.5*x*x) * k_sum);
} else {
return 1.0 - norm_cdf(-x);
}
}
Bất kỳ đề xuất nào về lý do tôi có thể nhận được? Bất kỳ bước nào tôi có thể thực hiện để khắc phục lỗi?
tôi đã không đi sâu vào logic của bạn, nhưng những gì tôi nghi ngờ là '1.0 - norm_cdf (-x) 'là tạo ra một kết quả tiêu cực đối với một số lý do thỉnh thoảng, trong đó có thể có thể dẫn đến vô biên đệ quy – StephenTG
Để xác nhận, bạn có một số đầu vào mẫu đang kích hoạt ngoại lệ SO không? – StephenTG
Có thực sự không cần phải đệ quy về vấn đề này ... –