#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 r11697 = a;
        float r11698 = log(r11697);
        float r11699 = b;
        float r11700 = log(r11699);
        float r11701 = r11698 + r11700;
        float r11702 = exp(r11701);
        return r11702;
}

double f_id(double a, double b) {
        double r11703 = a;
        double r11704 = log(r11703);
        double r11705 = b;
        double r11706 = log(r11705);
        double r11707 = r11704 + r11706;
        double r11708 = exp(r11707);
        return r11708;
}


double f_of(float a, float b) {
        float r11709 = a;
        float r11710 = b;
        float r11711 = r11709 * r11710;
        return r11711;
}

double f_od(double a, double b) {
        double r11712 = a;
        double r11713 = b;
        double r11714 = r11712 * r11713;
        return r11714;
}

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 r11715, r11716, r11717, r11718, r11719, r11720;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r11715);
        mpfr_init(r11716);
        mpfr_init(r11717);
        mpfr_init(r11718);
        mpfr_init(r11719);
        mpfr_init(r11720);
}

double f_im(double a, double b) {
        mpfr_set_d(r11715, a, MPFR_RNDN);
        mpfr_log(r11716, r11715, MPFR_RNDN);
        mpfr_set_d(r11717, b, MPFR_RNDN);
        mpfr_log(r11718, r11717, MPFR_RNDN);
        mpfr_add(r11719, r11716, r11718, MPFR_RNDN);
        mpfr_exp(r11720, r11719, MPFR_RNDN);
        return mpfr_get_d(r11720, MPFR_RNDN);
}

static mpfr_t r11721, r11722, r11723;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11721);
        mpfr_init(r11722);
        mpfr_init(r11723);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11721, a, MPFR_RNDN);
        mpfr_set_d(r11722, b, MPFR_RNDN);
        mpfr_mul(r11723, r11721, r11722, MPFR_RNDN);
        return mpfr_get_d(r11723, MPFR_RNDN);
}

static mpfr_t r11724, r11725, r11726;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11724);
        mpfr_init(r11725);
        mpfr_init(r11726);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11724, a, MPFR_RNDN);
        mpfr_set_d(r11725, b, MPFR_RNDN);
        mpfr_mul(r11726, r11724, r11725, MPFR_RNDN);
        return mpfr_get_d(r11726, MPFR_RNDN);
}

