/** * @brief Dump status of all the root approximations */ MPS_PRIVATE void mps_dump_status (mps_context * s, FILE * outstr) { int i; MPS_DEBUG (s, " Approximation Attributes Inclusion"); for (i = 0; i < s->n; i++) { MPS_DEBUG (s, "Status %4d: %-25s %-15s %-15s", i, MPS_ROOT_STATUS_TO_STRING (s->root[i]->status), MPS_ROOT_ATTRS_TO_STRING (s->root[i]->attrs), MPS_ROOT_INCLUSION_TO_STRING (s->root[i]->inclusion)); } }
QVariant RootsModel::data(const QModelIndex &index, int role) const { int i = index.row(); if (role != Qt::DisplayRole && role < Qt::UserRole) return QVariant(); if (i < 0 || i > length) return QVariant(); else { rdpe_t root_module; mpc_rmod (root_module, m_roots.at(i)->value); int digits = (rdpe_Esp (root_module) - rdpe_Esp (m_roots.at(i)->radius)) / LOG2_10; char * buffer = NULL; switch (role) { case SHORT_APPROXIMATION: digits = 4; // fallthrough case Qt::DisplayRole: buffer = new char[2 * digits + 15]; if (m_roots[i]->get_imag_part() > 0) gmp_sprintf (buffer, "%.*Ff + %.*Ffi", digits, mpc_Re (m_roots[i]->value), digits, mpc_Im (m_roots[i]->value)); else gmp_sprintf (buffer, "%.*Ff %.*Ffi", digits, mpc_Re (m_roots[i]->value), digits, mpc_Im (m_roots[i]->value)); return QString(buffer); break; case STATUS: return QString(MPS_ROOT_STATUS_TO_STRING (m_roots[i]->status)); case RADIUS: return QString("%1").arg(m_roots[i]->get_radius()); case ROOT: return QVariant::fromValue((void*) m_roots[i]); default: qDebug() << "Invalid role"; return QVariant(); } } }
void status (int signal) { int i; FILE * logstr = stderr; fprintf (stderr, "\nOperation running now: %s\n\n", MPS_OPERATION_TO_STRING (s->operation)); fprintf (logstr, "Dumping the approximations:\n"); fprintf (logstr, " Phase = %s, In = %d, Out = %d, Uncertain = %d, Zero = %d, Cluster = %ld\n", MPS_PHASE_TO_STRING (s->lastphase), s->count[0], s->count[1], s->count[2], s->zero_roots, s->clusterization->n); fprintf (logstr, "Current approximations:"); for (i = 0; i < s->n; i++) { switch (s->lastphase) { case no_phase: case float_phase: fprintf (logstr, " Approximation %4d = ", i); cplx_outln_str (logstr, s->root[i]->fvalue); break; case dpe_phase: fprintf (logstr, " Approximation %4d = ", i); cdpe_outln_str (logstr, s->root[i]->dvalue); break; case mp_phase: fprintf (logstr, " Approximation %4d = ", i); mpc_outln_str (logstr, 10, s->mpwp, s->root[i]->mvalue); break; } } /* output radii */ fprintf (logstr, "Current radii: \n"); for (i = 0; i < s->n; i++) { switch (s->lastphase) { case no_phase: case float_phase: fprintf (logstr, " Radius of root %4d = %e\n", i, s->root[i]->frad); break; case dpe_phase: case mp_phase: fprintf (logstr, " Radius of root %4d", i); rdpe_outln_str (logstr, s->root[i]->drad); break; } } fprintf (logstr, "\n\n"); fprintf (logstr, "Dumping status:\n\n"); fprintf (logstr, " Approximation Attributes Inclusion\n"); for (i = 0; i < s->n; i++) { fprintf (logstr, " Status %4d: %-25s %-15s %-15s\n", i, MPS_ROOT_STATUS_TO_STRING (s->root[i]->status), MPS_ROOT_ATTRS_TO_STRING (s->root[i]->attrs), MPS_ROOT_INCLUSION_TO_STRING (s->root[i]->inclusion)); } fprintf (stderr, "\n\nOperation running now: %s\n", MPS_OPERATION_TO_STRING (s->operation)); }
/** * @brief Print an approximation to stdout (or whatever the output * stream currently selected in the mps_context is). * * @param s A pointer to the current mps_context. * @param i The index of the approxiomation that shall be printed. * @param num The number of zero roots. */ MPS_PRIVATE void mps_outroot (mps_context * s, int i, int num) { long out_digit; out_digit = (long)(LOG10_2 * s->output_config->prec) + 10; /* print format header */ switch (s->output_config->format) { case MPS_OUTPUT_FORMAT_COMPACT: case MPS_OUTPUT_FORMAT_FULL: fprintf (s->outstr, "("); break; case MPS_OUTPUT_FORMAT_VERBOSE: fprintf (s->outstr, "Root(%d) = ", num); break; default: break; } /* print real part */ if (i == ISZERO || s->root[i]->attrs == MPS_ROOT_ATTRS_IMAG) fprintf (s->outstr, "0"); else mps_outfloat (s, mpc_Re (s->root[i]->mvalue), s->root[i]->drad, out_digit, true); /* print format middle part */ switch (s->output_config->format) { case MPS_OUTPUT_FORMAT_BARE: fprintf (s->outstr, " "); break; case MPS_OUTPUT_FORMAT_GNUPLOT: case MPS_OUTPUT_FORMAT_GNUPLOT_FULL: fprintf (s->outstr, "\t"); break; case MPS_OUTPUT_FORMAT_COMPACT: case MPS_OUTPUT_FORMAT_FULL: fprintf (s->outstr, ", "); break; case MPS_OUTPUT_FORMAT_VERBOSE: if (i == ISZERO || mpf_sgn (mpc_Im (s->root[i]->mvalue)) >= 0) fprintf (s->outstr, " + I * "); else fprintf (s->outstr, " - I * "); break; default: break; } /* print imaginary part */ if (i == ISZERO || s->root[i]->attrs == MPS_ROOT_ATTRS_REAL) fprintf (s->outstr, "0"); else mps_outfloat (s, mpc_Im (s->root[i]->mvalue), s->root[i]->drad, out_digit, s->output_config->format != MPS_OUTPUT_FORMAT_VERBOSE); /* If the output format is GNUPLOT_FORMAT_FULL, print out also the radius */ if (s->output_config->format == MPS_OUTPUT_FORMAT_GNUPLOT_FULL) { fprintf (s->outstr, "\t"); rdpe_out_str_u (s->outstr, s->root[i]->drad); fprintf (s->outstr, "\t"); rdpe_out_str_u (s->outstr, s->root[i]->drad); } /* print format ending */ switch (s->output_config->format) { case MPS_OUTPUT_FORMAT_COMPACT: fprintf (s->outstr, ")"); break; case MPS_OUTPUT_FORMAT_FULL: fprintf (s->outstr, ")\n"); if (i != ISZERO) { rdpe_outln_str (s->outstr, s->root[i]->drad); fprintf (s->outstr, "Status: %s, %s, %s\n", MPS_ROOT_STATUS_TO_STRING (s->root[i]->status), MPS_ROOT_ATTRS_TO_STRING (s->root[i]->attrs), MPS_ROOT_INCLUSION_TO_STRING (s->root[i]->inclusion)); } else fprintf (s->outstr, " 0\n ---\n"); break; default: break; } fprintf (s->outstr, "\n"); /* debug info */ if (s->DOLOG) { if (i == ISZERO) fprintf (s->logstr, "zero root %-4d = 0", num); else { fprintf (s->logstr, "Root %-4d = ", i); mpc_out_str_2 (s->logstr, 10, 0, 0, s->root[i]->mvalue); fprintf (s->logstr, "\n"); fprintf (s->logstr, " Radius = "); rdpe_outln_str (s->logstr, s->root[i]->drad); fprintf (s->logstr, " Prec = %ld\n", (long)(mpc_get_prec (s->root[i]->mvalue) / LOG2_10)); fprintf (s->logstr, " Approximation = %s\n", MPS_ROOT_STATUS_TO_STRING (s->root[i]->status)); fprintf (s->logstr, " Attributes = %s\n", MPS_ROOT_ATTRS_TO_STRING (s->root[i]->attrs)); fprintf (s->logstr, " Inclusion = %s\n", MPS_ROOT_INCLUSION_TO_STRING (s->root[i]->inclusion)); fprintf (s->logstr, "--------------------\n"); } } }