/** @file printtree.cpp * * print in tree- (indented-) form, so developers can have a look at the * underlying structure. */ #include #include #include "ginac.h" void ex::printtree(ostream & os, unsigned indent) const { debugmsg("ex printtree",LOGLEVEL_PRINT); ASSERT(bp!=0); // os << "refcount=" << bp->refcount << " "; bp->printtree(os,indent); } void ex::dbgprinttree(void) const { debugmsg("ex dbgprinttree",LOGLEVEL_PRINT); ASSERT(bp!=0); bp->dbgprinttree(); } void basic::printtree(ostream & os, unsigned indent) const { debugmsg("basic printtree",LOGLEVEL_PRINT); os << string(indent,' ') << "type=" << typeid(*this).name() << ", hash=" << hashvalue << " (0x" << hex << hashvalue << dec << ")" << ", flags=" << flags << ", nops=" << nops() << endl; for (int i=0; i0) { os << string(indent+delta_indent,' ') << "bin " << i << " with entries "; for (epplist::const_iterator it=hashtab[i].begin(); it!=hashtab[i].end(); ++it) { os << *it-seq.begin() << " "; this_bin_fill++; } os << endl; cum_fill += this_bin_fill; cum_fill_sq += this_bin_fill*this_bin_fill; } if (this_bin_fill0) fact *= k; double prob=pow(lambda,k)/fact*exp(-lambda); cum_prob += prob; os << string(indent+delta_indent,' ') << "bins with " << k << " entries: " << int(1000.0*count[k]/hashtabsize)/10.0 << "% (expected: " << int(prob*1000)/10.0 << ")" << endl; } os << string(indent+delta_indent,' ') << "bins with more entries: " << int(1000.0*count[MAXCOUNT]/hashtabsize)/10.0 << "% (expected: " << int((1-cum_prob)*1000)/10.0 << ")" << endl; os << string(indent+delta_indent,' ') << "variance: " << 1.0/hashtabsize*cum_fill_sq-(1.0/hashtabsize*cum_fill)*(1.0/hashtabsize*cum_fill) << endl; os << string(indent+delta_indent,' ') << "average fill: " << (1.0*cum_fill)/hashtabsize << " (should be equal to " << (1.0*seq.size())/hashtabsize << ")" << endl; #endif // def EXPAIRSEQ_USE_HASHTAB }