#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 r41333 = a;
        float r41334 = exp(r41333);
        float r41335 = b;
        float r41336 = exp(r41335);
        float r41337 = r41334 + r41336;
        float r41338 = r41334 / r41337;
        return r41338;
}

double f_id(double a, double b) {
        double r41339 = a;
        double r41340 = exp(r41339);
        double r41341 = b;
        double r41342 = exp(r41341);
        double r41343 = r41340 + r41342;
        double r41344 = r41340 / r41343;
        return r41344;
}


double f_of(float a, float b) {
        float r41345 = a;
        float r41346 = exp(r41345);
        float r41347 = b;
        float r41348 = exp(r41347);
        float r41349 = r41346 + r41348;
        float r41350 = r41346 / r41349;
        return r41350;
}

double f_od(double a, double b) {
        double r41351 = a;
        double r41352 = exp(r41351);
        double r41353 = b;
        double r41354 = exp(r41353);
        double r41355 = r41352 + r41354;
        double r41356 = r41352 / r41355;
        return r41356;
}

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 r41357, r41358, r41359, r41360, r41361, r41362;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r41357);
        mpfr_init(r41358);
        mpfr_init(r41359);
        mpfr_init(r41360);
        mpfr_init(r41361);
        mpfr_init(r41362);
}

double f_im(double a, double b) {
        mpfr_set_d(r41357, a, MPFR_RNDN);
        mpfr_exp(r41358, r41357, MPFR_RNDN);
        mpfr_set_d(r41359, b, MPFR_RNDN);
        mpfr_exp(r41360, r41359, MPFR_RNDN);
        mpfr_add(r41361, r41358, r41360, MPFR_RNDN);
        mpfr_div(r41362, r41358, r41361, MPFR_RNDN);
        return mpfr_get_d(r41362, MPFR_RNDN);
}

static mpfr_t r41363, r41364, r41365, r41366, r41367, r41368;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41363);
        mpfr_init(r41364);
        mpfr_init(r41365);
        mpfr_init(r41366);
        mpfr_init(r41367);
        mpfr_init(r41368);
}

double f_fm(double a, double b) {
        mpfr_set_d(r41363, a, MPFR_RNDN);
        mpfr_exp(r41364, r41363, MPFR_RNDN);
        mpfr_set_d(r41365, b, MPFR_RNDN);
        mpfr_exp(r41366, r41365, MPFR_RNDN);
        mpfr_add(r41367, r41364, r41366, MPFR_RNDN);
        mpfr_div(r41368, r41364, r41367, MPFR_RNDN);
        return mpfr_get_d(r41368, MPFR_RNDN);
}

static mpfr_t r41369, r41370, r41371, r41372, r41373, r41374;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r41369);
        mpfr_init(r41370);
        mpfr_init(r41371);
        mpfr_init(r41372);
        mpfr_init(r41373);
        mpfr_init(r41374);
}

double f_dm(double a, double b) {
        mpfr_set_d(r41369, a, MPFR_RNDN);
        mpfr_exp(r41370, r41369, MPFR_RNDN);
        mpfr_set_d(r41371, b, MPFR_RNDN);
        mpfr_exp(r41372, r41371, MPFR_RNDN);
        mpfr_add(r41373, r41370, r41372, MPFR_RNDN);
        mpfr_div(r41374, r41370, r41373, MPFR_RNDN);
        return mpfr_get_d(r41374, MPFR_RNDN);
}

