#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 r52167 = a;
        float r52168 = log(r52167);
        float r52169 = b;
        float r52170 = log(r52169);
        float r52171 = r52168 + r52170;
        float r52172 = exp(r52171);
        return r52172;
}

double f_id(double a, double b) {
        double r52173 = a;
        double r52174 = log(r52173);
        double r52175 = b;
        double r52176 = log(r52175);
        double r52177 = r52174 + r52176;
        double r52178 = exp(r52177);
        return r52178;
}


double f_of(float a, float b) {
        float r52179 = a;
        float r52180 = b;
        float r52181 = r52179 * r52180;
        return r52181;
}

double f_od(double a, double b) {
        double r52182 = a;
        double r52183 = b;
        double r52184 = r52182 * r52183;
        return r52184;
}

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 r52185, r52186, r52187, r52188, r52189, r52190;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r52185);
        mpfr_init(r52186);
        mpfr_init(r52187);
        mpfr_init(r52188);
        mpfr_init(r52189);
        mpfr_init(r52190);
}

double f_im(double a, double b) {
        mpfr_set_d(r52185, a, MPFR_RNDN);
        mpfr_log(r52186, r52185, MPFR_RNDN);
        mpfr_set_d(r52187, b, MPFR_RNDN);
        mpfr_log(r52188, r52187, MPFR_RNDN);
        mpfr_add(r52189, r52186, r52188, MPFR_RNDN);
        mpfr_exp(r52190, r52189, MPFR_RNDN);
        return mpfr_get_d(r52190, MPFR_RNDN);
}

static mpfr_t r52191, r52192, r52193;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52191);
        mpfr_init(r52192);
        mpfr_init(r52193);
}

double f_fm(double a, double b) {
        mpfr_set_d(r52191, a, MPFR_RNDN);
        mpfr_set_d(r52192, b, MPFR_RNDN);
        mpfr_mul(r52193, r52191, r52192, MPFR_RNDN);
        return mpfr_get_d(r52193, MPFR_RNDN);
}

static mpfr_t r52194, r52195, r52196;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52194);
        mpfr_init(r52195);
        mpfr_init(r52196);
}

double f_dm(double a, double b) {
        mpfr_set_d(r52194, a, MPFR_RNDN);
        mpfr_set_d(r52195, b, MPFR_RNDN);
        mpfr_mul(r52196, r52194, r52195, MPFR_RNDN);
        return mpfr_get_d(r52196, MPFR_RNDN);
}

