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

char *name = "Quotient of sum of exps";

double f_if(float a, float b) {
        float r24610 = a;
        float r24611 = exp(r24610);
        float r24612 = b;
        float r24613 = exp(r24612);
        float r24614 = r24611 + r24613;
        float r24615 = r24611 / r24614;
        return r24615;
}

double f_id(double a, double b) {
        double r24616 = a;
        double r24617 = exp(r24616);
        double r24618 = b;
        double r24619 = exp(r24618);
        double r24620 = r24617 + r24619;
        double r24621 = r24617 / r24620;
        return r24621;
}


double f_of(float a, float b) {
        float r24622 = a;
        float r24623 = exp(r24622);
        float r24624 = b;
        float r24625 = exp(r24624);
        float r24626 = r24623 + r24625;
        float r24627 = r24623 / r24626;
        return r24627;
}

double f_od(double a, double b) {
        double r24628 = a;
        double r24629 = exp(r24628);
        double r24630 = b;
        double r24631 = exp(r24630);
        double r24632 = r24629 + r24631;
        double r24633 = r24629 / r24632;
        return r24633;
}

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 r24634, r24635, r24636, r24637, r24638, r24639;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(4112);
        mpfr_init(r24634);
        mpfr_init(r24635);
        mpfr_init(r24636);
        mpfr_init(r24637);
        mpfr_init(r24638);
        mpfr_init(r24639);
}

double f_im(double a, double b) {
        mpfr_set_d(r24634, a, MPFR_RNDN);
        mpfr_exp(r24635, r24634, MPFR_RNDN);
        mpfr_set_d(r24636, b, MPFR_RNDN);
        mpfr_exp(r24637, r24636, MPFR_RNDN);
        mpfr_add(r24638, r24635, r24637, MPFR_RNDN);
        mpfr_div(r24639, r24635, r24638, MPFR_RNDN);
        return mpfr_get_d(r24639, MPFR_RNDN);
}

static mpfr_t r24640, r24641, r24642, r24643, r24644, r24645;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(4112);
        mpfr_init(r24640);
        mpfr_init(r24641);
        mpfr_init(r24642);
        mpfr_init(r24643);
        mpfr_init(r24644);
        mpfr_init(r24645);
}

double f_fm(double a, double b) {
        mpfr_set_d(r24640, a, MPFR_RNDN);
        mpfr_exp(r24641, r24640, MPFR_RNDN);
        mpfr_set_d(r24642, b, MPFR_RNDN);
        mpfr_exp(r24643, r24642, MPFR_RNDN);
        mpfr_add(r24644, r24641, r24643, MPFR_RNDN);
        mpfr_div(r24645, r24641, r24644, MPFR_RNDN);
        return mpfr_get_d(r24645, MPFR_RNDN);
}

static mpfr_t r24646, r24647, r24648, r24649, r24650, r24651;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(4112);
        mpfr_init(r24646);
        mpfr_init(r24647);
        mpfr_init(r24648);
        mpfr_init(r24649);
        mpfr_init(r24650);
        mpfr_init(r24651);
}

double f_dm(double a, double b) {
        mpfr_set_d(r24646, a, MPFR_RNDN);
        mpfr_exp(r24647, r24646, MPFR_RNDN);
        mpfr_set_d(r24648, b, MPFR_RNDN);
        mpfr_exp(r24649, r24648, MPFR_RNDN);
        mpfr_add(r24650, r24647, r24649, MPFR_RNDN);
        mpfr_div(r24651, r24647, r24650, MPFR_RNDN);
        return mpfr_get_d(r24651, MPFR_RNDN);
}

