#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 r11070 = a;
        float r11071 = exp(r11070);
        float r11072 = b;
        float r11073 = exp(r11072);
        float r11074 = r11071 + r11073;
        float r11075 = r11071 / r11074;
        return r11075;
}

double f_id(double a, double b) {
        double r11076 = a;
        double r11077 = exp(r11076);
        double r11078 = b;
        double r11079 = exp(r11078);
        double r11080 = r11077 + r11079;
        double r11081 = r11077 / r11080;
        return r11081;
}


double f_of(float a, float b) {
        float r11082 = a;
        float r11083 = exp(r11082);
        float r11084 = b;
        float r11085 = exp(r11084);
        float r11086 = r11083 + r11085;
        float r11087 = log(r11086);
        float r11088 = r11082 - r11087;
        float r11089 = exp(r11088);
        return r11089;
}

double f_od(double a, double b) {
        double r11090 = a;
        double r11091 = exp(r11090);
        double r11092 = b;
        double r11093 = exp(r11092);
        double r11094 = r11091 + r11093;
        double r11095 = log(r11094);
        double r11096 = r11090 - r11095;
        double r11097 = exp(r11096);
        return r11097;
}

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 r11098, r11099, r11100, r11101, r11102, r11103;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11098);
        mpfr_init(r11099);
        mpfr_init(r11100);
        mpfr_init(r11101);
        mpfr_init(r11102);
        mpfr_init(r11103);
}

double f_im(double a, double b) {
        mpfr_set_d(r11098, a, MPFR_RNDN);
        mpfr_exp(r11099, r11098, MPFR_RNDN);
        mpfr_set_d(r11100, b, MPFR_RNDN);
        mpfr_exp(r11101, r11100, MPFR_RNDN);
        mpfr_add(r11102, r11099, r11101, MPFR_RNDN);
        mpfr_div(r11103, r11099, r11102, MPFR_RNDN);
        return mpfr_get_d(r11103, MPFR_RNDN);
}

static mpfr_t r11104, r11105, r11106, r11107, r11108, r11109, r11110, r11111;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11104);
        mpfr_init(r11105);
        mpfr_init(r11106);
        mpfr_init(r11107);
        mpfr_init(r11108);
        mpfr_init(r11109);
        mpfr_init(r11110);
        mpfr_init(r11111);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11104, a, MPFR_RNDN);
        mpfr_exp(r11105, r11104, MPFR_RNDN);
        mpfr_set_d(r11106, b, MPFR_RNDN);
        mpfr_exp(r11107, r11106, MPFR_RNDN);
        mpfr_add(r11108, r11105, r11107, MPFR_RNDN);
        mpfr_log(r11109, r11108, MPFR_RNDN);
        mpfr_sub(r11110, r11104, r11109, MPFR_RNDN);
        mpfr_exp(r11111, r11110, MPFR_RNDN);
        return mpfr_get_d(r11111, MPFR_RNDN);
}

static mpfr_t r11112, r11113, r11114, r11115, r11116, r11117, r11118, r11119;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11112);
        mpfr_init(r11113);
        mpfr_init(r11114);
        mpfr_init(r11115);
        mpfr_init(r11116);
        mpfr_init(r11117);
        mpfr_init(r11118);
        mpfr_init(r11119);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11112, a, MPFR_RNDN);
        mpfr_exp(r11113, r11112, MPFR_RNDN);
        mpfr_set_d(r11114, b, MPFR_RNDN);
        mpfr_exp(r11115, r11114, MPFR_RNDN);
        mpfr_add(r11116, r11113, r11115, MPFR_RNDN);
        mpfr_log(r11117, r11116, MPFR_RNDN);
        mpfr_sub(r11118, r11112, r11117, MPFR_RNDN);
        mpfr_exp(r11119, r11118, MPFR_RNDN);
        return mpfr_get_d(r11119, MPFR_RNDN);
}

