#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 r27605 = a;
        float r27606 = log(r27605);
        float r27607 = b;
        float r27608 = log(r27607);
        float r27609 = r27606 + r27608;
        float r27610 = exp(r27609);
        return r27610;
}

double f_id(double a, double b) {
        double r27611 = a;
        double r27612 = log(r27611);
        double r27613 = b;
        double r27614 = log(r27613);
        double r27615 = r27612 + r27614;
        double r27616 = exp(r27615);
        return r27616;
}


double f_of(float a, float b) {
        float r27617 = a;
        float r27618 = b;
        float r27619 = r27617 * r27618;
        return r27619;
}

double f_od(double a, double b) {
        double r27620 = a;
        double r27621 = b;
        double r27622 = r27620 * r27621;
        return r27622;
}

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 r27623, r27624, r27625, r27626, r27627, r27628;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r27623);
        mpfr_init(r27624);
        mpfr_init(r27625);
        mpfr_init(r27626);
        mpfr_init(r27627);
        mpfr_init(r27628);
}

double f_im(double a, double b) {
        mpfr_set_d(r27623, a, MPFR_RNDN);
        mpfr_log(r27624, r27623, MPFR_RNDN);
        mpfr_set_d(r27625, b, MPFR_RNDN);
        mpfr_log(r27626, r27625, MPFR_RNDN);
        mpfr_add(r27627, r27624, r27626, MPFR_RNDN);
        mpfr_exp(r27628, r27627, MPFR_RNDN);
        return mpfr_get_d(r27628, MPFR_RNDN);
}

static mpfr_t r27629, r27630, r27631;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27629);
        mpfr_init(r27630);
        mpfr_init(r27631);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27629, a, MPFR_RNDN);
        mpfr_set_d(r27630, b, MPFR_RNDN);
        mpfr_mul(r27631, r27629, r27630, MPFR_RNDN);
        return mpfr_get_d(r27631, MPFR_RNDN);
}

static mpfr_t r27632, r27633, r27634;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27632);
        mpfr_init(r27633);
        mpfr_init(r27634);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27632, a, MPFR_RNDN);
        mpfr_set_d(r27633, b, MPFR_RNDN);
        mpfr_mul(r27634, r27632, r27633, MPFR_RNDN);
        return mpfr_get_d(r27634, MPFR_RNDN);
}

