#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 r41373 = a;
        float r41374 = exp(r41373);
        float r41375 = b;
        float r41376 = exp(r41375);
        float r41377 = r41374 + r41376;
        float r41378 = r41374 / r41377;
        return r41378;
}

double f_id(double a, double b) {
        double r41379 = a;
        double r41380 = exp(r41379);
        double r41381 = b;
        double r41382 = exp(r41381);
        double r41383 = r41380 + r41382;
        double r41384 = r41380 / r41383;
        return r41384;
}


double f_of(float a, float b) {
        float r41385 = a;
        float r41386 = exp(r41385);
        float r41387 = b;
        float r41388 = exp(r41387);
        float r41389 = r41386 + r41388;
        float r41390 = r41386 / r41389;
        return r41390;
}

double f_od(double a, double b) {
        double r41391 = a;
        double r41392 = exp(r41391);
        double r41393 = b;
        double r41394 = exp(r41393);
        double r41395 = r41392 + r41394;
        double r41396 = r41392 / r41395;
        return r41396;
}

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 r41397, r41398, r41399, r41400, r41401, r41402;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r41397);
        mpfr_init(r41398);
        mpfr_init(r41399);
        mpfr_init(r41400);
        mpfr_init(r41401);
        mpfr_init(r41402);
}

double f_im(double a, double b) {
        mpfr_set_d(r41397, a, MPFR_RNDN);
        mpfr_exp(r41398, r41397, MPFR_RNDN);
        mpfr_set_d(r41399, b, MPFR_RNDN);
        mpfr_exp(r41400, r41399, MPFR_RNDN);
        mpfr_add(r41401, r41398, r41400, MPFR_RNDN);
        mpfr_div(r41402, r41398, r41401, MPFR_RNDN);
        return mpfr_get_d(r41402, MPFR_RNDN);
}

static mpfr_t r41403, r41404, r41405, r41406, r41407, r41408;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41403);
        mpfr_init(r41404);
        mpfr_init(r41405);
        mpfr_init(r41406);
        mpfr_init(r41407);
        mpfr_init(r41408);
}

double f_fm(double a, double b) {
        mpfr_set_d(r41403, a, MPFR_RNDN);
        mpfr_exp(r41404, r41403, MPFR_RNDN);
        mpfr_set_d(r41405, b, MPFR_RNDN);
        mpfr_exp(r41406, r41405, MPFR_RNDN);
        mpfr_add(r41407, r41404, r41406, MPFR_RNDN);
        mpfr_div(r41408, r41404, r41407, MPFR_RNDN);
        return mpfr_get_d(r41408, MPFR_RNDN);
}

static mpfr_t r41409, r41410, r41411, r41412, r41413, r41414;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41409);
        mpfr_init(r41410);
        mpfr_init(r41411);
        mpfr_init(r41412);
        mpfr_init(r41413);
        mpfr_init(r41414);
}

double f_dm(double a, double b) {
        mpfr_set_d(r41409, a, MPFR_RNDN);
        mpfr_exp(r41410, r41409, MPFR_RNDN);
        mpfr_set_d(r41411, b, MPFR_RNDN);
        mpfr_exp(r41412, r41411, MPFR_RNDN);
        mpfr_add(r41413, r41410, r41412, MPFR_RNDN);
        mpfr_div(r41414, r41410, r41413, MPFR_RNDN);
        return mpfr_get_d(r41414, MPFR_RNDN);
}

