#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Numeric.SpecFunctions.Extra:bd0 from math-functions-0.1.5.2";

double f_if(float x, float y, float z) {
        float r45579 = x;
        float r45580 = y;
        float r45581 = r45579 / r45580;
        float r45582 = log(r45581);
        float r45583 = r45579 * r45582;
        float r45584 = z;
        float r45585 = r45583 - r45584;
        return r45585;
}

double f_id(double x, double y, double z) {
        double r45586 = x;
        double r45587 = y;
        double r45588 = r45586 / r45587;
        double r45589 = log(r45588);
        double r45590 = r45586 * r45589;
        double r45591 = z;
        double r45592 = r45590 - r45591;
        return r45592;
}


double f_of(float x, float y, float z) {
        float r45593 = x;
        float r45594 = -4.16329420604066e-310;
        bool r45595 = r45593 <= r45594;
        float r45596 = y;
        float r45597 = r45593 / r45596;
        float r45598 = cbrt(r45597);
        float r45599 = log(r45598);
        float r45600 = r45593 + r45593;
        float r45601 = r45599 * r45600;
        float r45602 = r45593 * r45599;
        float r45603 = r45601 + r45602;
        float r45604 = z;
        float r45605 = r45603 - r45604;
        float r45606 = log(r45593);
        float r45607 = log(r45596);
        float r45608 = r45606 - r45607;
        float r45609 = r45593 * r45608;
        float r45610 = r45609 - r45604;
        float r45611 = r45595 ? r45605 : r45610;
        return r45611;
}

double f_od(double x, double y, double z) {
        double r45612 = x;
        double r45613 = -4.16329420604066e-310;
        bool r45614 = r45612 <= r45613;
        double r45615 = y;
        double r45616 = r45612 / r45615;
        double r45617 = cbrt(r45616);
        double r45618 = log(r45617);
        double r45619 = r45612 + r45612;
        double r45620 = r45618 * r45619;
        double r45621 = r45612 * r45618;
        double r45622 = r45620 + r45621;
        double r45623 = z;
        double r45624 = r45622 - r45623;
        double r45625 = log(r45612);
        double r45626 = log(r45615);
        double r45627 = r45625 - r45626;
        double r45628 = r45612 * r45627;
        double r45629 = r45628 - r45623;
        double r45630 = r45614 ? r45624 : r45629;
        return r45630;
}

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 r45631, r45632, r45633, r45634, r45635, r45636, r45637;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45631);
        mpfr_init(r45632);
        mpfr_init(r45633);
        mpfr_init(r45634);
        mpfr_init(r45635);
        mpfr_init(r45636);
        mpfr_init(r45637);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r45631, x, MPFR_RNDN);
        mpfr_set_d(r45632, y, MPFR_RNDN);
        mpfr_div(r45633, r45631, r45632, MPFR_RNDN);
        mpfr_log(r45634, r45633, MPFR_RNDN);
        mpfr_mul(r45635, r45631, r45634, MPFR_RNDN);
        mpfr_set_d(r45636, z, MPFR_RNDN);
        mpfr_sub(r45637, r45635, r45636, MPFR_RNDN);
        return mpfr_get_d(r45637, MPFR_RNDN);
}

