#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 r37507 = a;
        float r37508 = exp(r37507);
        float r37509 = b;
        float r37510 = exp(r37509);
        float r37511 = r37508 + r37510;
        float r37512 = r37508 / r37511;
        return r37512;
}

double f_id(double a, double b) {
        double r37513 = a;
        double r37514 = exp(r37513);
        double r37515 = b;
        double r37516 = exp(r37515);
        double r37517 = r37514 + r37516;
        double r37518 = r37514 / r37517;
        return r37518;
}


double f_of(float a, float b) {
        float r37519 = a;
        float r37520 = exp(r37519);
        float r37521 = b;
        float r37522 = exp(r37521);
        float r37523 = r37520 + r37522;
        float r37524 = log(r37523);
        float r37525 = r37519 - r37524;
        float r37526 = exp(r37525);
        return r37526;
}

double f_od(double a, double b) {
        double r37527 = a;
        double r37528 = exp(r37527);
        double r37529 = b;
        double r37530 = exp(r37529);
        double r37531 = r37528 + r37530;
        double r37532 = log(r37531);
        double r37533 = r37527 - r37532;
        double r37534 = exp(r37533);
        return r37534;
}

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 r37535, r37536, r37537, r37538, r37539, r37540;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r37535);
        mpfr_init(r37536);
        mpfr_init(r37537);
        mpfr_init(r37538);
        mpfr_init(r37539);
        mpfr_init(r37540);
}

double f_im(double a, double b) {
        mpfr_set_d(r37535, a, MPFR_RNDN);
        mpfr_exp(r37536, r37535, MPFR_RNDN);
        mpfr_set_d(r37537, b, MPFR_RNDN);
        mpfr_exp(r37538, r37537, MPFR_RNDN);
        mpfr_add(r37539, r37536, r37538, MPFR_RNDN);
        mpfr_div(r37540, r37536, r37539, MPFR_RNDN);
        return mpfr_get_d(r37540, MPFR_RNDN);
}

static mpfr_t r37541, r37542, r37543, r37544, r37545, r37546, r37547, r37548;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r37541);
        mpfr_init(r37542);
        mpfr_init(r37543);
        mpfr_init(r37544);
        mpfr_init(r37545);
        mpfr_init(r37546);
        mpfr_init(r37547);
        mpfr_init(r37548);
}

double f_fm(double a, double b) {
        mpfr_set_d(r37541, a, MPFR_RNDN);
        mpfr_exp(r37542, r37541, MPFR_RNDN);
        mpfr_set_d(r37543, b, MPFR_RNDN);
        mpfr_exp(r37544, r37543, MPFR_RNDN);
        mpfr_add(r37545, r37542, r37544, MPFR_RNDN);
        mpfr_log(r37546, r37545, MPFR_RNDN);
        mpfr_sub(r37547, r37541, r37546, MPFR_RNDN);
        mpfr_exp(r37548, r37547, MPFR_RNDN);
        return mpfr_get_d(r37548, MPFR_RNDN);
}

static mpfr_t r37549, r37550, r37551, r37552, r37553, r37554, r37555, r37556;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r37549);
        mpfr_init(r37550);
        mpfr_init(r37551);
        mpfr_init(r37552);
        mpfr_init(r37553);
        mpfr_init(r37554);
        mpfr_init(r37555);
        mpfr_init(r37556);
}

double f_dm(double a, double b) {
        mpfr_set_d(r37549, a, MPFR_RNDN);
        mpfr_exp(r37550, r37549, MPFR_RNDN);
        mpfr_set_d(r37551, b, MPFR_RNDN);
        mpfr_exp(r37552, r37551, MPFR_RNDN);
        mpfr_add(r37553, r37550, r37552, MPFR_RNDN);
        mpfr_log(r37554, r37553, MPFR_RNDN);
        mpfr_sub(r37555, r37549, r37554, MPFR_RNDN);
        mpfr_exp(r37556, r37555, MPFR_RNDN);
        return mpfr_get_d(r37556, MPFR_RNDN);
}

