#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 r27161 = a;
        float r27162 = exp(r27161);
        float r27163 = b;
        float r27164 = exp(r27163);
        float r27165 = r27162 + r27164;
        float r27166 = r27162 / r27165;
        return r27166;
}

double f_id(double a, double b) {
        double r27167 = a;
        double r27168 = exp(r27167);
        double r27169 = b;
        double r27170 = exp(r27169);
        double r27171 = r27168 + r27170;
        double r27172 = r27168 / r27171;
        return r27172;
}


double f_of(float a, float b) {
        float r27173 = a;
        float r27174 = exp(r27173);
        float r27175 = b;
        float r27176 = exp(r27175);
        float r27177 = r27174 + r27176;
        float r27178 = r27174 / r27177;
        float r27179 = log1p(r27178);
        float r27180 = expm1(r27179);
        return r27180;
}

double f_od(double a, double b) {
        double r27181 = a;
        double r27182 = exp(r27181);
        double r27183 = b;
        double r27184 = exp(r27183);
        double r27185 = r27182 + r27184;
        double r27186 = r27182 / r27185;
        double r27187 = log1p(r27186);
        double r27188 = expm1(r27187);
        return r27188;
}

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 r27189, r27190, r27191, r27192, r27193, r27194;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27189);
        mpfr_init(r27190);
        mpfr_init(r27191);
        mpfr_init(r27192);
        mpfr_init(r27193);
        mpfr_init(r27194);
}

double f_im(double a, double b) {
        mpfr_set_d(r27189, a, MPFR_RNDN);
        mpfr_exp(r27190, r27189, MPFR_RNDN);
        mpfr_set_d(r27191, b, MPFR_RNDN);
        mpfr_exp(r27192, r27191, MPFR_RNDN);
        mpfr_add(r27193, r27190, r27192, MPFR_RNDN);
        mpfr_div(r27194, r27190, r27193, MPFR_RNDN);
        return mpfr_get_d(r27194, MPFR_RNDN);
}

static mpfr_t r27195, r27196, r27197, r27198, r27199, r27200, r27201, r27202;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27195);
        mpfr_init(r27196);
        mpfr_init(r27197);
        mpfr_init(r27198);
        mpfr_init(r27199);
        mpfr_init(r27200);
        mpfr_init(r27201);
        mpfr_init(r27202);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27195, a, MPFR_RNDN);
        mpfr_exp(r27196, r27195, MPFR_RNDN);
        mpfr_set_d(r27197, b, MPFR_RNDN);
        mpfr_exp(r27198, r27197, MPFR_RNDN);
        mpfr_add(r27199, r27196, r27198, MPFR_RNDN);
        mpfr_div(r27200, r27196, r27199, MPFR_RNDN);
        mpfr_log1p(r27201, r27200, MPFR_RNDN);
        mpfr_expm1(r27202, r27201, MPFR_RNDN);
        return mpfr_get_d(r27202, MPFR_RNDN);
}

static mpfr_t r27203, r27204, r27205, r27206, r27207, r27208, r27209, r27210;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27203);
        mpfr_init(r27204);
        mpfr_init(r27205);
        mpfr_init(r27206);
        mpfr_init(r27207);
        mpfr_init(r27208);
        mpfr_init(r27209);
        mpfr_init(r27210);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27203, a, MPFR_RNDN);
        mpfr_exp(r27204, r27203, MPFR_RNDN);
        mpfr_set_d(r27205, b, MPFR_RNDN);
        mpfr_exp(r27206, r27205, MPFR_RNDN);
        mpfr_add(r27207, r27204, r27206, MPFR_RNDN);
        mpfr_div(r27208, r27204, r27207, MPFR_RNDN);
        mpfr_log1p(r27209, r27208, MPFR_RNDN);
        mpfr_expm1(r27210, r27209, MPFR_RNDN);
        return mpfr_get_d(r27210, MPFR_RNDN);
}

