template<int axis,int d> bool axis_less_degenerate(const Tuple<int,Vector<Quantized,d>> a, const Tuple<int,Vector<Quantized,d>> b) { struct F { static void eval(RawArray<mp_limb_t> result, RawArray<const Vector<Exact<1>,d>> X) { mpz_set(result,X[1][axis]-X[0][axis]); }}; const typename Point<d>::type X[2] = {a,b}; return perturbed_sign(F::eval,1,asarray(X)); }
static void perturbed_ratio_test() { typedef Vector<Quantized,2> EV; for (const int power : vec(1,2)) for (const int index : range(20)) { nasty_power = power; nasty_index = index; Vector<const exact::Perturbed2,2> X(exact::Perturbed2(index,EV()),exact::Perturbed2(index+1,EV(perturbation<2>(7,index+1)))); Vector<Quantized,1> result; const bool s = perturbed_ratio(asarray(result),nasty_ratio,2+power,asarray(X),power==2); GEODE_ASSERT(result.x==(power==1?X.y.value().x:abs(X.y.value().x))); GEODE_ASSERT(s==perturbed_sign(nasty_denominator,1+power,asarray(X))); } }