#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 r16281343 = a;
        float r16281344 = b;
        float r16281345 = r16281343 + r16281344;
        float r16281346 = r16281345 * r16281345;
        return r16281346;
}

double f_id(double a, double b) {
        double r16281347 = a;
        double r16281348 = b;
        double r16281349 = r16281347 + r16281348;
        double r16281350 = r16281349 * r16281349;
        return r16281350;
}


double f_of(float a, float b) {
        float r16281351 = a;
        float r16281352 = b;
        float r16281353 = r16281351 + r16281352;
        float r16281354 = r16281353 * r16281353;
        return r16281354;
}

double f_od(double a, double b) {
        double r16281355 = a;
        double r16281356 = b;
        double r16281357 = r16281355 + r16281356;
        double r16281358 = r16281357 * r16281357;
        return r16281358;
}

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 r16281359, r16281360, r16281361, r16281362;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r16281359);
        mpfr_init(r16281360);
        mpfr_init(r16281361);
        mpfr_init(r16281362);
}

double f_im(double a, double b) {
        mpfr_set_d(r16281359, a, MPFR_RNDN);
        mpfr_set_d(r16281360, b, MPFR_RNDN);
        mpfr_add(r16281361, r16281359, r16281360, MPFR_RNDN);
        mpfr_mul(r16281362, r16281361, r16281361, MPFR_RNDN);
        return mpfr_get_d(r16281362, MPFR_RNDN);
}

static mpfr_t r16281363, r16281364, r16281365, r16281366;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r16281363);
        mpfr_init(r16281364);
        mpfr_init(r16281365);
        mpfr_init(r16281366);
}

double f_fm(double a, double b) {
        mpfr_set_d(r16281363, a, MPFR_RNDN);
        mpfr_set_d(r16281364, b, MPFR_RNDN);
        mpfr_add(r16281365, r16281363, r16281364, MPFR_RNDN);
        mpfr_mul(r16281366, r16281365, r16281365, MPFR_RNDN);
        return mpfr_get_d(r16281366, MPFR_RNDN);
}

static mpfr_t r16281367, r16281368, r16281369, r16281370;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r16281367);
        mpfr_init(r16281368);
        mpfr_init(r16281369);
        mpfr_init(r16281370);
}

double f_dm(double a, double b) {
        mpfr_set_d(r16281367, a, MPFR_RNDN);
        mpfr_set_d(r16281368, b, MPFR_RNDN);
        mpfr_add(r16281369, r16281367, r16281368, MPFR_RNDN);
        mpfr_mul(r16281370, r16281369, r16281369, MPFR_RNDN);
        return mpfr_get_d(r16281370, MPFR_RNDN);
}

