#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 r40927 = a;
        float r40928 = exp(r40927);
        float r40929 = b;
        float r40930 = exp(r40929);
        float r40931 = r40928 + r40930;
        float r40932 = r40928 / r40931;
        return r40932;
}

double f_id(double a, double b) {
        double r40933 = a;
        double r40934 = exp(r40933);
        double r40935 = b;
        double r40936 = exp(r40935);
        double r40937 = r40934 + r40936;
        double r40938 = r40934 / r40937;
        return r40938;
}


double f_of(float a, float b) {
        float r40939 = a;
        float r40940 = exp(r40939);
        float r40941 = b;
        float r40942 = exp(r40941);
        float r40943 = r40940 + r40942;
        float r40944 = r40940 / r40943;
        return r40944;
}

double f_od(double a, double b) {
        double r40945 = a;
        double r40946 = exp(r40945);
        double r40947 = b;
        double r40948 = exp(r40947);
        double r40949 = r40946 + r40948;
        double r40950 = r40946 / r40949;
        return r40950;
}

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 r40951, r40952, r40953, r40954, r40955, r40956;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r40951);
        mpfr_init(r40952);
        mpfr_init(r40953);
        mpfr_init(r40954);
        mpfr_init(r40955);
        mpfr_init(r40956);
}

double f_im(double a, double b) {
        mpfr_set_d(r40951, a, MPFR_RNDN);
        mpfr_exp(r40952, r40951, MPFR_RNDN);
        mpfr_set_d(r40953, b, MPFR_RNDN);
        mpfr_exp(r40954, r40953, MPFR_RNDN);
        mpfr_add(r40955, r40952, r40954, MPFR_RNDN);
        mpfr_div(r40956, r40952, r40955, MPFR_RNDN);
        return mpfr_get_d(r40956, MPFR_RNDN);
}

static mpfr_t r40957, r40958, r40959, r40960, r40961, r40962;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40957);
        mpfr_init(r40958);
        mpfr_init(r40959);
        mpfr_init(r40960);
        mpfr_init(r40961);
        mpfr_init(r40962);
}

double f_fm(double a, double b) {
        mpfr_set_d(r40957, a, MPFR_RNDN);
        mpfr_exp(r40958, r40957, MPFR_RNDN);
        mpfr_set_d(r40959, b, MPFR_RNDN);
        mpfr_exp(r40960, r40959, MPFR_RNDN);
        mpfr_add(r40961, r40958, r40960, MPFR_RNDN);
        mpfr_div(r40962, r40958, r40961, MPFR_RNDN);
        return mpfr_get_d(r40962, MPFR_RNDN);
}

static mpfr_t r40963, r40964, r40965, r40966, r40967, r40968;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r40963);
        mpfr_init(r40964);
        mpfr_init(r40965);
        mpfr_init(r40966);
        mpfr_init(r40967);
        mpfr_init(r40968);
}

double f_dm(double a, double b) {
        mpfr_set_d(r40963, a, MPFR_RNDN);
        mpfr_exp(r40964, r40963, MPFR_RNDN);
        mpfr_set_d(r40965, b, MPFR_RNDN);
        mpfr_exp(r40966, r40965, MPFR_RNDN);
        mpfr_add(r40967, r40964, r40966, MPFR_RNDN);
        mpfr_div(r40968, r40964, r40967, MPFR_RNDN);
        return mpfr_get_d(r40968, MPFR_RNDN);
}

