#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 r25089 = a;
        float r25090 = log(r25089);
        float r25091 = b;
        float r25092 = log(r25091);
        float r25093 = r25090 + r25092;
        float r25094 = exp(r25093);
        return r25094;
}

double f_id(double a, double b) {
        double r25095 = a;
        double r25096 = log(r25095);
        double r25097 = b;
        double r25098 = log(r25097);
        double r25099 = r25096 + r25098;
        double r25100 = exp(r25099);
        return r25100;
}


double f_of(float a, float b) {
        float r25101 = a;
        float r25102 = b;
        float r25103 = r25101 * r25102;
        return r25103;
}

double f_od(double a, double b) {
        double r25104 = a;
        double r25105 = b;
        double r25106 = r25104 * r25105;
        return r25106;
}

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 r25107, r25108, r25109, r25110, r25111, r25112;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r25107);
        mpfr_init(r25108);
        mpfr_init(r25109);
        mpfr_init(r25110);
        mpfr_init(r25111);
        mpfr_init(r25112);
}

double f_im(double a, double b) {
        mpfr_set_d(r25107, a, MPFR_RNDN);
        mpfr_log(r25108, r25107, MPFR_RNDN);
        mpfr_set_d(r25109, b, MPFR_RNDN);
        mpfr_log(r25110, r25109, MPFR_RNDN);
        mpfr_add(r25111, r25108, r25110, MPFR_RNDN);
        mpfr_exp(r25112, r25111, MPFR_RNDN);
        return mpfr_get_d(r25112, MPFR_RNDN);
}

static mpfr_t r25113, r25114, r25115;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r25113);
        mpfr_init(r25114);
        mpfr_init(r25115);
}

double f_fm(double a, double b) {
        mpfr_set_d(r25113, a, MPFR_RNDN);
        mpfr_set_d(r25114, b, MPFR_RNDN);
        mpfr_mul(r25115, r25113, r25114, MPFR_RNDN);
        return mpfr_get_d(r25115, MPFR_RNDN);
}

static mpfr_t r25116, r25117, r25118;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r25116);
        mpfr_init(r25117);
        mpfr_init(r25118);
}

double f_dm(double a, double b) {
        mpfr_set_d(r25116, a, MPFR_RNDN);
        mpfr_set_d(r25117, b, MPFR_RNDN);
        mpfr_mul(r25118, r25116, r25117, MPFR_RNDN);
        return mpfr_get_d(r25118, MPFR_RNDN);
}

