Procházet zdrojové kódy

lolremez: add more timing information for the linear system solving.

undefined
Sam Hocevar před 10 roky
rodič
revize
288bec4312
1 změnil soubory, kde provedl 10 přidání a 8 odebrání
  1. +10
    -8
      tools/lolremez/solver.cpp

+ 10
- 8
tools/lolremez/solver.cpp Zobrazit soubor

@@ -35,8 +35,6 @@ remez_solver::remez_solver(int order, int decimals)

void remez_solver::run(real a, real b, char const *func, char const *weight)
{
using std::printf;

m_func.parse(func);

if (weight)
@@ -122,6 +120,8 @@ void remez_solver::remez_init()
*/
void remez_solver::remez_step()
{
Timer t;

/* Pick up x_i where error will be 0 and compute f(x_i) */
array<real> fxn;
for (int i = 0; i < m_order + 2; i++)
@@ -162,6 +162,9 @@ void remez_solver::remez_step()
real error = 0;
for (int i = 0; i < m_order + 2; i++)
error += system[m_order + 1][i] * fxn[i];

using std::printf;
printf(" -:- timing for inversion: %f ms\n", t.Get() * 1000.f);
}

/*
@@ -188,8 +191,8 @@ void remez_solver::find_zeroes()
static real zero = (real)0;
while (fabs(a.x - b.x) > limit)
{
real t = abs(b.err) / (abs(a.err) + abs(b.err));
real newc = b.x + t * (a.x - b.x);
real s = abs(b.err) / (abs(a.err) + abs(b.err));
real newc = b.x + s * (a.x - b.x);

/* If the third point didn't change since last iteration,
* we may be at an inflection point. Use the midpoint to get
@@ -210,6 +213,7 @@ void remez_solver::find_zeroes()
m_zeroes[i] = c.x;
}

using std::printf;
printf(" -:- timing for zeroes: %f ms\n", t.Get() * 1000.f);
}

@@ -226,8 +230,6 @@ void remez_solver::find_extrema()
{
Timer t;

using std::printf;

m_control[0] = -1;
m_control[m_order + 1] = 1;
m_error = 0;
@@ -276,6 +278,7 @@ void remez_solver::find_extrema()
m_control[i] = c.x;
}

using std::printf;
printf(" -:- timing for extrema: %f ms\n", t.Get() * 1000.f);
printf(" -:- error: ");
m_error.print(m_decimals);
@@ -284,14 +287,13 @@ void remez_solver::find_extrema()

void remez_solver::print_poly()
{
using std::printf;

/* Transform our polynomial in the [-1..1] range into a polynomial
* in the [a..b] range by composing it with q:
* q(x) = 2x / (b-a) - (b+a) / (b-a) */
polynomial<real> q ({ -m_k1 / m_k2, real(1) / m_k2 });
polynomial<real> r = m_estimate.eval(q);

using std::printf;
printf("\n");
for (int j = 0; j < m_order + 1; j++)
{


Načítá se…
Zrušit
Uložit