|
realroot_doc 0.1.1
|
Go to the source code of this file.
| static void msimplify | ( | eenv * | ienv, |
| real_t * | data | ||
| ) | [static] |
Definition at line 7 of file bernstein_eenv_simplify.hpp.
References mmx::array::add(), assert, mmx::vct::fill(), and oaddress().
{
unsigned * supp = new unsigned[ ienv->data_size() ];
unsigned nsupp = ienv->support( supp, data );
sz_t newszs[ienv->m_nvr];
unsigned i,add;
sz_t v;
unsigned sz;
std::fill(newszs,newszs+ienv->m_nvr,0);
for ( i = 0; i < nsupp; i ++ )
{
for ( add = supp[i], v = ienv->m_nvr-1; add; add /= ienv->m_szs[v], v-- )
{
sz = add % ienv->m_szs[v] + 1;
if ( sz > newszs[v] ) newszs[v] = sz;
};
for ( int v = 0; v < ienv->m_nvr; v ++ )
if ( newszs[v] != ienv->m_szs[v] ) continue;
break;
};
if ( i < nsupp ) { delete[] supp; return; };
for ( sz_t v = 0; v < ienv->m_nvr; v ++ )
if ( newszs[v] == 0 ) newszs[v] = 1;
eenv senv(ienv->m_nvr,newszs,ienv->m_vrs);
unsigned * oa = new unsigned[ nsupp ];
oaddress( &senv, oa, ienv, supp, nsupp );
for ( unsigned i = 0; i < nsupp; i ++ )
{
assert(oa[i]<supp[i]);
data[oa[i]] = data[supp[i]];
};
ienv->swap(senv);
};