#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 r25079 = a;
        float r25080 = exp(r25079);
        float r25081 = b;
        float r25082 = exp(r25081);
        float r25083 = r25080 + r25082;
        float r25084 = r25080 / r25083;
        return r25084;
}

double f_id(double a, double b) {
        double r25085 = a;
        double r25086 = exp(r25085);
        double r25087 = b;
        double r25088 = exp(r25087);
        double r25089 = r25086 + r25088;
        double r25090 = r25086 / r25089;
        return r25090;
}


double f_of(float a, float b) {
        float r25091 = a;
        float r25092 = exp(r25091);
        float r25093 = b;
        float r25094 = exp(r25093);
        float r25095 = r25092 + r25094;
        float r25096 = r25092 / r25095;
        float r25097 = sqrt(r25096);
        float r25098 = r25097 * r25097;
        return r25098;
}

double f_od(double a, double b) {
        double r25099 = a;
        double r25100 = exp(r25099);
        double r25101 = b;
        double r25102 = exp(r25101);
        double r25103 = r25100 + r25102;
        double r25104 = r25100 / r25103;
        double r25105 = sqrt(r25104);
        double r25106 = r25105 * r25105;
        return r25106;
}

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 r25107, r25108, r25109, r25110, r25111, r25112;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r25107);
        mpfr_init(r25108);
        mpfr_init(r25109);
        mpfr_init(r25110);
        mpfr_init(r25111);
        mpfr_init(r25112);
}

double f_im(double a, double b) {
        mpfr_set_d(r25107, a, MPFR_RNDN);
        mpfr_exp(r25108, r25107, MPFR_RNDN);
        mpfr_set_d(r25109, b, MPFR_RNDN);
        mpfr_exp(r25110, r25109, MPFR_RNDN);
        mpfr_add(r25111, r25108, r25110, MPFR_RNDN);
        mpfr_div(r25112, r25108, r25111, MPFR_RNDN);
        return mpfr_get_d(r25112, MPFR_RNDN);
}

static mpfr_t r25113, r25114, r25115, r25116, r25117, r25118, r25119, r25120;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r25113);
        mpfr_init(r25114);
        mpfr_init(r25115);
        mpfr_init(r25116);
        mpfr_init(r25117);
        mpfr_init(r25118);
        mpfr_init(r25119);
        mpfr_init(r25120);
}

double f_fm(double a, double b) {
        mpfr_set_d(r25113, a, MPFR_RNDN);
        mpfr_exp(r25114, r25113, MPFR_RNDN);
        mpfr_set_d(r25115, b, MPFR_RNDN);
        mpfr_exp(r25116, r25115, MPFR_RNDN);
        mpfr_add(r25117, r25114, r25116, MPFR_RNDN);
        mpfr_div(r25118, r25114, r25117, MPFR_RNDN);
        mpfr_sqrt(r25119, r25118, MPFR_RNDN);
        mpfr_mul(r25120, r25119, r25119, MPFR_RNDN);
        return mpfr_get_d(r25120, MPFR_RNDN);
}

static mpfr_t r25121, r25122, r25123, r25124, r25125, r25126, r25127, r25128;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r25121);
        mpfr_init(r25122);
        mpfr_init(r25123);
        mpfr_init(r25124);
        mpfr_init(r25125);
        mpfr_init(r25126);
        mpfr_init(r25127);
        mpfr_init(r25128);
}

double f_dm(double a, double b) {
        mpfr_set_d(r25121, a, MPFR_RNDN);
        mpfr_exp(r25122, r25121, MPFR_RNDN);
        mpfr_set_d(r25123, b, MPFR_RNDN);
        mpfr_exp(r25124, r25123, MPFR_RNDN);
        mpfr_add(r25125, r25122, r25124, MPFR_RNDN);
        mpfr_div(r25126, r25122, r25125, MPFR_RNDN);
        mpfr_sqrt(r25127, r25126, MPFR_RNDN);
        mpfr_mul(r25128, r25127, r25127, MPFR_RNDN);
        return mpfr_get_d(r25128, MPFR_RNDN);
}

