1 /* monte/gsl_monte.h 2 * 3 * Copyright (C) 1996, 1997, 1998, 1999, 2000 Michael Booth 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or (at 8 * your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 */ 19 20 /* Some things common to all the Monte-Carlo implementations */ 21 /* Author: MJB */ 22 23 #ifndef __GSL_MONTE_H__ 24 #define __GSL_MONTE_H__ 25 26 #include <stdlib.h> 27 28 #undef __BEGIN_DECLS 29 #undef __END_DECLS 30 #ifdef __cplusplus 31 # define __BEGIN_DECLS extern "C" { 32 # define __END_DECLS } 33 #else 34 # define __BEGIN_DECLS /* empty */ 35 # define __END_DECLS /* empty */ 36 #endif 37 38 __BEGIN_DECLS 39 40 /* Hide the function type in a typedef so that we can use it in all our 41 integration functions, and make it easy to change things. 42 */ 43 44 struct gsl_monte_function_struct { 45 double (*f)(double * x_array, size_t dim, void * params); 46 size_t dim; 47 void * params; 48 }; 49 50 typedef struct gsl_monte_function_struct gsl_monte_function; 51 52 #define GSL_MONTE_FN_EVAL(F,x) (*((F)->f))(x,(F)->dim,(F)->params) 53 54 55 __END_DECLS 56 57 #endif /* __GSL_MONTE_H__ */ 58