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

char *name = "Graphics.Rendering.Chart.Backend.Diagrams:calcFontMetrics from Chart-diagrams-1.5.1";

double f_if(float x, float y, float z, float t) {
        float r32600 = x;
        float r32601 = y;
        float r32602 = z;
        float r32603 = r32601 / r32602;
        float r32604 = t;
        float r32605 = r32603 * r32604;
        float r32606 = r32605 / r32604;
        float r32607 = r32600 * r32606;
        return r32607;
}

double f_id(double x, double y, double z, double t) {
        double r32608 = x;
        double r32609 = y;
        double r32610 = z;
        double r32611 = r32609 / r32610;
        double r32612 = t;
        double r32613 = r32611 * r32612;
        double r32614 = r32613 / r32612;
        double r32615 = r32608 * r32614;
        return r32615;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r32616 = y;
        float r32617 = -7.542630138100415e+19;
        bool r32618 = r32616 <= r32617;
        float r32619 = x;
        float r32620 = r32616 * r32619;
        float r32621 = z;
        float r32622 = r32620 / r32621;
        float r32623 = 1.5601337082604852e-118;
        bool r32624 = r32616 <= r32623;
        float r32625 = r32616 / r32621;
        float r32626 = r32619 * r32625;
        float r32627 = 3.281842225634271e+250;
        bool r32628 = r32616 <= r32627;
        float r32629 = r32619 / r32621;
        float r32630 = r32629 * r32616;
        float r32631 = r32628 ? r32622 : r32630;
        float r32632 = r32624 ? r32626 : r32631;
        float r32633 = r32618 ? r32622 : r32632;
        return r32633;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r32634 = y;
        double r32635 = -7.542630138100415e+19;
        bool r32636 = r32634 <= r32635;
        double r32637 = x;
        double r32638 = r32634 * r32637;
        double r32639 = z;
        double r32640 = r32638 / r32639;
        double r32641 = 1.5601337082604852e-118;
        bool r32642 = r32634 <= r32641;
        double r32643 = r32634 / r32639;
        double r32644 = r32637 * r32643;
        double r32645 = 3.281842225634271e+250;
        bool r32646 = r32634 <= r32645;
        double r32647 = r32637 / r32639;
        double r32648 = r32647 * r32634;
        double r32649 = r32646 ? r32640 : r32648;
        double r32650 = r32642 ? r32644 : r32649;
        double r32651 = r32636 ? r32640 : r32650;
        return r32651;
}

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 r32652, r32653, r32654, r32655, r32656, r32657, r32658, r32659;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r32652);
        mpfr_init(r32653);
        mpfr_init(r32654);
        mpfr_init(r32655);
        mpfr_init(r32656);
        mpfr_init(r32657);
        mpfr_init(r32658);
        mpfr_init(r32659);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r32652, x, MPFR_RNDN);
        mpfr_set_d(r32653, y, MPFR_RNDN);
        mpfr_set_d(r32654, z, MPFR_RNDN);
        mpfr_div(r32655, r32653, r32654, MPFR_RNDN);
        mpfr_set_d(r32656, t, MPFR_RNDN);
        mpfr_mul(r32657, r32655, r32656, MPFR_RNDN);
        mpfr_div(r32658, r32657, r32656, MPFR_RNDN);
        mpfr_mul(r32659, r32652, r32658, MPFR_RNDN);
        return mpfr_get_d(r32659, MPFR_RNDN);
}

