#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 r50960 = a;
        float r50961 = b;
        float r50962 = r50960 + r50961;
        float r50963 = r50962 * r50962;
        return r50963;
}

double f_id(double a, double b) {
        double r50964 = a;
        double r50965 = b;
        double r50966 = r50964 + r50965;
        double r50967 = r50966 * r50966;
        return r50967;
}


double f_of(float a, float b) {
        float r50968 = a;
        float r50969 = b;
        float r50970 = r50968 + r50969;
        float r50971 = r50970 * r50970;
        return r50971;
}

double f_od(double a, double b) {
        double r50972 = a;
        double r50973 = b;
        double r50974 = r50972 + r50973;
        double r50975 = r50974 * r50974;
        return r50975;
}

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 r50976, r50977, r50978, r50979;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50976);
        mpfr_init(r50977);
        mpfr_init(r50978);
        mpfr_init(r50979);
}

double f_im(double a, double b) {
        mpfr_set_d(r50976, a, MPFR_RNDN);
        mpfr_set_d(r50977, b, MPFR_RNDN);
        mpfr_add(r50978, r50976, r50977, MPFR_RNDN);
        mpfr_mul(r50979, r50978, r50978, MPFR_RNDN);
        return mpfr_get_d(r50979, MPFR_RNDN);
}

static mpfr_t r50980, r50981, r50982, r50983;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50980);
        mpfr_init(r50981);
        mpfr_init(r50982);
        mpfr_init(r50983);
}

double f_fm(double a, double b) {
        mpfr_set_d(r50980, a, MPFR_RNDN);
        mpfr_set_d(r50981, b, MPFR_RNDN);
        mpfr_add(r50982, r50980, r50981, MPFR_RNDN);
        mpfr_mul(r50983, r50982, r50982, MPFR_RNDN);
        return mpfr_get_d(r50983, MPFR_RNDN);
}

static mpfr_t r50984, r50985, r50986, r50987;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50984);
        mpfr_init(r50985);
        mpfr_init(r50986);
        mpfr_init(r50987);
}

double f_dm(double a, double b) {
        mpfr_set_d(r50984, a, MPFR_RNDN);
        mpfr_set_d(r50985, b, MPFR_RNDN);
        mpfr_add(r50986, r50984, r50985, MPFR_RNDN);
        mpfr_mul(r50987, r50986, r50986, MPFR_RNDN);
        return mpfr_get_d(r50987, MPFR_RNDN);
}

