include/realroot/bernstein_eenv_simplify.hpp File Reference

Go to the source code of this file.

Functions


Function Documentation

static void msimplify ( eenv *  ienv,
real_t *  data 
) [inline, static]

Definition at line 7 of file bernstein_eenv_simplify.hpp.

References mmx::array::add(), assert, mmx::vct::fill(), and oaddress().

00008 {
00009   unsigned * supp = new unsigned[ ienv->data_size() ];
00010   unsigned  nsupp = ienv->support( supp, data );
00011   sz_t      newszs[ienv->m_nvr];
00012   unsigned i,add;
00013   sz_t v;
00014   unsigned sz;
00015   std::fill(newszs,newszs+ienv->m_nvr,0);
00016   for ( i = 0; i < nsupp; i ++ )
00017     {
00018       for ( add = supp[i], v = ienv->m_nvr-1; add; add /= ienv->m_szs[v], v-- )
00019         {
00020           sz = add % ienv->m_szs[v] + 1;
00021           if ( sz > newszs[v] ) newszs[v] = sz;
00022         };
00023       for ( int v = 0; v < ienv->m_nvr; v ++ )
00024         if ( newszs[v] != ienv->m_szs[v] ) continue;
00025       break;
00026     };
00027   
00028   if ( i < nsupp ) { delete[] supp; return; };
00029   for ( sz_t v = 0; v < ienv->m_nvr; v ++ )
00030     if ( newszs[v] == 0 ) newszs[v] = 1;
00031   
00032   eenv senv(ienv->m_nvr,newszs,ienv->m_vrs);
00033   unsigned * oa = new unsigned[ nsupp ];
00034   oaddress( &senv, oa, ienv, supp, nsupp );
00035   for ( unsigned i = 0; i < nsupp; i ++ )
00036     {
00037       assert(oa[i]<supp[i]);
00038       data[oa[i]] = data[supp[i]];
00039     };
00040   ienv->swap(senv);
00041 };


Generated on 6 Dec 2012 for realroot by  doxygen 1.6.1