#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 r11729 = a;
        float r11730 = log(r11729);
        float r11731 = b;
        float r11732 = log(r11731);
        float r11733 = r11730 + r11732;
        float r11734 = exp(r11733);
        return r11734;
}

double f_id(double a, double b) {
        double r11735 = a;
        double r11736 = log(r11735);
        double r11737 = b;
        double r11738 = log(r11737);
        double r11739 = r11736 + r11738;
        double r11740 = exp(r11739);
        return r11740;
}


double f_of(float a, float b) {
        float r11741 = a;
        float r11742 = b;
        float r11743 = r11741 * r11742;
        return r11743;
}

double f_od(double a, double b) {
        double r11744 = a;
        double r11745 = b;
        double r11746 = r11744 * r11745;
        return r11746;
}

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 r11747, r11748, r11749, r11750, r11751, r11752;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r11747);
        mpfr_init(r11748);
        mpfr_init(r11749);
        mpfr_init(r11750);
        mpfr_init(r11751);
        mpfr_init(r11752);
}

double f_im(double a, double b) {
        mpfr_set_d(r11747, a, MPFR_RNDN);
        mpfr_log(r11748, r11747, MPFR_RNDN);
        mpfr_set_d(r11749, b, MPFR_RNDN);
        mpfr_log(r11750, r11749, MPFR_RNDN);
        mpfr_add(r11751, r11748, r11750, MPFR_RNDN);
        mpfr_exp(r11752, r11751, MPFR_RNDN);
        return mpfr_get_d(r11752, MPFR_RNDN);
}

static mpfr_t r11753, r11754, r11755;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11753);
        mpfr_init(r11754);
        mpfr_init(r11755);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11753, a, MPFR_RNDN);
        mpfr_set_d(r11754, b, MPFR_RNDN);
        mpfr_mul(r11755, r11753, r11754, MPFR_RNDN);
        return mpfr_get_d(r11755, MPFR_RNDN);
}

static mpfr_t r11756, r11757, r11758;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11756);
        mpfr_init(r11757);
        mpfr_init(r11758);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11756, a, MPFR_RNDN);
        mpfr_set_d(r11757, b, MPFR_RNDN);
        mpfr_mul(r11758, r11756, r11757, MPFR_RNDN);
        return mpfr_get_d(r11758, MPFR_RNDN);
}

