#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Numeric.Interval.Internal:scale from intervals-0.7.1, B";

double f_if(float x, float y) {
        float r28029 = x;
        float r28030 = y;
        float r28031 = r28029 * r28030;
        float r28032 = 2.0;
        float r28033 = r28031 / r28032;
        return r28033;
}

double f_id(double x, double y) {
        double r28034 = x;
        double r28035 = y;
        double r28036 = r28034 * r28035;
        double r28037 = 2.0;
        double r28038 = r28036 / r28037;
        return r28038;
}


double f_of(float x, float y) {
        float r28039 = x;
        float r28040 = y;
        float r28041 = r28039 * r28040;
        float r28042 = 2.0;
        float r28043 = r28041 / r28042;
        return r28043;
}

double f_od(double x, double y) {
        double r28044 = x;
        double r28045 = y;
        double r28046 = r28044 * r28045;
        double r28047 = 2.0;
        double r28048 = r28046 / r28047;
        return r28048;
}

void mpfr_fmod2(mpfr_t r, mpfr_t n, mpfr_t d, mpfr_rnd_t rmd) {
        mpfr_fmod(r, n, d, rmd);
        if (mpfr_cmp_ui(r, 0) < 0) mpfr_add(r, r, d, rmd);
}


static mpfr_t r28049, r28050, r28051, r28052, r28053;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r28049);
        mpfr_init(r28050);
        mpfr_init(r28051);
        mpfr_init_set_str(r28052, "2.0", 10, MPFR_RNDN);
        mpfr_init(r28053);
}

double f_im(double x, double y) {
        mpfr_set_d(r28049, x, MPFR_RNDN);
        mpfr_set_d(r28050, y, MPFR_RNDN);
        mpfr_mul(r28051, r28049, r28050, MPFR_RNDN);
        ;
        mpfr_div(r28053, r28051, r28052, MPFR_RNDN);
        return mpfr_get_d(r28053, MPFR_RNDN);
}

static mpfr_t r28054, r28055, r28056, r28057, r28058;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28054);
        mpfr_init(r28055);
        mpfr_init(r28056);
        mpfr_init_set_str(r28057, "2.0", 10, MPFR_RNDN);
        mpfr_init(r28058);
}

double f_fm(double x, double y) {
        mpfr_set_d(r28054, x, MPFR_RNDN);
        mpfr_set_d(r28055, y, MPFR_RNDN);
        mpfr_mul(r28056, r28054, r28055, MPFR_RNDN);
        ;
        mpfr_div(r28058, r28056, r28057, MPFR_RNDN);
        return mpfr_get_d(r28058, MPFR_RNDN);
}

static mpfr_t r28059, r28060, r28061, r28062, r28063;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28059);
        mpfr_init(r28060);
        mpfr_init(r28061);
        mpfr_init_set_str(r28062, "2.0", 10, MPFR_RNDN);
        mpfr_init(r28063);
}

double f_dm(double x, double y) {
        mpfr_set_d(r28059, x, MPFR_RNDN);
        mpfr_set_d(r28060, y, MPFR_RNDN);
        mpfr_mul(r28061, r28059, r28060, MPFR_RNDN);
        ;
        mpfr_div(r28063, r28061, r28062, MPFR_RNDN);
        return mpfr_get_d(r28063, MPFR_RNDN);
}