static mpfr_t r32660, r32661, r32662, r32663, r32664, r32665, r32666, r32667, r32668, r32669, r32670, r32671, r32672, r32673, r32674, r32675, r32676, r32677;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32660);
        mpfr_init_set_str(r32661, "-7.542630138100415e+19", 10, MPFR_RNDN);
        mpfr_init(r32662);
        mpfr_init(r32663);
        mpfr_init(r32664);
        mpfr_init(r32665);
        mpfr_init(r32666);
        mpfr_init_set_str(r32667, "1.5601337082604852e-118", 10, MPFR_RNDN);
        mpfr_init(r32668);
        mpfr_init(r32669);
        mpfr_init(r32670);
        mpfr_init_set_str(r32671, "3.281842225634271e+250", 10, MPFR_RNDN);
        mpfr_init(r32672);
        mpfr_init(r32673);
        mpfr_init(r32674);
        mpfr_init(r32675);
        mpfr_init(r32676);
        mpfr_init(r32677);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r32660, y, MPFR_RNDN);
        ;
        mpfr_set_si(r32662, mpfr_cmp(r32660, r32661) <= 0, MPFR_RNDN);
        mpfr_set_d(r32663, x, MPFR_RNDN);
        mpfr_mul(r32664, r32660, r32663, MPFR_RNDN);
        mpfr_set_d(r32665, z, MPFR_RNDN);
        mpfr_div(r32666, r32664, r32665, MPFR_RNDN);
        ;
        mpfr_set_si(r32668, mpfr_cmp(r32660, r32667) <= 0, MPFR_RNDN);
        mpfr_div(r32669, r32660, r32665, MPFR_RNDN);
        mpfr_mul(r32670, r32663, r32669, MPFR_RNDN);
        ;
        mpfr_set_si(r32672, mpfr_cmp(r32660, r32671) <= 0, MPFR_RNDN);
        mpfr_div(r32673, r32663, r32665, MPFR_RNDN);
        mpfr_mul(r32674, r32673, r32660, MPFR_RNDN);
        if (mpfr_get_si(r32672, MPFR_RNDN)) { mpfr_set(r32675, r32666, MPFR_RNDN); } else { mpfr_set(r32675, r32674, MPFR_RNDN); };
        if (mpfr_get_si(r32668, MPFR_RNDN)) { mpfr_set(r32676, r32670, MPFR_RNDN); } else { mpfr_set(r32676, r32675, MPFR_RNDN); };
        if (mpfr_get_si(r32662, MPFR_RNDN)) { mpfr_set(r32677, r32666, MPFR_RNDN); } else { mpfr_set(r32677, r32676, MPFR_RNDN); };
        return mpfr_get_d(r32677, MPFR_RNDN);
}

static mpfr_t r32678, r32679, r32680, r32681, r32682, r32683, r32684, r32685, r32686, r32687, r32688, r32689, r32690, r32691, r32692, r32693, r32694, r32695;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32678);
        mpfr_init_set_str(r32679, "-7.542630138100415e+19", 10, MPFR_RNDN);
        mpfr_init(r32680);
        mpfr_init(r32681);
        mpfr_init(r32682);
        mpfr_init(r32683);
        mpfr_init(r32684);
        mpfr_init_set_str(r32685, "1.5601337082604852e-118", 10, MPFR_RNDN);
        mpfr_init(r32686);
        mpfr_init(r32687);
        mpfr_init(r32688);
        mpfr_init_set_str(r32689, "3.281842225634271e+250", 10, MPFR_RNDN);
        mpfr_init(r32690);
        mpfr_init(r32691);
        mpfr_init(r32692);
        mpfr_init(r32693);
        mpfr_init(r32694);
        mpfr_init(r32695);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r32678, y, MPFR_RNDN);
        ;
        mpfr_set_si(r32680, mpfr_cmp(r32678, r32679) <= 0, MPFR_RNDN);
        mpfr_set_d(r32681, x, MPFR_RNDN);
        mpfr_mul(r32682, r32678, r32681, MPFR_RNDN);
        mpfr_set_d(r32683, z, MPFR_RNDN);
        mpfr_div(r32684, r32682, r32683, MPFR_RNDN);
        ;
        mpfr_set_si(r32686, mpfr_cmp(r32678, r32685) <= 0, MPFR_RNDN);
        mpfr_div(r32687, r32678, r32683, MPFR_RNDN);
        mpfr_mul(r32688, r32681, r32687, MPFR_RNDN);
        ;
        mpfr_set_si(r32690, mpfr_cmp(r32678, r32689) <= 0, MPFR_RNDN);
        mpfr_div(r32691, r32681, r32683, MPFR_RNDN);
        mpfr_mul(r32692, r32691, r32678, MPFR_RNDN);
        if (mpfr_get_si(r32690, MPFR_RNDN)) { mpfr_set(r32693, r32684, MPFR_RNDN); } else { mpfr_set(r32693, r32692, MPFR_RNDN); };
        if (mpfr_get_si(r32686, MPFR_RNDN)) { mpfr_set(r32694, r32688, MPFR_RNDN); } else { mpfr_set(r32694, r32693, MPFR_RNDN); };
        if (mpfr_get_si(r32680, MPFR_RNDN)) { mpfr_set(r32695, r32684, MPFR_RNDN); } else { mpfr_set(r32695, r32694, MPFR_RNDN); };
        return mpfr_get_d(r32695, MPFR_RNDN);
}

