void teste( int bits, double c1, int e1, double c2, int e2 ) { int exact = arrondi(c1*e1+c2*e2) ; Coef coef1(bits), coef2(bits) ; coef1 = c1 ; coef2 = c2 ; int approx = coef1*e1 + coef2*e2 ; erreur(bits,exact,approx) ; std::cout<<std::endl ; }
void teste( int bits, double c1, int e1, double c2, int e2 ) { int exact = arrondi(c1*e1+c2*e2) ; Coef coef1(bits), coef2(bits) ; coef1.approxime(c1) ; coef2.approxime(c2) ; int approx = coef1.multiplie(e1) + coef2.multiplie(e2) ; erreur(bits,exact,approx) ; std::cout<<std::endl ; }
virtual void execute( int bits ) { Coef<U> coef1(bits), coef2(bits) ; for ( int i=0 ; i<nb_ ; ++i ) { coef1 = num_[i] ; coef2 = (1-num_[i]) ; exact_[i] = 200. ; approx_[i] = arrondi(coef1*U(exact_[i]) + coef2*U(exact_[i]),3) ; } erreur(bits) ; }
void create_curve_test() { eli::geom::curve::piecewise_polynomial_creator<data_type, 3, tolerance_type> ppc; piecewise_curve_type pc; polynomial_type c; coefficient_type coef1(5), coef2(2); point_type eval_out, eval_ref; data_type t, t0, t1; bool rtn_flag; // set coefficients coef1 << 2, 4, 3, 1, 2; coef2 << 1, 1; c.set_coefficients(coef1, 0); c.set_coefficients(coef2, 1); // set the parameterization t0=-1; t1=1; // create curve rtn_flag=ppc.set_conditions(c); TEST_ASSERT(rtn_flag); ppc.set_t0(t0); ppc.set_segment_dt(t1-t0, 0); rtn_flag=ppc.create(pc); TEST_ASSERT(rtn_flag); // test evaluation at ends t=t0; eval_out=pc.f(t); eval_ref=c.f((t-t0)/(t1-t0)); TEST_ASSERT(tol.approximately_equal(eval_out, eval_ref)); t=t1; eval_out=pc.f(t); eval_ref=c.f((t-t0)/(t1-t0)); TEST_ASSERT(tol.approximately_equal(eval_out, eval_ref)); // test evaluation at interior point t=(t1-t0)*static_cast<data_type>(0.2)+t0; eval_out=pc.f(t); eval_ref=c.f((t-t0)/(t1-t0)); TEST_ASSERT(tol.approximately_equal(eval_out, eval_ref)); // if (typeid(data_type)==typeid(float)) // { // std::cout.flush(); // eli::test::octave_start(1); // eli::test::octave_print(1, c, "poly"); // eli::test::octave_print(1, pc, "piecewise"); // eli::test::octave_finish(1, false); // } }
void full_cycle_test() { eli::geom::curve::piecewise_polynomial_creator<data_type, 3, tolerance_type> ppc; piecewise_curve_type pc; polynomial_type c; coefficient_type coef1(5), coef2(2); point_type eval_out, eval_ref; data_type t0, t1; bool rtn_flag; // set coefficients coef1 << 2, 4, 3, 1, 2; coef2 << 1, 1; c.set_coefficients(coef1, 0); c.set_coefficients(coef2, 1); // set the parameterization t0=-1; t1=1; // create curve rtn_flag=ppc.set_conditions(c); TEST_ASSERT(rtn_flag); ppc.set_t0(t0); ppc.set_segment_dt(t1-t0, 0); rtn_flag=ppc.create(pc); TEST_ASSERT(rtn_flag); // extract the curve and obtain the monomial coefficients curve_type crv; typename curve_type::monomial_coefficient_type coef_out; pc.get(crv, 0); crv.get_monomial_coefficients(coef_out); // test the coefficients index_type i; i=0; TEST_ASSERT(tol.approximately_equal(coef_out(i, 0), coef1(i))); i=1; TEST_ASSERT(tol.approximately_equal(coef_out(i, 0), coef1(i))); i=2; TEST_ASSERT(tol.approximately_equal(coef_out(i, 0), coef1(i))); i=3; TEST_ASSERT(tol.approximately_equal(coef_out(i, 0), coef1(i))); i=4; TEST_ASSERT(tol.approximately_equal(coef_out(i, 0), coef1(i))); i=0; TEST_ASSERT(tol.approximately_equal(coef_out(i, 1), coef2(i))); i=1; TEST_ASSERT(tol.approximately_equal(coef_out(i, 1), coef2(i))); i=2; TEST_ASSERT(tol.approximately_equal(coef_out(i, 1), 0)); i=3; TEST_ASSERT(tol.approximately_equal(coef_out(i, 1), 0)); i=4; TEST_ASSERT(tol.approximately_equal(coef_out(i, 1), 0)); i=0; TEST_ASSERT(tol.approximately_equal(coef_out(i, 2), 0)); i=1; TEST_ASSERT(tol.approximately_equal(coef_out(i, 2), 0)); i=2; TEST_ASSERT(tol.approximately_equal(coef_out(i, 2), 0)); i=3; TEST_ASSERT(tol.approximately_equal(coef_out(i, 2), 0)); i=4; TEST_ASSERT(tol.approximately_equal(coef_out(i, 2), 0)); }