static void eq_tests (void) { mpfr_t x, y; long i; mpfr_inits (x, y, (mpfr_ptr) 0); for (i = 0; i < 20000; i++) { mpfr_prec_t precx; precx = (randlimb () % 17) * 11 + MPFR_PREC_MIN; mpfr_set_prec (x, precx); mpfr_set_prec (y, precx + (randlimb () % 64)); mpfr_urandomb (x, RANDS); if (randlimb () & 1) mpfr_neg (x, x, MPFR_RNDN); mpfr_set (y, x, MPFR_RNDN); /* exact -> x = y */ if (mpfr_greater_p (x, y) || !mpfr_greaterequal_p (x, y) || mpfr_less_p (x, y) || !mpfr_lessequal_p (x, y) || mpfr_lessgreater_p (x, y) || !mpfr_equal_p (x, y) || mpfr_unordered_p (x, y)) { printf ("Error in eq_tests for x = "); mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN); printf ("\n"); exit (1); } } mpfr_clears (x, y, (mpfr_ptr) 0); }
static void cmp_tests (void) { mpfr_t x, y; long i; mpfr_inits (x, y, (mpfr_ptr) 0); for (i = 0; i < 80000; i++) { mpfr_prec_t precx, precy; int signx, signy, cmp; unsigned int cmpbool = 0; precx = (randlimb () % 17) * 11 + MPFR_PREC_MIN; precy = (randlimb () % 17) * 11 + MPFR_PREC_MIN; mpfr_set_prec (x, precx); mpfr_set_prec (y, precy); mpfr_urandomb (x, RANDS); mpfr_urandomb (y, RANDS); signx = randlimb () & 1; signy = randlimb () % 256 ? signx : 1 - signx; /* signy = signx most of the time (most interesting case) */ if (signx) mpfr_neg (x, x, MPFR_RNDN); if (signy) mpfr_neg (y, y, MPFR_RNDN); if (i <= 1) mpfr_set_nan (x); if (i == 0 || i == 2) mpfr_set_nan (y); if (mpfr_greater_p (x, y)) cmpbool |= 0x01; if (mpfr_greaterequal_p (x, y)) cmpbool |= 0x02; if (mpfr_less_p (x, y)) cmpbool |= 0x04; if (mpfr_lessequal_p (x, y)) cmpbool |= 0x08; if (mpfr_lessgreater_p (x, y)) cmpbool |= 0x10; if (mpfr_equal_p (x, y)) cmpbool |= 0x20; if (mpfr_unordered_p (x, y)) cmpbool |= 0x40; if ((i <= 2 && cmpbool != 0x40) || (i > 2 && (cmp = mpfr_cmp (x, y), (cmp == 0 && cmpbool != 0x2a) || (cmp < 0 && cmpbool != 0x1c) || (cmp > 0 && cmpbool != 0x13)))) { printf ("Error in cmp_tests for\nx = "); mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN); printf (" and\ny = "); mpfr_out_str (stdout, 2, 0, y, MPFR_RNDN); printf ("\n"); exit (1); } } mpfr_clears (x, y, (mpfr_ptr) 0); }
void ovm_q_ge(oregister_t *l, oregister_t *r) { l->t = t_word; switch (r->t) { case t_void: l->v.w = mpq_sgn(oqr(l)) >= 0; break; case t_word: l->v.w = mpq_cmp_si(oqr(l), r->v.w, 1) >= 0; break; case t_float: l->v.w = mpq_get_d(oqr(l)) >= r->v.d; break; case t_mpz: mpq_set_z(oqr(r), ozr(r)); l->v.w = mpq_cmp(oqr(l), oqr(r)) >= 0; break; case t_rat: mpq_set_si(oqr(r), rat_num(r->v.r), rat_den(r->v.r)); l->v.w = mpq_cmp(oqr(l), oqr(r)) >= 0; break; case t_mpq: l->v.w = mpq_cmp(oqr(l), oqr(r)) >= 0; break; case t_mpr: mpfr_set_z(orr(l), ozr(l), thr_rnd); l->v.w = mpfr_greaterequal_p(orr(l), orr(r)); break; default: ovm_raise(except_not_a_real_number); } }
SeedValue seed_mpfr_greaterequal_p (SeedContext ctx, SeedObject function, SeedObject this_object, gsize argument_count, const SeedValue args[], SeedException *exception) { mpfr_ptr rop, op; gboolean ret; CHECK_ARG_COUNT("mpfr.greaterequal_p", 1); rop = seed_object_get_private(this_object); if ( seed_value_is_object_of_class(ctx, args[0], mpfr_class) ) { op = seed_object_get_private(args[0]); } else { TYPE_EXCEPTION("mpfr.greaterequal_p", "mpfr_t"); } ret = mpfr_greaterequal_p(rop, op); return seed_value_from_boolean(ctx, ret, exception); }
bool operator >=(const real & a, const real & b) { return mpfr_greaterequal_p(a.r, b.r) != 0; }