static mpfr_t r45638, r45639, r45640, r45641, r45642, r45643, r45644, r45645, r45646, r45647, r45648, r45649, r45650, r45651, r45652, r45653, r45654, r45655, r45656;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45638);
        mpfr_init_set_str(r45639, "-4.16329420604066e-310", 10, MPFR_RNDN);
        mpfr_init(r45640);
        mpfr_init(r45641);
        mpfr_init(r45642);
        mpfr_init(r45643);
        mpfr_init(r45644);
        mpfr_init(r45645);
        mpfr_init(r45646);
        mpfr_init(r45647);
        mpfr_init(r45648);
        mpfr_init(r45649);
        mpfr_init(r45650);
        mpfr_init(r45651);
        mpfr_init(r45652);
        mpfr_init(r45653);
        mpfr_init(r45654);
        mpfr_init(r45655);
        mpfr_init(r45656);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r45638, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45640, mpfr_cmp(r45638, r45639) <= 0, MPFR_RNDN);
        mpfr_set_d(r45641, y, MPFR_RNDN);
        mpfr_div(r45642, r45638, r45641, MPFR_RNDN);
        mpfr_cbrt(r45643, r45642, MPFR_RNDN);
        mpfr_log(r45644, r45643, MPFR_RNDN);
        mpfr_add(r45645, r45638, r45638, MPFR_RNDN);
        mpfr_mul(r45646, r45644, r45645, MPFR_RNDN);
        mpfr_mul(r45647, r45638, r45644, MPFR_RNDN);
        mpfr_add(r45648, r45646, r45647, MPFR_RNDN);
        mpfr_set_d(r45649, z, MPFR_RNDN);
        mpfr_sub(r45650, r45648, r45649, MPFR_RNDN);
        mpfr_log(r45651, r45638, MPFR_RNDN);
        mpfr_log(r45652, r45641, MPFR_RNDN);
        mpfr_sub(r45653, r45651, r45652, MPFR_RNDN);
        mpfr_mul(r45654, r45638, r45653, MPFR_RNDN);
        mpfr_sub(r45655, r45654, r45649, MPFR_RNDN);
        if (mpfr_get_si(r45640, MPFR_RNDN)) { mpfr_set(r45656, r45650, MPFR_RNDN); } else { mpfr_set(r45656, r45655, MPFR_RNDN); };
        return mpfr_get_d(r45656, MPFR_RNDN);
}

static mpfr_t r45657, r45658, r45659, r45660, r45661, r45662, r45663, r45664, r45665, r45666, r45667, r45668, r45669, r45670, r45671, r45672, r45673, r45674, r45675;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45657);
        mpfr_init_set_str(r45658, "-4.16329420604066e-310", 10, MPFR_RNDN);
        mpfr_init(r45659);
        mpfr_init(r45660);
        mpfr_init(r45661);
        mpfr_init(r45662);
        mpfr_init(r45663);
        mpfr_init(r45664);
        mpfr_init(r45665);
        mpfr_init(r45666);
        mpfr_init(r45667);
        mpfr_init(r45668);
        mpfr_init(r45669);
        mpfr_init(r45670);
        mpfr_init(r45671);
        mpfr_init(r45672);
        mpfr_init(r45673);
        mpfr_init(r45674);
        mpfr_init(r45675);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r45657, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45659, mpfr_cmp(r45657, r45658) <= 0, MPFR_RNDN);
        mpfr_set_d(r45660, y, MPFR_RNDN);
        mpfr_div(r45661, r45657, r45660, MPFR_RNDN);
        mpfr_cbrt(r45662, r45661, MPFR_RNDN);
        mpfr_log(r45663, r45662, MPFR_RNDN);
        mpfr_add(r45664, r45657, r45657, MPFR_RNDN);
        mpfr_mul(r45665, r45663, r45664, MPFR_RNDN);
        mpfr_mul(r45666, r45657, r45663, MPFR_RNDN);
        mpfr_add(r45667, r45665, r45666, MPFR_RNDN);
        mpfr_set_d(r45668, z, MPFR_RNDN);
        mpfr_sub(r45669, r45667, r45668, MPFR_RNDN);
        mpfr_log(r45670, r45657, MPFR_RNDN);
        mpfr_log(r45671, r45660, MPFR_RNDN);
        mpfr_sub(r45672, r45670, r45671, MPFR_RNDN);
        mpfr_mul(r45673, r45657, r45672, MPFR_RNDN);
        mpfr_sub(r45674, r45673, r45668, MPFR_RNDN);
        if (mpfr_get_si(r45659, MPFR_RNDN)) { mpfr_set(r45675, r45669, MPFR_RNDN); } else { mpfr_set(r45675, r45674, MPFR_RNDN); };
        return mpfr_get_d(r45675, MPFR_RNDN);
}

