#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 r27779 = a;
        float r27780 = log(r27779);
        float r27781 = b;
        float r27782 = log(r27781);
        float r27783 = r27780 + r27782;
        float r27784 = exp(r27783);
        return r27784;
}

double f_id(double a, double b) {
        double r27785 = a;
        double r27786 = log(r27785);
        double r27787 = b;
        double r27788 = log(r27787);
        double r27789 = r27786 + r27788;
        double r27790 = exp(r27789);
        return r27790;
}


double f_of(float a, float b) {
        float r27791 = a;
        float r27792 = b;
        float r27793 = r27791 * r27792;
        return r27793;
}

double f_od(double a, double b) {
        double r27794 = a;
        double r27795 = b;
        double r27796 = r27794 * r27795;
        return r27796;
}

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 r27797, r27798, r27799, r27800, r27801, r27802;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r27797);
        mpfr_init(r27798);
        mpfr_init(r27799);
        mpfr_init(r27800);
        mpfr_init(r27801);
        mpfr_init(r27802);
}

double f_im(double a, double b) {
        mpfr_set_d(r27797, a, MPFR_RNDN);
        mpfr_log(r27798, r27797, MPFR_RNDN);
        mpfr_set_d(r27799, b, MPFR_RNDN);
        mpfr_log(r27800, r27799, MPFR_RNDN);
        mpfr_add(r27801, r27798, r27800, MPFR_RNDN);
        mpfr_exp(r27802, r27801, MPFR_RNDN);
        return mpfr_get_d(r27802, MPFR_RNDN);
}

static mpfr_t r27803, r27804, r27805;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27803);
        mpfr_init(r27804);
        mpfr_init(r27805);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27803, a, MPFR_RNDN);
        mpfr_set_d(r27804, b, MPFR_RNDN);
        mpfr_mul(r27805, r27803, r27804, MPFR_RNDN);
        return mpfr_get_d(r27805, MPFR_RNDN);
}

static mpfr_t r27806, r27807, r27808;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27806);
        mpfr_init(r27807);
        mpfr_init(r27808);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27806, a, MPFR_RNDN);
        mpfr_set_d(r27807, b, MPFR_RNDN);
        mpfr_mul(r27808, r27806, r27807, MPFR_RNDN);
        return mpfr_get_d(r27808, MPFR_RNDN);
}

