This is a beta version of the GSL
Mathematical Functions portion of the library. I have attached the 32 and 64 bit version for Linux if you would like to try it out. I plan to create a gsl.bas module include file when the library has been fully implemented in ScriptBasic.
/*
GNU Scientific Library
Based on GSL 1.15
Interface By: John Spikowski
Refinements By: Armando I. Rivera (AIR)
Version 0.01
*/
#include <stdio.h>
#include "../../basext.h"
#include <gsl/gsl_math.h>
besVERSION_NEGOTIATE
return (int)INTERFACE_VERSION;
besEND
besSUB_START
besEND
besSUB_FINISH
besEND
/* Elementary Functions */
besFUNCTION(_log1p)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_log1p(x));
besEND
besFUNCTION(_expm1)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_expm1(x));
besEND
besFUNCTION(_hypot)
double x,y;
besARGUMENTS("rr")
&x,&y
besARGEND
besRETURN_DOUBLE(gsl_hypot(x, y));
besEND
besFUNCTION(_hypot3)
double x,y,z;
besARGUMENTS("rrr")
&x,&y,&z
besARGEND
besRETURN_DOUBLE(gsl_hypot3(x, y, z));
besEND
besFUNCTION(_acosh)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_acosh(x));
besEND
besFUNCTION(_asinh)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_asinh(x));
besEND
besFUNCTION(_atanh)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_atanh(x));
besEND
besFUNCTION(_ldexp)
double x;
int y;
besARGUMENTS("ri")
&x,&y
besARGEND
besRETURN_DOUBLE(gsl_ldexp(x, y));
besEND
besFUNCTION(_frexp)
double f;
LEFTVALUE e;
besARGUMENTS("r")
&f
besARGEND
besLEFTVALUE(besARGUMENT(2),e);
besRETURN_DOUBLE(gsl_frexp(f, *e));
besEND
/* Small integer powers */
besFUNCTION(_pow_int)
double x;
int n;
besARGUMENTS("ri")
&x,&n
besARGEND
besRETURN_DOUBLE(gsl_pow_int(x, n));
besEND
besFUNCTION(_pow_uint)
double x;
unsigned int n;
besARGUMENTS("ri")
&x,&n
besARGEND
besRETURN_DOUBLE(gsl_pow_uint(x, n));
besEND
besFUNCTION(_pow_2)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_pow_2(x));
besEND
besFUNCTION(_pow_3)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_pow_3(x));
besEND
besFUNCTION(_pow_4)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_pow_4(x));
besEND
besFUNCTION(_pow_5)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_pow_5(x));
besEND
besFUNCTION(_pow_6)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_pow_6(x));
besEND
besFUNCTION(_pow_7)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_pow_7(x));
besEND
besFUNCTION(_pow_8)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_pow_8(x));
besEND
besFUNCTION(_pow_9)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_DOUBLE(gsl_pow_9(x));
besEND
/* Testing the Sign of Numbers */
besFUNCTION(_SIGN)
double x;
besARGUMENTS("r")
&x
besARGEND
besRETURN_LONG(GSL_SIGN(x));
besEND
/* Testing for Odd and Even Numbers */
besFUNCTION(_IS_ODD)
int x;
besARGUMENTS("i")
&x
besARGEND
besRETURN_LONG(GSL_IS_ODD(x));
besEND
besFUNCTION(_IS_EVEN)
int x;
besARGUMENTS("i")
&x
besARGEND
besRETURN_LONG(GSL_IS_EVEN(x));
besEND
/* Maximum and Minimum functions */
besFUNCTION(_MIN)
double a,b;
besARGUMENTS("rr")
&a,&b
besARGEND
besRETURN_DOUBLE(GSL_MIN(a, b));
besEND
besFUNCTION(_MAX)
double a,b;
besARGUMENTS("rr")
&a,&b
besARGEND
besRETURN_DOUBLE(GSL_MAX(a, b));
besEND
besFUNCTION(_MIN_DBL)
double a,b;
besARGUMENTS("rr")
&a,&b
besARGEND
besRETURN_DOUBLE(GSL_MIN_DBL(a, b));
besEND
besFUNCTION(_MAX_DBL)
double a,b;
besARGUMENTS("rr")
&a,&b
besARGEND
besRETURN_DOUBLE(GSL_MAX_DBL(a, b));
besEND
besFUNCTION(_MIN_INT)
long a,b;
besARGUMENTS("ii")
&a,&b
besARGEND
besRETURN_LONG(GSL_MIN_INT(a,b));
besEND
besFUNCTION(_MAX_INT)
long a,b;
besARGUMENTS("ii")
&a,&b
besARGEND
besRETURN_LONG(GSL_MAX_INT(a, b));
besEND
besFUNCTION(_MIN_LDBL)
double a,b;
besARGUMENTS("rr")
&a,&b
besARGEND
besRETURN_DOUBLE(GSL_MIN_LDBL((long double)a, (long double)b));
besEND
besFUNCTION(_MAX_LDBL)
double a,b;
besARGUMENTS("rr")
&a,&b
besARGEND
besRETURN_DOUBLE(GSL_MAX_LDBL((long double)a, (long double)b));
besEND
/* Approximate Comparison of Floating Point Numbers */
besFUNCTION(_fcmp)
double x,y,epsilon;
besARGUMENTS("rrr")
&x,&y,&epsilon
besARGEND
besRETURN_LONG(gsl_fcmp(x, y, epsilon));
besEND