From 91dce74721fd0be0759d044623789c3ff8db42a8 Mon Sep 17 00:00:00 2001 From: Samir Nasibli Date: Fri, 5 Feb 2021 00:46:06 +0300 Subject: [PATCH] FIX: mkl_random.chisquare when df==1 --- mkl_random/src/mkl_distributions.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/mkl_random/src/mkl_distributions.cpp b/mkl_random/src/mkl_distributions.cpp index 6b49510..247aa6e 100644 --- a/mkl_random/src/mkl_distributions.cpp +++ b/mkl_random/src/mkl_distributions.cpp @@ -659,25 +659,14 @@ irk_noncentral_chisquare_vec(irk_state *state, npy_intp len, double *res, const mkl_free(pvec); } else { - float *fuvec = NULL; - - /* noncentral_chisquare(1, nonc) ~ sqrt(nonc)*(-1)^[U<0.5] + Z */ - err = vdRngGaussian(VSL_RNG_METHOD_GAUSSIAN_ICDF, state->stream, len, res, d_zero, d_one); + /* noncentral_chisquare(1, nonc) ~ (Z + sqrt(nonc))**2 for df == 1 */ loc = sqrt(nonc); - - fuvec = (float *) mkl_malloc(len*sizeof(float), 64); - assert(fuvec != NULL); - - err = vsRngUniform(VSL_RNG_METHOD_UNIFORM_STD, state->stream, len, fuvec, (const float) d_zero, (const float) d_one); + err = vdRngGaussian(VSL_RNG_METHOD_GAUSSIAN_ICDF, state->stream, len, res, loc, d_one); assert(err == VSL_STATUS_OK); - - #pragma ivdep - for(i=0; i