MpfrFloat MpfrFloat::dim(const MpfrFloat& value1, const MpfrFloat& value2) { MpfrFloat retval(MpfrFloat::kNoInitialization); mpfr_dim(retval.mData->mFloat, value1.mData->mFloat, value2.mData->mFloat, GMP_RNDN); return retval; }
SeedValue seed_mpfr_dim (SeedContext ctx, SeedObject function, SeedObject this_object, gsize argument_count, const SeedValue args[], SeedException *exception) { mpfr_rnd_t rnd; mpfr_ptr rop, op1, op2; gint ret; CHECK_ARG_COUNT("mpfr.dim", 3); rop = seed_object_get_private(this_object); rnd = seed_value_to_mpfr_rnd_t(ctx, args[2], exception); if ( seed_value_is_object_of_class(ctx, args[0], mpfr_class) && seed_value_is_object_of_class(ctx, args[1], mpfr_class)) { op1 = seed_object_get_private(args[0]); op2 = seed_object_get_private(args[1]); } else { TYPE_EXCEPTION("mpfr.dim", "mpfr_t"); } ret = mpfr_dim(rop, op1, op2, rnd); return seed_value_from_int(ctx, ret, exception); }
int main (void) { mpfr_t x, y, z; tests_start_mpfr (); mpfr_init (x); mpfr_init (y); mpfr_init (z); /* case x=NaN */ mpfr_set_nan (x); mpfr_set_ui (y, 0, MPFR_RNDN); mpfr_dim (z, x, y, MPFR_RNDN); if (!mpfr_nan_p (z)) { printf ("Error in mpfr_dim (NaN, 0)\n"); exit (1); } /* case x=+Inf */ mpfr_set_inf (x, 1); mpfr_set_ui (y, 0, MPFR_RNDN); mpfr_dim (z, x, y, MPFR_RNDN); if (!mpfr_inf_p (z) || mpfr_sgn (z) < 0) { printf ("Error in mpfr_dim (+Inf, 0)\n"); exit (1); } /* case x=-Inf */ mpfr_set_inf (x, -1); mpfr_set_ui (y, 0, MPFR_RNDN); mpfr_dim (z, x, y, MPFR_RNDN); if (mpfr_cmp_ui (z, 0) || mpfr_sgn (z) < 0) { printf ("Error in mpfr_dim (-Inf, 0)\n"); exit (1); } /* case x=y=+Inf */ mpfr_set_inf (x, 1); mpfr_set_inf (y, 1); mpfr_dim (z, x, y, MPFR_RNDN); if (mpfr_cmp_ui (z, 0) || mpfr_sgn (z) < 0) { printf ("Error in mpfr_dim (+Inf, +Inf)\n"); exit (1); } /* case x > y */ mpfr_set_ui (x, 2, MPFR_RNDN); mpfr_set_ui (y, 1, MPFR_RNDN); mpfr_dim (z, x, y, MPFR_RNDN); if (mpfr_cmp_ui (z, 1)) { printf ("Error in mpfr_dim (2, 1)\n"); exit (1); } /* case x < y */ mpfr_set_ui (x, 1, MPFR_RNDN); mpfr_set_ui (y, 2, MPFR_RNDN); mpfr_dim (z, x, y, MPFR_RNDN); if (mpfr_cmp_ui (z, 0)) { printf ("Error in mpfr_dim (1, 2)\n"); exit (1); } mpfr_clear (x); mpfr_clear (y); mpfr_clear (z); test_generic (MPFR_PREC_MIN, 220, 42); tests_end_mpfr (); return 0; }