#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 r10993 = a;
        float r10994 = exp(r10993);
        float r10995 = b;
        float r10996 = exp(r10995);
        float r10997 = r10994 + r10996;
        float r10998 = r10994 / r10997;
        return r10998;
}

double f_id(double a, double b) {
        double r10999 = a;
        double r11000 = exp(r10999);
        double r11001 = b;
        double r11002 = exp(r11001);
        double r11003 = r11000 + r11002;
        double r11004 = r11000 / r11003;
        return r11004;
}


double f_of(float a, float b) {
        float r11005 = a;
        float r11006 = exp(r11005);
        float r11007 = b;
        float r11008 = exp(r11007);
        float r11009 = r11006 + r11008;
        float r11010 = r11006 / r11009;
        return r11010;
}

double f_od(double a, double b) {
        double r11011 = a;
        double r11012 = exp(r11011);
        double r11013 = b;
        double r11014 = exp(r11013);
        double r11015 = r11012 + r11014;
        double r11016 = r11012 / r11015;
        return r11016;
}

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 r11017, r11018, r11019, r11020, r11021, r11022;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11017);
        mpfr_init(r11018);
        mpfr_init(r11019);
        mpfr_init(r11020);
        mpfr_init(r11021);
        mpfr_init(r11022);
}

double f_im(double a, double b) {
        mpfr_set_d(r11017, a, MPFR_RNDN);
        mpfr_exp(r11018, r11017, MPFR_RNDN);
        mpfr_set_d(r11019, b, MPFR_RNDN);
        mpfr_exp(r11020, r11019, MPFR_RNDN);
        mpfr_add(r11021, r11018, r11020, MPFR_RNDN);
        mpfr_div(r11022, r11018, r11021, MPFR_RNDN);
        return mpfr_get_d(r11022, MPFR_RNDN);
}

static mpfr_t r11023, r11024, r11025, r11026, r11027, r11028;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11023);
        mpfr_init(r11024);
        mpfr_init(r11025);
        mpfr_init(r11026);
        mpfr_init(r11027);
        mpfr_init(r11028);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11023, a, MPFR_RNDN);
        mpfr_exp(r11024, r11023, MPFR_RNDN);
        mpfr_set_d(r11025, b, MPFR_RNDN);
        mpfr_exp(r11026, r11025, MPFR_RNDN);
        mpfr_add(r11027, r11024, r11026, MPFR_RNDN);
        mpfr_div(r11028, r11024, r11027, MPFR_RNDN);
        return mpfr_get_d(r11028, MPFR_RNDN);
}

static mpfr_t r11029, r11030, r11031, r11032, r11033, r11034;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11029);
        mpfr_init(r11030);
        mpfr_init(r11031);
        mpfr_init(r11032);
        mpfr_init(r11033);
        mpfr_init(r11034);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11029, a, MPFR_RNDN);
        mpfr_exp(r11030, r11029, MPFR_RNDN);
        mpfr_set_d(r11031, b, MPFR_RNDN);
        mpfr_exp(r11032, r11031, MPFR_RNDN);
        mpfr_add(r11033, r11030, r11032, MPFR_RNDN);
        mpfr_div(r11034, r11030, r11033, MPFR_RNDN);
        return mpfr_get_d(r11034, MPFR_RNDN);
}

