#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 r11143 = a;
        float r11144 = exp(r11143);
        float r11145 = b;
        float r11146 = exp(r11145);
        float r11147 = r11144 + r11146;
        float r11148 = r11144 / r11147;
        return r11148;
}

double f_id(double a, double b) {
        double r11149 = a;
        double r11150 = exp(r11149);
        double r11151 = b;
        double r11152 = exp(r11151);
        double r11153 = r11150 + r11152;
        double r11154 = r11150 / r11153;
        return r11154;
}


double f_of(float a, float b) {
        float r11155 = a;
        float r11156 = exp(r11155);
        float r11157 = b;
        float r11158 = exp(r11157);
        float r11159 = r11156 + r11158;
        float r11160 = log(r11159);
        float r11161 = r11155 - r11160;
        float r11162 = exp(r11161);
        return r11162;
}

double f_od(double a, double b) {
        double r11163 = a;
        double r11164 = exp(r11163);
        double r11165 = b;
        double r11166 = exp(r11165);
        double r11167 = r11164 + r11166;
        double r11168 = log(r11167);
        double r11169 = r11163 - r11168;
        double r11170 = exp(r11169);
        return r11170;
}

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 r11171, r11172, r11173, r11174, r11175, r11176;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11171);
        mpfr_init(r11172);
        mpfr_init(r11173);
        mpfr_init(r11174);
        mpfr_init(r11175);
        mpfr_init(r11176);
}

double f_im(double a, double b) {
        mpfr_set_d(r11171, a, MPFR_RNDN);
        mpfr_exp(r11172, r11171, MPFR_RNDN);
        mpfr_set_d(r11173, b, MPFR_RNDN);
        mpfr_exp(r11174, r11173, MPFR_RNDN);
        mpfr_add(r11175, r11172, r11174, MPFR_RNDN);
        mpfr_div(r11176, r11172, r11175, MPFR_RNDN);
        return mpfr_get_d(r11176, MPFR_RNDN);
}

static mpfr_t r11177, r11178, r11179, r11180, r11181, r11182, r11183, r11184;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11177);
        mpfr_init(r11178);
        mpfr_init(r11179);
        mpfr_init(r11180);
        mpfr_init(r11181);
        mpfr_init(r11182);
        mpfr_init(r11183);
        mpfr_init(r11184);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11177, a, MPFR_RNDN);
        mpfr_exp(r11178, r11177, MPFR_RNDN);
        mpfr_set_d(r11179, b, MPFR_RNDN);
        mpfr_exp(r11180, r11179, MPFR_RNDN);
        mpfr_add(r11181, r11178, r11180, MPFR_RNDN);
        mpfr_log(r11182, r11181, MPFR_RNDN);
        mpfr_sub(r11183, r11177, r11182, MPFR_RNDN);
        mpfr_exp(r11184, r11183, MPFR_RNDN);
        return mpfr_get_d(r11184, MPFR_RNDN);
}

static mpfr_t r11185, r11186, r11187, r11188, r11189, r11190, r11191, r11192;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11185);
        mpfr_init(r11186);
        mpfr_init(r11187);
        mpfr_init(r11188);
        mpfr_init(r11189);
        mpfr_init(r11190);
        mpfr_init(r11191);
        mpfr_init(r11192);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11185, a, MPFR_RNDN);
        mpfr_exp(r11186, r11185, MPFR_RNDN);
        mpfr_set_d(r11187, b, MPFR_RNDN);
        mpfr_exp(r11188, r11187, MPFR_RNDN);
        mpfr_add(r11189, r11186, r11188, MPFR_RNDN);
        mpfr_log(r11190, r11189, MPFR_RNDN);
        mpfr_sub(r11191, r11185, r11190, MPFR_RNDN);
        mpfr_exp(r11192, r11191, MPFR_RNDN);
        return mpfr_get_d(r11192, MPFR_RNDN);
}

