Developer documentation

bernstein_binomials.hpp
Go to the documentation of this file.
1 /********************************************************************
2  * This file is part of the source code of the realroot library.
3  * Author(s): J.P. Pavone, GALAAD, INRIA
4  * $Id: binomials.hpp,v 1.1 2005/07/11 10:03:55 jppavone Exp $
5  ********************************************************************/
6 #ifndef realroot_SOLVE_SBDSLV_BERNSTEIN_BINOMIALS_H
7 #define realroot_SOLVE_SBDSLV_BERNSTEIN_BINOMIALS_H
8 //--------------------------------------------------------------------
9 #include <vector>
10 #include <assert.h>
11 //====================================================================
12 namespace mmx {
13 //--------------------------------------------------------------------
14 namespace bernstein
15 {
16  template<typename T>
17  struct binomials
18  {
20  std::vector< T * > m_data;
21  binomials( const binomials& );
22  static void pwsum( T * dst, T * src, int sz ) { for(int i=0;i<sz-1;dst[i]=src[i]+src[i+1],i++) ; };
23  binomials( int dmax = 100 )
24  {
25  m_data.push_back( new T[1] );
26  m_data[0][0] = 1;
27  };
29  for ( unsigned i = 0; i < m_data.size(); i ++ )
30  delete[] m_data[i];
31 
32  };
33  inline T * get( unsigned i )
34  {
35  if ( m_data.size() > i ) return m_data[i];
36  for ( unsigned j = m_data.size(); j <= i; j ++ )
37  {
38  m_data.push_back( new T[j+1] );
39  pwsum(m_data[j]+1,m_data[j-1],j);
40  m_data[j][0] = 1;
41  m_data[j][j] = 1;
42  };
43  return m_data[i];
44  };
45  const T& binomial( unsigned n, unsigned i )
46  { return get(n)[i]; };
47  };
48  template<typename T>
50  template<typename T>
51  T binomial( int n, int i ) { return binomials<T>::_default_.binomial(n,i); };
52 };
53 //--------------------------------------------------------------------
54 } //namespace mmx
55 /********************************************************************/
56 #endif //
binomials(const binomials &)
static binomials _default_
Definition: bernstein_binomials.hpp:19
static void pwsum(T *dst, T *src, int sz)
Definition: bernstein_binomials.hpp:22
binomials(int dmax=100)
Definition: bernstein_binomials.hpp:23
Definition: bernstein_binomials.hpp:17
const T & binomial(unsigned n, unsigned i)
Definition: bernstein_binomials.hpp:45
Definition: binomials.hpp:68
~binomials()
Definition: bernstein_binomials.hpp:28
std::vector< T * > m_data
Definition: bernstein_binomials.hpp:20
T binomial(int n, int i)
Definition: bernstein_binomials.hpp:51
Definition: array.hpp:12
Home