#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 r27881 = a;
        float r27882 = log(r27881);
        float r27883 = b;
        float r27884 = log(r27883);
        float r27885 = r27882 + r27884;
        float r27886 = exp(r27885);
        return r27886;
}

double f_id(double a, double b) {
        double r27887 = a;
        double r27888 = log(r27887);
        double r27889 = b;
        double r27890 = log(r27889);
        double r27891 = r27888 + r27890;
        double r27892 = exp(r27891);
        return r27892;
}


double f_of(float a, float b) {
        float r27893 = a;
        float r27894 = b;
        float r27895 = r27893 * r27894;
        return r27895;
}

double f_od(double a, double b) {
        double r27896 = a;
        double r27897 = b;
        double r27898 = r27896 * r27897;
        return r27898;
}

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 r27899, r27900, r27901, r27902, r27903, r27904;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r27899);
        mpfr_init(r27900);
        mpfr_init(r27901);
        mpfr_init(r27902);
        mpfr_init(r27903);
        mpfr_init(r27904);
}

double f_im(double a, double b) {
        mpfr_set_d(r27899, a, MPFR_RNDN);
        mpfr_log(r27900, r27899, MPFR_RNDN);
        mpfr_set_d(r27901, b, MPFR_RNDN);
        mpfr_log(r27902, r27901, MPFR_RNDN);
        mpfr_add(r27903, r27900, r27902, MPFR_RNDN);
        mpfr_exp(r27904, r27903, MPFR_RNDN);
        return mpfr_get_d(r27904, MPFR_RNDN);
}

static mpfr_t r27905, r27906, r27907;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27905);
        mpfr_init(r27906);
        mpfr_init(r27907);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27905, a, MPFR_RNDN);
        mpfr_set_d(r27906, b, MPFR_RNDN);
        mpfr_mul(r27907, r27905, r27906, MPFR_RNDN);
        return mpfr_get_d(r27907, MPFR_RNDN);
}

static mpfr_t r27908, r27909, r27910;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27908);
        mpfr_init(r27909);
        mpfr_init(r27910);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27908, a, MPFR_RNDN);
        mpfr_set_d(r27909, b, MPFR_RNDN);
        mpfr_mul(r27910, r27908, r27909, MPFR_RNDN);
        return mpfr_get_d(r27910, MPFR_RNDN);
}

