19#ifndef CCGSL_VECTOR_FLOAT_HPP
20#define CCGSL_VECTOR_FLOAT_HPP
22#include<gsl/gsl_vector_float.h>
65 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
79 if(
n > 0 )
ccgsl_pointer = gsl_vector_float_alloc(
static_cast<size_t>(
n ) );
81 gsl_error(
"failed tring to make a vector of negative length",
85 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
99 explicit vector_float( gsl_vector_float* v )
106#ifdef __GXX_EXPERIMENTAL_CXX0X__
112 size_t const n = initializer_list.size();
115 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
124 for(
auto x : initializer_list ){ *p = x; ++p; }
177 size_t const n = v.size() / stride;
178 ccgsl_pointer =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
185 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
202 gsl_vector_float_memcpy( copy.
get(),
get() );
265#ifdef __GXX_EXPERIMENTAL_CXX0X__
272 std::swap(
count, v.count );
273 v.ccgsl_pointer =
nullptr;
313 for(
size_t i = 0; i <
min; ++i ){
316 if( t < u )
return true;
317 if( u < t )
return false;
320 return size < v_size;
340 for(
size_t i = 0; i <
min; ++i ){
343 if( t > u )
return true;
344 if( u > t )
return false;
347 return size > v_size;
405 template<
typename container,
typename content,
bool reverse_t>
class iterator_base {
437 static content something = 0;
442 }
else if(
v->ccgsl_pointer == 0 ){
456 return *(
v->ccgsl_pointer->data +
position *
v->ccgsl_pointer->stride);
468 }
else if(
v->ccgsl_pointer == 0 ){
482 return v->ccgsl_pointer->data +
position *
v->ccgsl_pointer->stride;
492 static content something = 0;
497 }
else if(
v->ccgsl_pointer == 0 ){
512 return *(
v->ccgsl_pointer->data + p *
v->ccgsl_pointer->stride);
522 if(
v == 0 or i.
v == 0 ){
525 }
else if(
v->ccgsl_pointer == 0 or i.
v->ccgsl_pointer == 0 ){
530 if(
v->ccgsl_pointer != i.
v->ccgsl_pointer ){
531 gsl_error(
"trying to take difference of iterators for different vector_float objects", __FILE__, __LINE__,
564 if(
v == 0 or i.
v == 0 ){
569 if(
v->ccgsl_pointer != i.
v->ccgsl_pointer ){
570 gsl_error(
"trying to take difference of iterators for different vector_float objects", __FILE__, __LINE__,
586 }
else if(
v->ccgsl_pointer == 0 ){
603 }
else if(
v->ccgsl_pointer == 0 ){
620 }
else if(
v->ccgsl_pointer == 0 ){
768 if( this->
v == 0 or i.
v == 0 ){
777 gsl_error(
"trying to take difference of iterators for different vector_float objects", __FILE__, __LINE__,
806 if( this->
v == 0 or i.
v == 0 ){
812 gsl_error(
"trying to take difference of iterators for different vector_float objects", __FILE__, __LINE__,
954 if( this->
v == 0 or i.
v == 0 ){
963 gsl_error(
"trying to take difference of iterators for different vector_float objects", __FILE__, __LINE__,
1004 if( this->
v == 0 or i.
v == 0 ){
1010 gsl_error(
"trying to take difference of iterators for different vector_float objects", __FILE__, __LINE__,
1039 if( this->
v == 0 or i.
v == 0 ){
1045 gsl_error(
"trying to take difference of iterators for different vector_float objects", __FILE__, __LINE__,
1135 if(
ccgsl_pointer == 0 ) gsl_error(
"null vector_float", __FILE__, __LINE__, GSL_EFAULT );
1136#ifndef GSL_RANGE_CHECK_OFF
1138 gsl_error(
"vector_float does not have stride of size 1", __FILE__, __LINE__, GSL_EBADLEN );
1149 if(
ccgsl_pointer == 0 ) gsl_error(
"null vector_float", __FILE__, __LINE__, GSL_EFAULT );
1150#ifndef GSL_RANGE_CHECK_OFF
1152 gsl_error(
"vector_float does not have stride of size 1", __FILE__, __LINE__, GSL_EBADLEN );
1219 static float something = 0;
1225#ifndef GSL_RANGE_CHECK_OFF
1228 gsl_error(
"trying to read beyond end of vector_float", __FILE__, __LINE__,
exception::GSL_EINVAL );
1242 static float something = 0;
1248#ifndef GSL_RANGE_CHECK_OFF
1251 gsl_error(
"trying to read beyond end of vector_float", __FILE__, __LINE__,
exception::GSL_EINVAL );
1299#ifdef __GXX_EXPERIMENTAL_CXX0X__
1326 int set_basis(
size_t i ){
return gsl_vector_float_set_basis(
get(), i ); }
1345 return gsl_vector_float_swap_elements(
get(), i, j ); }
1350 float max()
const {
return gsl_vector_float_max(
get() ); }
1355 float min()
const {
return gsl_vector_float_min(
get() ); }
1361 void minmax(
float* min_out,
float* max_out )
const {
1362 gsl_vector_float_minmax(
get(), min_out, max_out ); }
1368 void minmax(
float& min_out,
float& max_out )
const {
1369 gsl_vector_float_minmax(
get(), &min_out, &max_out ); }
1386 gsl_vector_float_minmax_index(
get(), imin, imax ); }
1416 int scale(
float const x ){
return gsl_vector_float_scale(
get(), x ); }
1432 return gsl_vector_float_axpby( alpha, x.
get(),
beta,
get() );
1444 int isnull()
const {
return gsl_vector_float_isnull(
get() ); }
1449 int ispos()
const {
return gsl_vector_float_ispos(
get() ); }
1454 int isneg()
const {
return gsl_vector_float_isneg(
get() ); }
1465 float get(
size_t const i )
const {
return gsl_vector_float_get(
get(), i ); }
1471 void set(
size_t const i,
float x ){ gsl_vector_float_set(
get(), i, x ); }
1477 float*
ptr(
size_t const i ){
return gsl_vector_float_ptr(
get(), i ); }
1483 float const*
const_ptr(
size_t const i )
const {
return gsl_vector_float_const_ptr(
get(), i ); }
1489 int fread( FILE* stream ){
return gsl_vector_float_fread( stream,
get() ); }
1495 int fwrite( FILE* stream )
const {
return gsl_vector_float_fwrite( stream,
get() ); }
1501 int fscanf( FILE* stream ){
return gsl_vector_float_fscanf( stream,
get() ); }
1508 int fprintf( FILE* stream,
char const* format )
const {
1509 return gsl_vector_float_fprintf( stream,
get(), format ); }
1518 ccgsl_pointer = gsl_vector_float_alloc_from_block(
b.get(), offset,
n, stride );
1520 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
1535 ccgsl_pointer = gsl_vector_float_alloc_from_vector( v.
get(), offset,
n, stride );
1537 try {
count =
new size_t; }
catch( std::bad_alloc& e ){
1551 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1552 *w = gsl_vector_float_view_array( v,
n ).vector;
1565 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1566 *w = gsl_vector_float_view_array_with_stride( base, stride,
n ).vector;
1578 gsl_vector_float* w =
static_cast<gsl_vector_float *
>( malloc(
sizeof( gsl_vector_float ) ) );
1579 *w = gsl_vector_float_const_view_array( v,
n ).vector;
1592 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1593 *w = gsl_vector_float_const_view_array_with_stride( base, stride,
n ).vector;
1606 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1607 *w = gsl_vector_float_const_view_array( v,
n ).vector;
1622 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1623 *w = gsl_vector_float_const_view_array_with_stride( base, stride,
n ).vector;
1636 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1637 *w = gsl_vector_float_subvector(
get(), i,
n ).vector;
1650 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1651 *w = gsl_vector_float_subvector_with_stride(
get(), i, stride,
n ).vector;
1663 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1664 *w = gsl_vector_float_const_subvector(
get(), i,
n ).vector;
1677 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1678 *w = gsl_vector_float_const_subvector_with_stride(
get(), i, stride,
n ).vector;
1691 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1692 *w = gsl_vector_float_const_subvector(
get(), i,
n ).vector;
1707 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1708 *w = gsl_vector_float_const_subvector_with_stride(
get(), i, stride,
n ).vector;
1720 template<
typename ARRAY>
1726 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1727 *w = gsl_vector_float_view_array( v.data(),
n ).vector;
1739 template<
typename ARRAY>
1742 n = base.size()/stride;
1743 if((
n-1)*stride > base.size())
1745 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1746 *w = gsl_vector_float_view_array_with_stride( base.data(), stride,
n ).vector;
1757 template<
typename ARRAY>
1763 gsl_vector_float* w =
static_cast<gsl_vector_float *
>( malloc(
sizeof( gsl_vector_float ) ) );
1764 *w = gsl_vector_float_const_view_array( v.data(),
n ).vector;
1776 template<
typename ARRAY>
1779 n = base.size()/stride;
1780 if((
n-1)*stride > base.size())
1782 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1783 *w = gsl_vector_float_const_view_array_with_stride( base.data(), stride,
n ).vector;
1795 template<
typename ARRAY>
1801 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1802 *w = gsl_vector_float_const_view_array( v.data(),
n ).vector;
1815 template<
typename ARRAY>
1818 n = base.size()/stride;
1819 if((
n-1)*stride > base.size())
1821 gsl_vector_float* w =
static_cast<gsl_vector_float*
>( malloc(
sizeof( gsl_vector_float ) ) );
1822 *w = gsl_vector_float_const_view_array_with_stride( base.data(), stride,
n ).vector;
This class handles vector_floats as shared handles.
@ GSL_EDOM
input domain error, e.g sqrt(-1)
@ GSL_EFAILED
generic failure
@ GSL_EINVAL
invalid argument supplied by user
@ GSL_EBADLEN
matrix, vector lengths are not conformant
@ GSL_EFAULT
invalid pointer
This class handles matrix_float objects as shared handles.
A class template for the const iterators.
const_iterator_t< reverse_t > & operator+=(difference_type const n)
The += operator.
const_iterator_t< reverse_t > & operator-=(difference_type const n)
The -= operator.
const_iterator_t< reverse_t > & operator--()
The prefix – operator.
const_iterator_t< reverse_t > operator++(int)
The postfix ++ operator.
difference_type operator-(const_iterator_t< reverse_t > const &i) const
The - operator: find distance between two iterators.
iterator_base< vector_floatconst, float, reverse_t >::difference_type difference_type
Difference type.
const_iterator_t< reverse_t > operator--(int)
The postfix – operator.
const_iterator_t(vector_float const *v, difference_type position)
This constructor allows vector_float to create non-default iterators.
const_iterator_t< reverse_t > & operator=(const_iterator_t< reverse_t > const &i)
We can assign one output iterator from another.
bool operator==(const_iterator_t< reverse_t > const &i) const
Comparison with const iterator.
bool operator<(const_iterator_t< reverse_t > const &i) const
Comparison with const iterator.
const_iterator_t< reverse_t > operator+(difference_type const n) const
The + operator.
bool operator==(iterator_t< reverse_t > const &i) const
Comparison with non-const iterator.
difference_type operator-(iterator_t< reverse_t > const &i) const
The - operator: find distance between two iterators.
bool operator!=(const_iterator_t< reverse_t > const &i) const
Comparison with const iterator.
const_iterator_t< reverse_t > & operator++()
The prefix ++ operator.
const_iterator_t()
The default constructor.
const_iterator_t< reverse_t > operator-(difference_type const n) const
The - operator: subtract distance from iterator.
bool operator<(iterator_t< reverse_t > const &i) const
Comparison with non-const iterator.
bool operator!=(iterator_t< reverse_t > const &i) const
Comparison with non-const iterator.
const_iterator_t(iterator_t< reverse_t > const &i)
A copy constructor.
The container must have iterator types.
difference_type position
Mark position of iterator within vector_float.
iterator_base()
The iterator is default constructible.
pointer operator->() const
Dereference the pointer.
bool operator<(iterator_base< container, content, reverse_t > const &i) const
The < operator is used to compare iterators.
value_type & reference
An iterator must have a reference type.
void increment()
Increment the iterator.
float value_type
An iterator must have a value type.
bool operator==(iterator_base< container, content, reverse_t > const &i) const
The == operator.
value_type * pointer
An iterator must have a pointer typea.
iterator_base(container *v, difference_type position)
This constructor allows vector_float to create non-default iterators.
container * v
Store a pointer to a vector_float we can iterate over: 0 if no vector_float.
ptrdiff_t difference_type
An iterator must have a difference_type.
std::random_access_iterator_tag iterator_category
An iterator must have an iterator category.
void shift(difference_type const n)
Shift iterator n places.
void decrement()
Decrement the iterator.
difference_type operator-(iterator_base< container, content, reverse_t > const &i) const
The - operator: find distance between two iterators.
reference operator[](difference_type const n) const
Get element at i + n by reference ([] operator).
bool operator!=(iterator_base< container, content, reverse_t > const &i) const
The != operator.
reference operator*() const
Dereference the pointer.
A class template for the two non-const iterators.
iterator_t< reverse_t > operator+(difference_type const n) const
The + operator.
iterator_t< reverse_t > & operator=(iterator_t< reverse_t > const &i)
We can assign one output iterator from another.
iterator_t()
The default constructor.
iterator_t< reverse_t > & operator+=(difference_type const n)
The += operator.
iterator_t(vector_float *v, difference_type position)
This constructor allows vector_float to create non-default iterators.
iterator_t< reverse_t > operator++(int)
The postfix ++ operator.
bool operator<(const_iterator_t< reverse_t > const &i) const
Comparison with const iterator.
difference_type operator-(const_iterator_t< reverse_t > const &i) const
The - operator: find distance between two iterators.
difference_type operator-(iterator_t< reverse_t > const &i) const
The - operator: find distance between two iterators.
iterator_t< reverse_t > & operator++()
The prefix ++ operator.
iterator_t< reverse_t > operator--(int)
The postfix – operator.
iterator_t< reverse_t > & operator-=(difference_type const n)
The -= operator.
iterator_t< reverse_t > & operator--()
The prefix – operator.
bool operator!=(const_iterator_t< reverse_t > const &i) const
Comparison with const iterator.
iterator_base< vector_float, float, reverse_t >::difference_type difference_type
Difference type.
iterator_t< reverse_t > operator-(difference_type const n) const
The - operator: subtract distance from iterator.
bool operator==(const_iterator_t< reverse_t > const &i) const
Comparison with const iterator.
This class handles vector_float objects as shared handles.
size_t size_type
A container must have a size_type.
int add_constant(float const x)
C++ version of gsl_vector_float_add_constant().
size_type max_size() const
The max size (number of elements) of the vector_float.
int reverse()
C++ version of gsl_vector_float_reverse().
int fprintf(FILE *stream, char const *format) const
C++ version of gsl_vector_float_fprintf().
vector_float const const_subvector(size_t i, size_t n) const
C++ version of gsl_vector_float_const_subvector().
vector_float subvector(size_t i, size_t n)
C++ version of gsl_vector_float_subvector().
reverse_iterator rend()
Get iterator pointing beyond last vector_float element.
const_iterator end() const
Get iterator pointing beyond last vector_float element.
iterator_t< true > reverse_iterator
The reverse_iterator type.
const_reverse_iterator rend() const
Get iterator pointing beyond last vector_float element.
bool operator!=(vector_float const &v) const
Two vector_float objects are different equal if their elements are not identical.
gsl_vector_float const * get() const
Get the gsl_vector_float.
bool operator<=(vector_float const &v) const
A container needs to define an ordering for sorting.
iterator end()
Get iterator pointing beyond last vector_float element.
float get(size_t const i) const
C++ version of gsl_vector_float_get().
const_iterator::difference_type difference_type
A container must have a difference_type.
const_reverse_iterator rbegin() const
Get iterator pointing to first vector_float element.
iterator_t< false > iterator
The iterator type.
static vector_float alloc_row_from_matrix(matrix_float &m, size_t const i)
C++ version of gsl_vector_float_alloc_row_from_matrix().
void set_zero()
C++ version of gsl_vector_float_set_zero().
vector_float(size_t const n)
The default constructor creates a new vector_float with n elements.
int isnull() const
C++ version of gsl_vector_float_isnull().
iterator begin()
Get iterator pointing to first vector_float element.
static vector_float view_array(ARRAY &v, size_t n=0)
C++ version of gsl_vector_float_view_array().
static vector_float const const_view_array(float const *v, size_t n)
C++ version of gsl_vector_float _const_view_array().
bool operator>(vector_float const &v) const
A container needs to define an ordering for sorting.
vector_float const const_subvector_with_stride(size_t i, size_t stride, size_t n) const
C++ version of gsl_vector_float_const_subvector_with_stride().
void set(size_t const i, float x)
C++ version of gsl_vector_float_set().
size_t min_index() const
C++ version of gsl_vector_float_min_index().
float const & operator[](size_t const n) const
Get element at position n by reference ([] operator).
int fscanf(FILE *stream)
C++ version of gsl_vector_float_fscanf().
int add(vector_float const &b)
C++ version of gsl_vector_float_add().
int isneg() const
C++ version of gsl_vector_float_isneg().
static vector_float const const_view_array_with_stride(ARRAY const &base, size_t stride, size_t n=0)
C++ version of gsl_vector_float_const_view_array_with_stride().
void reset()
Stop sharing ownership of the shared pointer.
int isnonneg() const
C++ version of gsl_vector_float_isnonneg().
size_t max_index() const
C++ version of gsl_vector_float_max_index().
void set_all(float x)
C++ version of gsl_vector_float_set_all().
float & operator[](size_t const n)
Get element at position n by reference ([] operator).
const_iterator_t< true > const_reverse_iterator
The const_reverse_t type.
int ispos() const
C++ version of gsl_vector_float_ispos().
bool operator<(vector_float const &v) const
A container needs to define an ordering for sorting.
float value_type
A container must have a value_type.
void swap(vector_float &v)
Swap two vector_float objects.
value_type & reference
A container must have a reference type.
reverse_iterator rbegin()
Get iterator pointing to first vector_float element.
size_type size() const
The size (number of elements) of the vector_float.
gsl_vector_float * get()
Get the gsl_vector_float.
static vector_float view_array(float *v, size_t n)
C++ version of gsl_vector_float_view_array().
bool owns_data
Used to allow a vector that does not own its data.
size_t * count
The shared reference count.
vector_float(vector_float &&v)
Move constructor.
int memcpy(vector_float const &src)
C++ version of gsl_vector_float_memcpy().
float max() const
C++ version of gsl_vector_float_max().
int div(vector_float const &b)
C++ version of gsl_vector_float_div().
value_type * pointer
A container must have a pointer type.
vector_float & operator=(vector_float const &v)
The assignment operator.
static vector_float calloc(size_t const n)
C++ version of gsl_vector_float_calloc().
int scale(float const x)
C++ version of gsl_vector_float_scale().
bool operator>=(vector_float const &v) const
A container needs to define an ordering for sorting.
vector_float()
The default constructor is only really useful for assigning to.
int swap_elements(size_t const i, size_t const j)
C++ version of gsl_vector_float_swap_elements().
static vector_float view_array_with_stride(float *base, size_t stride, size_t n)
C++ version of gsl_vector_float_view_array_with_stride().
int set_basis(size_t i)
C++ version of gsl_vector_float_set_basis().
float min() const
C++ version of gsl_vector_float_min().
void minmax(float &min_out, float &max_out) const
C++ version of gsl_vector_float_minmax().
float * ptr(size_t const i)
C++ version of gsl_vector_float_ptr().
float const * const_ptr(size_t const i) const
C++ version of gsl_vector_float_const_ptr().
int axpby(float const alpha, vector_float const &x, float const beta)
C++ version of gsl_vector_float_axpby().
float * data()
Give access to the data block_float.
static vector_float view_array_with_stride(ARRAY &base, size_t stride, size_t n=0)
C++ version of gsl_vector_float_view_array_with_stride().
size_t use_count() const
Find how many vector_float objects share this pointer.
vector_float(block_float &b, size_t const offset, size_t const n, size_t const stride=1)
C++ version of gsl_vector_float_alloc_from_block().
bool unique() const
Find if this is the only object sharing the gsl_vector_float.
int fread(FILE *stream)
C++ version of gsl_vector_float_fread().
vector_float & operator=(vector_float &&v)
Move operator.
value_type const * const_pointer
A container must have a constant pointer type.
vector_float(V &v, size_t const stride=1)
Construct from an object that implements data() and size().
bool operator==(vector_float const &v) const
Two vector_float objects are identically equal if their elements are identical.
vector_float(vector_float const &v)
The copy constructor.
vector_float subvector_with_stride(size_t i, size_t stride, size_t n)
C++ version of gsl_vector_float_subvector_with_stride().
void minmax_index(size_t *imin, size_t *imax) const
C++ version of gsl_vector_float_minmax_index().
vector_float(vector_float &v, size_t const offset, size_t const n, size_t const stride=1)
C++ version of gsl_vector_float_alloc_from_vector().
value_type const & const_reference
A container must have a constant reference type.
int mul(vector_float const &b)
C++ version of gsl_vector_float_mul().
static vector_float const const_view_array(ARRAY const &v, size_t n=0)
C++ version of gsl_vector_float _const_view_array().
float const * data() const
Give access to the data block_float.
gsl_vector_float * ccgsl_pointer
The shared pointer.
static vector_float alloc_col_from_matrix(matrix_float &m, size_t const j)
C++ version of gsl_vector_float_alloc_col_from_matrix().
static vector_float const const_view_array_with_stride(float const *base, size_t stride, size_t n)
C++ version of gsl_vector_float_const_view_array_with_stride().
int fwrite(FILE *stream) const
C++ version of gsl_vector_float_fwrite().
vector_float(vector_float &v)
The copy constructor.
vector_float(std::initializer_list< float > initializer_list)
Could construct from a std::initializer_list in C++11.
const_iterator begin() const
Get iterator pointing to first vector_float element.
float sum(vector_float const &a) const
C++ version of gsl_vector_float_sum().
vector_float clone() const
The clone function.
void wrap_gsl_vector_float_without_ownership(gsl_vector_float *v)
This function is intended mainly for internal use.
bool empty() const
Find if the vector_float is empty.
~vector_float()
The destructor only deletes the pointers if count reaches zero.
int sub(vector_float const &b)
C++ version of gsl_vector_float_sub().
const_iterator_t< false > const_iterator
The const_iterator type.
void minmax(float *min_out, float *max_out) const
C++ version of gsl_vector_float_minmax().
double beta(rng const &r, double const a, double const b)
C++ version of gsl_ran_beta().
size_t n(workspace const &w)
C++ version of gsl_rstat_n().
double b(int order, double qq)
C++ version of gsl_sf_mathieu_b().
double a(int order, double qq)
C++ version of gsl_sf_mathieu_a().
gsl_sf_result result
Typedef for gsl_sf_result.
The gsl package creates an interface to the GNU Scientific Library for C++.