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

char *name = "Expression 4, p15";

double f_if(float a, float b) {
        float r51607 = a;
        float r51608 = b;
        float r51609 = r51607 + r51608;
        float r51610 = r51609 * r51609;
        return r51610;
}

double f_id(double a, double b) {
        double r51611 = a;
        double r51612 = b;
        double r51613 = r51611 + r51612;
        double r51614 = r51613 * r51613;
        return r51614;
}


double f_of(float a, float b) {
        float r51615 = a;
        float r51616 = b;
        float r51617 = r51615 + r51616;
        float r51618 = r51617 * r51617;
        return r51618;
}

double f_od(double a, double b) {
        double r51619 = a;
        double r51620 = b;
        double r51621 = r51619 + r51620;
        double r51622 = r51621 * r51621;
        return r51622;
}

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 r51623, r51624, r51625, r51626;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51623);
        mpfr_init(r51624);
        mpfr_init(r51625);
        mpfr_init(r51626);
}

double f_im(double a, double b) {
        mpfr_set_d(r51623, a, MPFR_RNDN);
        mpfr_set_d(r51624, b, MPFR_RNDN);
        mpfr_add(r51625, r51623, r51624, MPFR_RNDN);
        mpfr_mul(r51626, r51625, r51625, MPFR_RNDN);
        return mpfr_get_d(r51626, MPFR_RNDN);
}

static mpfr_t r51627, r51628, r51629, r51630;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51627);
        mpfr_init(r51628);
        mpfr_init(r51629);
        mpfr_init(r51630);
}

double f_fm(double a, double b) {
        mpfr_set_d(r51627, a, MPFR_RNDN);
        mpfr_set_d(r51628, b, MPFR_RNDN);
        mpfr_add(r51629, r51627, r51628, MPFR_RNDN);
        mpfr_mul(r51630, r51629, r51629, MPFR_RNDN);
        return mpfr_get_d(r51630, MPFR_RNDN);
}

static mpfr_t r51631, r51632, r51633, r51634;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51631);
        mpfr_init(r51632);
        mpfr_init(r51633);
        mpfr_init(r51634);
}

double f_dm(double a, double b) {
        mpfr_set_d(r51631, a, MPFR_RNDN);
        mpfr_set_d(r51632, b, MPFR_RNDN);
        mpfr_add(r51633, r51631, r51632, MPFR_RNDN);
        mpfr_mul(r51634, r51633, r51633, MPFR_RNDN);
        return mpfr_get_d(r51634, MPFR_RNDN);
}

