📄 qrng.c
字号:
/* Author: G. Jungman */#include <config.h>#include <stdlib.h>#include <string.h>#include <gsl/gsl_errno.h>#include "gsl_qrng.h"gsl_qrng *gsl_qrng_alloc (const gsl_qrng_type * T, unsigned int dimension){ gsl_qrng * r = (gsl_qrng *) malloc (sizeof (gsl_qrng)); if (r == 0) { GSL_ERROR_VAL ("allocation failed for qrng struct", GSL_ENOMEM, 0); }; r->dimension = dimension; r->state_size = T->state_size(dimension); r->state = malloc (r->state_size); if (r->state == 0) { free (r); GSL_ERROR_VAL ("allocation failed for qrng state", GSL_ENOMEM, 0); }; r->type = T; T->init_state(r->state, r->dimension); return r;}intgsl_qrng_memcpy (gsl_qrng * dest, const gsl_qrng * src){ if (dest->type != src->type) { GSL_ERROR ("generators must be of the same type", GSL_EINVAL); } dest->dimension = src->dimension; dest->state_size = src->state_size; memcpy (dest->state, src->state, src->state_size); return GSL_SUCCESS;}gsl_qrng *gsl_qrng_clone (const gsl_qrng * q){ gsl_qrng * r = (gsl_qrng *) malloc (sizeof (gsl_qrng)); if (r == 0) { GSL_ERROR_VAL ("failed to allocate space for rng struct", GSL_ENOMEM, 0); }; r->dimension = q->dimension; r->state_size = q->state_size; r->state = malloc (r->state_size); if (r->state == 0) { free (r); GSL_ERROR_VAL ("failed to allocate space for rng state", GSL_ENOMEM, 0); }; r->type = q->type; memcpy (r->state, q->state, q->state_size); return r;}#ifndef HIDE_INLINE_STATICintgsl_qrng_get (const gsl_qrng * r, double x[]){ return (r->type->get) (r->state, r->dimension, x);}#endifconst char *gsl_qrng_name (const gsl_qrng * r){ return r->type->name;}size_tgsl_qrng_size (const gsl_qrng * r){ return r->state_size;}void *gsl_qrng_state (const gsl_qrng * r){ return r->state;}voidgsl_qrng_free (gsl_qrng * r){ if(r != 0) { if(r->state != 0) free (r->state); free (r); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -