#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 r41268 = a;
        float r41269 = exp(r41268);
        float r41270 = b;
        float r41271 = exp(r41270);
        float r41272 = r41269 + r41271;
        float r41273 = r41269 / r41272;
        return r41273;
}

double f_id(double a, double b) {
        double r41274 = a;
        double r41275 = exp(r41274);
        double r41276 = b;
        double r41277 = exp(r41276);
        double r41278 = r41275 + r41277;
        double r41279 = r41275 / r41278;
        return r41279;
}


double f_of(float a, float b) {
        float r41280 = a;
        float r41281 = exp(r41280);
        float r41282 = b;
        float r41283 = exp(r41282);
        float r41284 = r41281 + r41283;
        float r41285 = r41281 / r41284;
        return r41285;
}

double f_od(double a, double b) {
        double r41286 = a;
        double r41287 = exp(r41286);
        double r41288 = b;
        double r41289 = exp(r41288);
        double r41290 = r41287 + r41289;
        double r41291 = r41287 / r41290;
        return r41291;
}

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 r41292, r41293, r41294, r41295, r41296, r41297;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r41292);
        mpfr_init(r41293);
        mpfr_init(r41294);
        mpfr_init(r41295);
        mpfr_init(r41296);
        mpfr_init(r41297);
}

double f_im(double a, double b) {
        mpfr_set_d(r41292, a, MPFR_RNDN);
        mpfr_exp(r41293, r41292, MPFR_RNDN);
        mpfr_set_d(r41294, b, MPFR_RNDN);
        mpfr_exp(r41295, r41294, MPFR_RNDN);
        mpfr_add(r41296, r41293, r41295, MPFR_RNDN);
        mpfr_div(r41297, r41293, r41296, MPFR_RNDN);
        return mpfr_get_d(r41297, MPFR_RNDN);
}

static mpfr_t r41298, r41299, r41300, r41301, r41302, r41303;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41298);
        mpfr_init(r41299);
        mpfr_init(r41300);
        mpfr_init(r41301);
        mpfr_init(r41302);
        mpfr_init(r41303);
}

double f_fm(double a, double b) {
        mpfr_set_d(r41298, a, MPFR_RNDN);
        mpfr_exp(r41299, r41298, MPFR_RNDN);
        mpfr_set_d(r41300, b, MPFR_RNDN);
        mpfr_exp(r41301, r41300, MPFR_RNDN);
        mpfr_add(r41302, r41299, r41301, MPFR_RNDN);
        mpfr_div(r41303, r41299, r41302, MPFR_RNDN);
        return mpfr_get_d(r41303, MPFR_RNDN);
}

static mpfr_t r41304, r41305, r41306, r41307, r41308, r41309;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41304);
        mpfr_init(r41305);
        mpfr_init(r41306);
        mpfr_init(r41307);
        mpfr_init(r41308);
        mpfr_init(r41309);
}

double f_dm(double a, double b) {
        mpfr_set_d(r41304, a, MPFR_RNDN);
        mpfr_exp(r41305, r41304, MPFR_RNDN);
        mpfr_set_d(r41306, b, MPFR_RNDN);
        mpfr_exp(r41307, r41306, MPFR_RNDN);
        mpfr_add(r41308, r41305, r41307, MPFR_RNDN);
        mpfr_div(r41309, r41305, r41308, MPFR_RNDN);
        return mpfr_get_d(r41309, MPFR_RNDN);
}

