#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 r10984 = a;
        float r10985 = exp(r10984);
        float r10986 = b;
        float r10987 = exp(r10986);
        float r10988 = r10985 + r10987;
        float r10989 = r10985 / r10988;
        return r10989;
}

double f_id(double a, double b) {
        double r10990 = a;
        double r10991 = exp(r10990);
        double r10992 = b;
        double r10993 = exp(r10992);
        double r10994 = r10991 + r10993;
        double r10995 = r10991 / r10994;
        return r10995;
}


double f_of(float a, float b) {
        float r10996 = a;
        float r10997 = exp(r10996);
        float r10998 = b;
        float r10999 = exp(r10998);
        float r11000 = r10997 + r10999;
        float r11001 = r10997 / r11000;
        return r11001;
}

double f_od(double a, double b) {
        double r11002 = a;
        double r11003 = exp(r11002);
        double r11004 = b;
        double r11005 = exp(r11004);
        double r11006 = r11003 + r11005;
        double r11007 = r11003 / r11006;
        return r11007;
}

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 r11008, r11009, r11010, r11011, r11012, r11013;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11008);
        mpfr_init(r11009);
        mpfr_init(r11010);
        mpfr_init(r11011);
        mpfr_init(r11012);
        mpfr_init(r11013);
}

double f_im(double a, double b) {
        mpfr_set_d(r11008, a, MPFR_RNDN);
        mpfr_exp(r11009, r11008, MPFR_RNDN);
        mpfr_set_d(r11010, b, MPFR_RNDN);
        mpfr_exp(r11011, r11010, MPFR_RNDN);
        mpfr_add(r11012, r11009, r11011, MPFR_RNDN);
        mpfr_div(r11013, r11009, r11012, MPFR_RNDN);
        return mpfr_get_d(r11013, MPFR_RNDN);
}

static mpfr_t r11014, r11015, r11016, r11017, r11018, r11019;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11014);
        mpfr_init(r11015);
        mpfr_init(r11016);
        mpfr_init(r11017);
        mpfr_init(r11018);
        mpfr_init(r11019);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11014, a, MPFR_RNDN);
        mpfr_exp(r11015, r11014, MPFR_RNDN);
        mpfr_set_d(r11016, b, MPFR_RNDN);
        mpfr_exp(r11017, r11016, MPFR_RNDN);
        mpfr_add(r11018, r11015, r11017, MPFR_RNDN);
        mpfr_div(r11019, r11015, r11018, MPFR_RNDN);
        return mpfr_get_d(r11019, MPFR_RNDN);
}

static mpfr_t r11020, r11021, r11022, r11023, r11024, r11025;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11020);
        mpfr_init(r11021);
        mpfr_init(r11022);
        mpfr_init(r11023);
        mpfr_init(r11024);
        mpfr_init(r11025);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11020, a, MPFR_RNDN);
        mpfr_exp(r11021, r11020, MPFR_RNDN);
        mpfr_set_d(r11022, b, MPFR_RNDN);
        mpfr_exp(r11023, r11022, MPFR_RNDN);
        mpfr_add(r11024, r11021, r11023, MPFR_RNDN);
        mpfr_div(r11025, r11021, r11024, MPFR_RNDN);
        return mpfr_get_d(r11025, MPFR_RNDN);
}

