#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Exp of sum of logs";

double f_if(float a, float b) {
        float r11246 = a;
        float r11247 = log(r11246);
        float r11248 = b;
        float r11249 = log(r11248);
        float r11250 = r11247 + r11249;
        float r11251 = exp(r11250);
        return r11251;
}

double f_id(double a, double b) {
        double r11252 = a;
        double r11253 = log(r11252);
        double r11254 = b;
        double r11255 = log(r11254);
        double r11256 = r11253 + r11255;
        double r11257 = exp(r11256);
        return r11257;
}


double f_of(float a, float b) {
        float r11258 = a;
        float r11259 = b;
        float r11260 = r11258 * r11259;
        return r11260;
}

double f_od(double a, double b) {
        double r11261 = a;
        double r11262 = b;
        double r11263 = r11261 * r11262;
        return r11263;
}

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 r11264, r11265, r11266, r11267, r11268, r11269;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r11264);
        mpfr_init(r11265);
        mpfr_init(r11266);
        mpfr_init(r11267);
        mpfr_init(r11268);
        mpfr_init(r11269);
}

double f_im(double a, double b) {
        mpfr_set_d(r11264, a, MPFR_RNDN);
        mpfr_log(r11265, r11264, MPFR_RNDN);
        mpfr_set_d(r11266, b, MPFR_RNDN);
        mpfr_log(r11267, r11266, MPFR_RNDN);
        mpfr_add(r11268, r11265, r11267, MPFR_RNDN);
        mpfr_exp(r11269, r11268, MPFR_RNDN);
        return mpfr_get_d(r11269, MPFR_RNDN);
}

static mpfr_t r11270, r11271, r11272;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11270);
        mpfr_init(r11271);
        mpfr_init(r11272);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11270, a, MPFR_RNDN);
        mpfr_set_d(r11271, b, MPFR_RNDN);
        mpfr_mul(r11272, r11270, r11271, MPFR_RNDN);
        return mpfr_get_d(r11272, MPFR_RNDN);
}

static mpfr_t r11273, r11274, r11275;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11273);
        mpfr_init(r11274);
        mpfr_init(r11275);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11273, a, MPFR_RNDN);
        mpfr_set_d(r11274, b, MPFR_RNDN);
        mpfr_mul(r11275, r11273, r11274, MPFR_RNDN);
        return mpfr_get_d(r11275, MPFR_RNDN);
}

