#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 r27785 = a;
        float r27786 = log(r27785);
        float r27787 = b;
        float r27788 = log(r27787);
        float r27789 = r27786 + r27788;
        float r27790 = exp(r27789);
        return r27790;
}

double f_id(double a, double b) {
        double r27791 = a;
        double r27792 = log(r27791);
        double r27793 = b;
        double r27794 = log(r27793);
        double r27795 = r27792 + r27794;
        double r27796 = exp(r27795);
        return r27796;
}


double f_of(float a, float b) {
        float r27797 = a;
        float r27798 = b;
        float r27799 = r27797 * r27798;
        return r27799;
}

double f_od(double a, double b) {
        double r27800 = a;
        double r27801 = b;
        double r27802 = r27800 * r27801;
        return r27802;
}

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 r27803, r27804, r27805, r27806, r27807, r27808;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r27803);
        mpfr_init(r27804);
        mpfr_init(r27805);
        mpfr_init(r27806);
        mpfr_init(r27807);
        mpfr_init(r27808);
}

double f_im(double a, double b) {
        mpfr_set_d(r27803, a, MPFR_RNDN);
        mpfr_log(r27804, r27803, MPFR_RNDN);
        mpfr_set_d(r27805, b, MPFR_RNDN);
        mpfr_log(r27806, r27805, MPFR_RNDN);
        mpfr_add(r27807, r27804, r27806, MPFR_RNDN);
        mpfr_exp(r27808, r27807, MPFR_RNDN);
        return mpfr_get_d(r27808, MPFR_RNDN);
}

static mpfr_t r27809, r27810, r27811;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27809);
        mpfr_init(r27810);
        mpfr_init(r27811);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27809, a, MPFR_RNDN);
        mpfr_set_d(r27810, b, MPFR_RNDN);
        mpfr_mul(r27811, r27809, r27810, MPFR_RNDN);
        return mpfr_get_d(r27811, MPFR_RNDN);
}

static mpfr_t r27812, r27813, r27814;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27812);
        mpfr_init(r27813);
        mpfr_init(r27814);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27812, a, MPFR_RNDN);
        mpfr_set_d(r27813, b, MPFR_RNDN);
        mpfr_mul(r27814, r27812, r27813, MPFR_RNDN);
        return mpfr_get_d(r27814, MPFR_RNDN);
}

