#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 r41085 = a;
        float r41086 = exp(r41085);
        float r41087 = b;
        float r41088 = exp(r41087);
        float r41089 = r41086 + r41088;
        float r41090 = r41086 / r41089;
        return r41090;
}

double f_id(double a, double b) {
        double r41091 = a;
        double r41092 = exp(r41091);
        double r41093 = b;
        double r41094 = exp(r41093);
        double r41095 = r41092 + r41094;
        double r41096 = r41092 / r41095;
        return r41096;
}


double f_of(float a, float b) {
        float r41097 = a;
        float r41098 = exp(r41097);
        float r41099 = b;
        float r41100 = exp(r41099);
        float r41101 = r41098 + r41100;
        float r41102 = r41098 / r41101;
        return r41102;
}

double f_od(double a, double b) {
        double r41103 = a;
        double r41104 = exp(r41103);
        double r41105 = b;
        double r41106 = exp(r41105);
        double r41107 = r41104 + r41106;
        double r41108 = r41104 / r41107;
        return r41108;
}

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 r41109, r41110, r41111, r41112, r41113, r41114;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r41109);
        mpfr_init(r41110);
        mpfr_init(r41111);
        mpfr_init(r41112);
        mpfr_init(r41113);
        mpfr_init(r41114);
}

double f_im(double a, double b) {
        mpfr_set_d(r41109, a, MPFR_RNDN);
        mpfr_exp(r41110, r41109, MPFR_RNDN);
        mpfr_set_d(r41111, b, MPFR_RNDN);
        mpfr_exp(r41112, r41111, MPFR_RNDN);
        mpfr_add(r41113, r41110, r41112, MPFR_RNDN);
        mpfr_div(r41114, r41110, r41113, MPFR_RNDN);
        return mpfr_get_d(r41114, MPFR_RNDN);
}

static mpfr_t r41115, r41116, r41117, r41118, r41119, r41120;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41115);
        mpfr_init(r41116);
        mpfr_init(r41117);
        mpfr_init(r41118);
        mpfr_init(r41119);
        mpfr_init(r41120);
}

double f_fm(double a, double b) {
        mpfr_set_d(r41115, a, MPFR_RNDN);
        mpfr_exp(r41116, r41115, MPFR_RNDN);
        mpfr_set_d(r41117, b, MPFR_RNDN);
        mpfr_exp(r41118, r41117, MPFR_RNDN);
        mpfr_add(r41119, r41116, r41118, MPFR_RNDN);
        mpfr_div(r41120, r41116, r41119, MPFR_RNDN);
        return mpfr_get_d(r41120, MPFR_RNDN);
}

static mpfr_t r41121, r41122, r41123, r41124, r41125, r41126;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41121);
        mpfr_init(r41122);
        mpfr_init(r41123);
        mpfr_init(r41124);
        mpfr_init(r41125);
        mpfr_init(r41126);
}

double f_dm(double a, double b) {
        mpfr_set_d(r41121, a, MPFR_RNDN);
        mpfr_exp(r41122, r41121, MPFR_RNDN);
        mpfr_set_d(r41123, b, MPFR_RNDN);
        mpfr_exp(r41124, r41123, MPFR_RNDN);
        mpfr_add(r41125, r41122, r41124, MPFR_RNDN);
        mpfr_div(r41126, r41122, r41125, MPFR_RNDN);
        return mpfr_get_d(r41126, MPFR_RNDN);
}

