#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 r11598 = a;
        float r11599 = log(r11598);
        float r11600 = b;
        float r11601 = log(r11600);
        float r11602 = r11599 + r11601;
        float r11603 = exp(r11602);
        return r11603;
}

double f_id(double a, double b) {
        double r11604 = a;
        double r11605 = log(r11604);
        double r11606 = b;
        double r11607 = log(r11606);
        double r11608 = r11605 + r11607;
        double r11609 = exp(r11608);
        return r11609;
}


double f_of(float a, float b) {
        float r11610 = a;
        float r11611 = b;
        float r11612 = r11610 * r11611;
        return r11612;
}

double f_od(double a, double b) {
        double r11613 = a;
        double r11614 = b;
        double r11615 = r11613 * r11614;
        return r11615;
}

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 r11616, r11617, r11618, r11619, r11620, r11621;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r11616);
        mpfr_init(r11617);
        mpfr_init(r11618);
        mpfr_init(r11619);
        mpfr_init(r11620);
        mpfr_init(r11621);
}

double f_im(double a, double b) {
        mpfr_set_d(r11616, a, MPFR_RNDN);
        mpfr_log(r11617, r11616, MPFR_RNDN);
        mpfr_set_d(r11618, b, MPFR_RNDN);
        mpfr_log(r11619, r11618, MPFR_RNDN);
        mpfr_add(r11620, r11617, r11619, MPFR_RNDN);
        mpfr_exp(r11621, r11620, MPFR_RNDN);
        return mpfr_get_d(r11621, MPFR_RNDN);
}

static mpfr_t r11622, r11623, r11624;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11622);
        mpfr_init(r11623);
        mpfr_init(r11624);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11622, a, MPFR_RNDN);
        mpfr_set_d(r11623, b, MPFR_RNDN);
        mpfr_mul(r11624, r11622, r11623, MPFR_RNDN);
        return mpfr_get_d(r11624, MPFR_RNDN);
}

static mpfr_t r11625, r11626, r11627;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11625);
        mpfr_init(r11626);
        mpfr_init(r11627);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11625, a, MPFR_RNDN);
        mpfr_set_d(r11626, b, MPFR_RNDN);
        mpfr_mul(r11627, r11625, r11626, MPFR_RNDN);
        return mpfr_get_d(r11627, MPFR_RNDN);
}

