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); };