#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 r27011 = a;
        float r27012 = exp(r27011);
        float r27013 = b;
        float r27014 = exp(r27013);
        float r27015 = r27012 + r27014;
        float r27016 = r27012 / r27015;
        return r27016;
}

double f_id(double a, double b) {
        double r27017 = a;
        double r27018 = exp(r27017);
        double r27019 = b;
        double r27020 = exp(r27019);
        double r27021 = r27018 + r27020;
        double r27022 = r27018 / r27021;
        return r27022;
}


double f_of(float a, float b) {
        float r27023 = a;
        float r27024 = exp(r27023);
        float r27025 = sqrt(r27024);
        float r27026 = b;
        float r27027 = exp(r27026);
        float r27028 = r27024 + r27027;
        float r27029 = r27025 / r27028;
        float r27030 = r27025 * r27029;
        return r27030;
}

double f_od(double a, double b) {
        double r27031 = a;
        double r27032 = exp(r27031);
        double r27033 = sqrt(r27032);
        double r27034 = b;
        double r27035 = exp(r27034);
        double r27036 = r27032 + r27035;
        double r27037 = r27033 / r27036;
        double r27038 = r27033 * r27037;
        return r27038;
}

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 r27039, r27040, r27041, r27042, r27043, r27044;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r27039);
        mpfr_init(r27040);
        mpfr_init(r27041);
        mpfr_init(r27042);
        mpfr_init(r27043);
        mpfr_init(r27044);
}

double f_im(double a, double b) {
        mpfr_set_d(r27039, a, MPFR_RNDN);
        mpfr_exp(r27040, r27039, MPFR_RNDN);
        mpfr_set_d(r27041, b, MPFR_RNDN);
        mpfr_exp(r27042, r27041, MPFR_RNDN);
        mpfr_add(r27043, r27040, r27042, MPFR_RNDN);
        mpfr_div(r27044, r27040, r27043, MPFR_RNDN);
        return mpfr_get_d(r27044, MPFR_RNDN);
}

static mpfr_t r27045, r27046, r27047, r27048, r27049, r27050, r27051, r27052;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27045);
        mpfr_init(r27046);
        mpfr_init(r27047);
        mpfr_init(r27048);
        mpfr_init(r27049);
        mpfr_init(r27050);
        mpfr_init(r27051);
        mpfr_init(r27052);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27045, a, MPFR_RNDN);
        mpfr_exp(r27046, r27045, MPFR_RNDN);
        mpfr_sqrt(r27047, r27046, MPFR_RNDN);
        mpfr_set_d(r27048, b, MPFR_RNDN);
        mpfr_exp(r27049, r27048, MPFR_RNDN);
        mpfr_add(r27050, r27046, r27049, MPFR_RNDN);
        mpfr_div(r27051, r27047, r27050, MPFR_RNDN);
        mpfr_mul(r27052, r27047, r27051, MPFR_RNDN);
        return mpfr_get_d(r27052, MPFR_RNDN);
}

static mpfr_t r27053, r27054, r27055, r27056, r27057, r27058, r27059, r27060;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27053);
        mpfr_init(r27054);
        mpfr_init(r27055);
        mpfr_init(r27056);
        mpfr_init(r27057);
        mpfr_init(r27058);
        mpfr_init(r27059);
        mpfr_init(r27060);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27053, a, MPFR_RNDN);
        mpfr_exp(r27054, r27053, MPFR_RNDN);
        mpfr_sqrt(r27055, r27054, MPFR_RNDN);
        mpfr_set_d(r27056, b, MPFR_RNDN);
        mpfr_exp(r27057, r27056, MPFR_RNDN);
        mpfr_add(r27058, r27054, r27057, MPFR_RNDN);
        mpfr_div(r27059, r27055, r27058, MPFR_RNDN);
        mpfr_mul(r27060, r27055, r27059, MPFR_RNDN);
        return mpfr_get_d(r27060, MPFR_RNDN);
}

