#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 r51663 = a;
        float r51664 = b;
        float r51665 = r51663 + r51664;
        float r51666 = r51665 * r51665;
        return r51666;
}

double f_id(double a, double b) {
        double r51667 = a;
        double r51668 = b;
        double r51669 = r51667 + r51668;
        double r51670 = r51669 * r51669;
        return r51670;
}


double f_of(float a, float b) {
        float r51671 = a;
        float r51672 = b;
        float r51673 = r51671 + r51672;
        float r51674 = r51673 * r51673;
        return r51674;
}

double f_od(double a, double b) {
        double r51675 = a;
        double r51676 = b;
        double r51677 = r51675 + r51676;
        double r51678 = r51677 * r51677;
        return r51678;
}

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 r51679, r51680, r51681, r51682;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51679);
        mpfr_init(r51680);
        mpfr_init(r51681);
        mpfr_init(r51682);
}

double f_im(double a, double b) {
        mpfr_set_d(r51679, a, MPFR_RNDN);
        mpfr_set_d(r51680, b, MPFR_RNDN);
        mpfr_add(r51681, r51679, r51680, MPFR_RNDN);
        mpfr_mul(r51682, r51681, r51681, MPFR_RNDN);
        return mpfr_get_d(r51682, MPFR_RNDN);
}

static mpfr_t r51683, r51684, r51685, r51686;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51683);
        mpfr_init(r51684);
        mpfr_init(r51685);
        mpfr_init(r51686);
}

double f_fm(double a, double b) {
        mpfr_set_d(r51683, a, MPFR_RNDN);
        mpfr_set_d(r51684, b, MPFR_RNDN);
        mpfr_add(r51685, r51683, r51684, MPFR_RNDN);
        mpfr_mul(r51686, r51685, r51685, MPFR_RNDN);
        return mpfr_get_d(r51686, MPFR_RNDN);
}

static mpfr_t r51687, r51688, r51689, r51690;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51687);
        mpfr_init(r51688);
        mpfr_init(r51689);
        mpfr_init(r51690);
}

double f_dm(double a, double b) {
        mpfr_set_d(r51687, a, MPFR_RNDN);
        mpfr_set_d(r51688, b, MPFR_RNDN);
        mpfr_add(r51689, r51687, r51688, MPFR_RNDN);
        mpfr_mul(r51690, r51689, r51689, MPFR_RNDN);
        return mpfr_get_d(r51690, MPFR_RNDN);
}

