Code for Exp function with reduced accuracy. I can not compile it.
Code from
#include <stddef.h>#include <math.h>#include "mex.h"#ifndef mwSize#define mwSize int#endif/* these 2 #define lines help make the later code morereadable *//* Input Arguments */#define PARAMETER_IN prhs[0]/* Output Arguments */#define RESULT_OUT plhs[0]#define LITTLE_ENDIAN 1static union{ double d; struct {#ifdef LITTLE_ENDIAN int j,i;#else int i,j;#endif } n;} _eco;#define EXP_A (1048576/0.69314718055994530942)#define EXP_C 60801#define EXP(y) (_eco.n.i = EXP_A*(y) + (1072693248 - EXP_C), _eco.d)void mexexp(double*y, double*yp, mwSize m) { while(m--) { *yp++ = EXP(*y++); }}void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[] ){ mwSize numel; mwSize ndim; mwSize *dims; /* Check for proper number of arguments */ if (nrhs != 1) { mexErrMsgTxt("One input argument required."); } else if (nlhs > 1) { mexErrMsgTxt("Too many output arguments."); } else if ( !mxIsDouble(PARAMETER_IN) ) { mexErrMsgTxt("Input must be double."); } else if ( mxIsComplex(PARAMETER_IN) ) { mexErrMsgTxt("Input cannot be complex."); } ndim = mxGetNumberOfDimensions(PARAMETER_IN); dims = mxGetDimensions(PARAMETER_IN); numel = mxGetNumberOfElements(PARAMETER_IN); /* Create a matrix for the return argument */ RESULT_OUT = mxCreateNumericArray(ndim, dims, mxDOUBLE_CLASS, mxREAL); /* Do the actual computation*/ mexexp(mxGetPr(PARAMETER_IN),mxGetPr(RESULT_OUT),numel); return; }
Best Answer