#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 r51518 = a;
        float r51519 = b;
        float r51520 = r51518 + r51519;
        float r51521 = r51520 * r51520;
        return r51521;
}

double f_id(double a, double b) {
        double r51522 = a;
        double r51523 = b;
        double r51524 = r51522 + r51523;
        double r51525 = r51524 * r51524;
        return r51525;
}


double f_of(float a, float b) {
        float r51526 = a;
        float r51527 = b;
        float r51528 = r51526 + r51527;
        float r51529 = r51528 * r51528;
        return r51529;
}

double f_od(double a, double b) {
        double r51530 = a;
        double r51531 = b;
        double r51532 = r51530 + r51531;
        double r51533 = r51532 * r51532;
        return r51533;
}

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 r51534, r51535, r51536, r51537;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51534);
        mpfr_init(r51535);
        mpfr_init(r51536);
        mpfr_init(r51537);
}

double f_im(double a, double b) {
        mpfr_set_d(r51534, a, MPFR_RNDN);
        mpfr_set_d(r51535, b, MPFR_RNDN);
        mpfr_add(r51536, r51534, r51535, MPFR_RNDN);
        mpfr_mul(r51537, r51536, r51536, MPFR_RNDN);
        return mpfr_get_d(r51537, MPFR_RNDN);
}

static mpfr_t r51538, r51539, r51540, r51541;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51538);
        mpfr_init(r51539);
        mpfr_init(r51540);
        mpfr_init(r51541);
}

double f_fm(double a, double b) {
        mpfr_set_d(r51538, a, MPFR_RNDN);
        mpfr_set_d(r51539, b, MPFR_RNDN);
        mpfr_add(r51540, r51538, r51539, MPFR_RNDN);
        mpfr_mul(r51541, r51540, r51540, MPFR_RNDN);
        return mpfr_get_d(r51541, MPFR_RNDN);
}

static mpfr_t r51542, r51543, r51544, r51545;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51542);
        mpfr_init(r51543);
        mpfr_init(r51544);
        mpfr_init(r51545);
}

double f_dm(double a, double b) {
        mpfr_set_d(r51542, a, MPFR_RNDN);
        mpfr_set_d(r51543, b, MPFR_RNDN);
        mpfr_add(r51544, r51542, r51543, MPFR_RNDN);
        mpfr_mul(r51545, r51544, r51544, MPFR_RNDN);
        return mpfr_get_d(r51545, MPFR_RNDN);
}

