#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 r11035 = a;
        float r11036 = exp(r11035);
        float r11037 = b;
        float r11038 = exp(r11037);
        float r11039 = r11036 + r11038;
        float r11040 = r11036 / r11039;
        return r11040;
}

double f_id(double a, double b) {
        double r11041 = a;
        double r11042 = exp(r11041);
        double r11043 = b;
        double r11044 = exp(r11043);
        double r11045 = r11042 + r11044;
        double r11046 = r11042 / r11045;
        return r11046;
}


double f_of(float a, float b) {
        float r11047 = a;
        float r11048 = exp(r11047);
        float r11049 = b;
        float r11050 = exp(r11049);
        float r11051 = r11048 + r11050;
        float r11052 = r11048 / r11051;
        return r11052;
}

double f_od(double a, double b) {
        double r11053 = a;
        double r11054 = exp(r11053);
        double r11055 = b;
        double r11056 = exp(r11055);
        double r11057 = r11054 + r11056;
        double r11058 = r11054 / r11057;
        return r11058;
}

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 r11059, r11060, r11061, r11062, r11063, r11064;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11059);
        mpfr_init(r11060);
        mpfr_init(r11061);
        mpfr_init(r11062);
        mpfr_init(r11063);
        mpfr_init(r11064);
}

double f_im(double a, double b) {
        mpfr_set_d(r11059, a, MPFR_RNDN);
        mpfr_exp(r11060, r11059, MPFR_RNDN);
        mpfr_set_d(r11061, b, MPFR_RNDN);
        mpfr_exp(r11062, r11061, MPFR_RNDN);
        mpfr_add(r11063, r11060, r11062, MPFR_RNDN);
        mpfr_div(r11064, r11060, r11063, MPFR_RNDN);
        return mpfr_get_d(r11064, MPFR_RNDN);
}

static mpfr_t r11065, r11066, r11067, r11068, r11069, r11070;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11065);
        mpfr_init(r11066);
        mpfr_init(r11067);
        mpfr_init(r11068);
        mpfr_init(r11069);
        mpfr_init(r11070);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11065, a, MPFR_RNDN);
        mpfr_exp(r11066, r11065, MPFR_RNDN);
        mpfr_set_d(r11067, b, MPFR_RNDN);
        mpfr_exp(r11068, r11067, MPFR_RNDN);
        mpfr_add(r11069, r11066, r11068, MPFR_RNDN);
        mpfr_div(r11070, r11066, r11069, MPFR_RNDN);
        return mpfr_get_d(r11070, MPFR_RNDN);
}

static mpfr_t r11071, r11072, r11073, r11074, r11075, r11076;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11071);
        mpfr_init(r11072);
        mpfr_init(r11073);
        mpfr_init(r11074);
        mpfr_init(r11075);
        mpfr_init(r11076);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11071, a, MPFR_RNDN);
        mpfr_exp(r11072, r11071, MPFR_RNDN);
        mpfr_set_d(r11073, b, MPFR_RNDN);
        mpfr_exp(r11074, r11073, MPFR_RNDN);
        mpfr_add(r11075, r11072, r11074, MPFR_RNDN);
        mpfr_div(r11076, r11072, r11075, MPFR_RNDN);
        return mpfr_get_d(r11076, MPFR_RNDN);
}

