#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 r51658 = a;
        float r51659 = log(r51658);
        float r51660 = b;
        float r51661 = log(r51660);
        float r51662 = r51659 + r51661;
        float r51663 = exp(r51662);
        return r51663;
}

double f_id(double a, double b) {
        double r51664 = a;
        double r51665 = log(r51664);
        double r51666 = b;
        double r51667 = log(r51666);
        double r51668 = r51665 + r51667;
        double r51669 = exp(r51668);
        return r51669;
}


double f_of(float a, float b) {
        float r51670 = a;
        float r51671 = b;
        float r51672 = r51670 * r51671;
        return r51672;
}

double f_od(double a, double b) {
        double r51673 = a;
        double r51674 = b;
        double r51675 = r51673 * r51674;
        return r51675;
}

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 r51676, r51677, r51678, r51679, r51680, r51681;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51676);
        mpfr_init(r51677);
        mpfr_init(r51678);
        mpfr_init(r51679);
        mpfr_init(r51680);
        mpfr_init(r51681);
}

double f_im(double a, double b) {
        mpfr_set_d(r51676, a, MPFR_RNDN);
        mpfr_log(r51677, r51676, MPFR_RNDN);
        mpfr_set_d(r51678, b, MPFR_RNDN);
        mpfr_log(r51679, r51678, MPFR_RNDN);
        mpfr_add(r51680, r51677, r51679, MPFR_RNDN);
        mpfr_exp(r51681, r51680, MPFR_RNDN);
        return mpfr_get_d(r51681, MPFR_RNDN);
}

static mpfr_t r51682, r51683, r51684;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51682);
        mpfr_init(r51683);
        mpfr_init(r51684);
}

double f_fm(double a, double b) {
        mpfr_set_d(r51682, a, MPFR_RNDN);
        mpfr_set_d(r51683, b, MPFR_RNDN);
        mpfr_mul(r51684, r51682, r51683, MPFR_RNDN);
        return mpfr_get_d(r51684, MPFR_RNDN);
}

static mpfr_t r51685, r51686, r51687;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51685);
        mpfr_init(r51686);
        mpfr_init(r51687);
}

double f_dm(double a, double b) {
        mpfr_set_d(r51685, a, MPFR_RNDN);
        mpfr_set_d(r51686, b, MPFR_RNDN);
        mpfr_mul(r51687, r51685, r51686, MPFR_RNDN);
        return mpfr_get_d(r51687, MPFR_RNDN);
}

