#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 r45594 = x;
        float r45595 = y;
        float r45596 = r45594 / r45595;
        float r45597 = log(r45596);
        float r45598 = r45594 * r45597;
        float r45599 = z;
        float r45600 = r45598 - r45599;
        return r45600;
}

double f_id(double x, double y, double z) {
        double r45601 = x;
        double r45602 = y;
        double r45603 = r45601 / r45602;
        double r45604 = log(r45603);
        double r45605 = r45601 * r45604;
        double r45606 = z;
        double r45607 = r45605 - r45606;
        return r45607;
}


double f_of(float x, float y, float z) {
        float r45608 = x;
        float r45609 = -4.16329420604066e-310;
        bool r45610 = r45608 <= r45609;
        float r45611 = y;
        float r45612 = r45608 / r45611;
        float r45613 = cbrt(r45612);
        float r45614 = log(r45613);
        float r45615 = r45608 + r45608;
        float r45616 = r45614 * r45615;
        float r45617 = r45608 * r45614;
        float r45618 = r45616 + r45617;
        float r45619 = z;
        float r45620 = r45618 - r45619;
        float r45621 = log(r45608);
        float r45622 = log(r45611);
        float r45623 = r45621 - r45622;
        float r45624 = r45608 * r45623;
        float r45625 = r45624 - r45619;
        float r45626 = r45610 ? r45620 : r45625;
        return r45626;
}

double f_od(double x, double y, double z) {
        double r45627 = x;
        double r45628 = -4.16329420604066e-310;
        bool r45629 = r45627 <= r45628;
        double r45630 = y;
        double r45631 = r45627 / r45630;
        double r45632 = cbrt(r45631);
        double r45633 = log(r45632);
        double r45634 = r45627 + r45627;
        double r45635 = r45633 * r45634;
        double r45636 = r45627 * r45633;
        double r45637 = r45635 + r45636;
        double r45638 = z;
        double r45639 = r45637 - r45638;
        double r45640 = log(r45627);
        double r45641 = log(r45630);
        double r45642 = r45640 - r45641;
        double r45643 = r45627 * r45642;
        double r45644 = r45643 - r45638;
        double r45645 = r45629 ? r45639 : r45644;
        return r45645;
}

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 r45646, r45647, r45648, r45649, r45650, r45651, r45652;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45646);
        mpfr_init(r45647);
        mpfr_init(r45648);
        mpfr_init(r45649);
        mpfr_init(r45650);
        mpfr_init(r45651);
        mpfr_init(r45652);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r45646, x, MPFR_RNDN);
        mpfr_set_d(r45647, y, MPFR_RNDN);
        mpfr_div(r45648, r45646, r45647, MPFR_RNDN);
        mpfr_log(r45649, r45648, MPFR_RNDN);
        mpfr_mul(r45650, r45646, r45649, MPFR_RNDN);
        mpfr_set_d(r45651, z, MPFR_RNDN);
        mpfr_sub(r45652, r45650, r45651, MPFR_RNDN);
        return mpfr_get_d(r45652, MPFR_RNDN);
}

static mpfr_t r45653, r45654, r45655, r45656, r45657, r45658, r45659, r45660, r45661, r45662, r45663, r45664, r45665, r45666, r45667, r45668, r45669, r45670, r45671;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45653);
        mpfr_init_set_str(r45654, "-4.16329420604066e-310", 10, MPFR_RNDN);
        mpfr_init(r45655);
        mpfr_init(r45656);
        mpfr_init(r45657);
        mpfr_init(r45658);
        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);
}

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

static mpfr_t r45672, r45673, r45674, r45675, r45676, r45677, r45678, r45679, r45680, r45681, r45682, r45683, r45684, r45685, r45686, r45687, r45688, r45689, r45690;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45672);
        mpfr_init_set_str(r45673, "-4.16329420604066e-310", 10, MPFR_RNDN);
        mpfr_init(r45674);
        mpfr_init(r45675);
        mpfr_init(r45676);
        mpfr_init(r45677);
        mpfr_init(r45678);
        mpfr_init(r45679);
        mpfr_init(r45680);
        mpfr_init(r45681);
        mpfr_init(r45682);
        mpfr_init(r45683);
        mpfr_init(r45684);
        mpfr_init(r45685);
        mpfr_init(r45686);
        mpfr_init(r45687);
        mpfr_init(r45688);
        mpfr_init(r45689);
        mpfr_init(r45690);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r45672, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45674, mpfr_cmp(r45672, r45673) <= 0, MPFR_RNDN);
        mpfr_set_d(r45675, y, MPFR_RNDN);
        mpfr_div(r45676, r45672, r45675, MPFR_RNDN);
        mpfr_cbrt(r45677, r45676, MPFR_RNDN);
        mpfr_log(r45678, r45677, MPFR_RNDN);
        mpfr_add(r45679, r45672, r45672, MPFR_RNDN);
        mpfr_mul(r45680, r45678, r45679, MPFR_RNDN);
        mpfr_mul(r45681, r45672, r45678, MPFR_RNDN);
        mpfr_add(r45682, r45680, r45681, MPFR_RNDN);
        mpfr_set_d(r45683, z, MPFR_RNDN);
        mpfr_sub(r45684, r45682, r45683, MPFR_RNDN);
        mpfr_log(r45685, r45672, MPFR_RNDN);
        mpfr_log(r45686, r45675, MPFR_RNDN);
        mpfr_sub(r45687, r45685, r45686, MPFR_RNDN);
        mpfr_mul(r45688, r45672, r45687, MPFR_RNDN);
        mpfr_sub(r45689, r45688, r45683, MPFR_RNDN);
        if (mpfr_get_si(r45674, MPFR_RNDN)) { mpfr_set(r45690, r45684, MPFR_RNDN); } else { mpfr_set(r45690, r45689, MPFR_RNDN); };
        return mpfr_get_d(r45690, MPFR_RNDN);
}

