#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 r10483 = x;
        float r10484 = y;
        float r10485 = z;
        float r10486 = r10484 / r10485;
        float r10487 = t;
        float r10488 = r10486 * r10487;
        float r10489 = r10488 / r10487;
        float r10490 = r10483 * r10489;
        return r10490;
}

double f_id(double x, double y, double z, double t) {
        double r10491 = x;
        double r10492 = y;
        double r10493 = z;
        double r10494 = r10492 / r10493;
        double r10495 = t;
        double r10496 = r10494 * r10495;
        double r10497 = r10496 / r10495;
        double r10498 = r10491 * r10497;
        return r10498;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r10499 = x;
        float r10500 = y;
        float r10501 = r10499 * r10500;
        float r10502 = -2.701705248459643e+97;
        bool r10503 = r10501 <= r10502;
        float r10504 = z;
        float r10505 = r10499 / r10504;
        float r10506 = r10505 * r10500;
        float r10507 = -1.2460807539482867e-130;
        bool r10508 = r10501 <= r10507;
        float r10509 = r10501 / r10504;
        float r10510 = 3.084811635157326e-167;
        bool r10511 = r10501 <= r10510;
        float r10512 = 1.6843692024798482e+225;
        bool r10513 = r10501 <= r10512;
        float r10514 = r10513 ? r10509 : r10506;
        float r10515 = r10511 ? r10506 : r10514;
        float r10516 = r10508 ? r10509 : r10515;
        float r10517 = r10503 ? r10506 : r10516;
        return r10517;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r10518 = x;
        double r10519 = y;
        double r10520 = r10518 * r10519;
        double r10521 = -2.701705248459643e+97;
        bool r10522 = r10520 <= r10521;
        double r10523 = z;
        double r10524 = r10518 / r10523;
        double r10525 = r10524 * r10519;
        double r10526 = -1.2460807539482867e-130;
        bool r10527 = r10520 <= r10526;
        double r10528 = r10520 / r10523;
        double r10529 = 3.084811635157326e-167;
        bool r10530 = r10520 <= r10529;
        double r10531 = 1.6843692024798482e+225;
        bool r10532 = r10520 <= r10531;
        double r10533 = r10532 ? r10528 : r10525;
        double r10534 = r10530 ? r10525 : r10533;
        double r10535 = r10527 ? r10528 : r10534;
        double r10536 = r10522 ? r10525 : r10535;
        return r10536;
}

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 r10537, r10538, r10539, r10540, r10541, r10542, r10543, r10544;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10537);
        mpfr_init(r10538);
        mpfr_init(r10539);
        mpfr_init(r10540);
        mpfr_init(r10541);
        mpfr_init(r10542);
        mpfr_init(r10543);
        mpfr_init(r10544);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r10537, x, MPFR_RNDN);
        mpfr_set_d(r10538, y, MPFR_RNDN);
        mpfr_set_d(r10539, z, MPFR_RNDN);
        mpfr_div(r10540, r10538, r10539, MPFR_RNDN);
        mpfr_set_d(r10541, t, MPFR_RNDN);
        mpfr_mul(r10542, r10540, r10541, MPFR_RNDN);
        mpfr_div(r10543, r10542, r10541, MPFR_RNDN);
        mpfr_mul(r10544, r10537, r10543, MPFR_RNDN);
        return mpfr_get_d(r10544, MPFR_RNDN);
}

static mpfr_t r10545, r10546, r10547, r10548, r10549, r10550, r10551, r10552, r10553, r10554, r10555, r10556, r10557, r10558, r10559, r10560, r10561, r10562, r10563;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10545);
        mpfr_init(r10546);
        mpfr_init(r10547);
        mpfr_init_set_str(r10548, "-2.701705248459643e+97", 10, MPFR_RNDN);
        mpfr_init(r10549);
        mpfr_init(r10550);
        mpfr_init(r10551);
        mpfr_init(r10552);
        mpfr_init_set_str(r10553, "-1.2460807539482867e-130", 10, MPFR_RNDN);
        mpfr_init(r10554);
        mpfr_init(r10555);
        mpfr_init_set_str(r10556, "3.084811635157326e-167", 10, MPFR_RNDN);
        mpfr_init(r10557);
        mpfr_init_set_str(r10558, "1.6843692024798482e+225", 10, MPFR_RNDN);
        mpfr_init(r10559);
        mpfr_init(r10560);
        mpfr_init(r10561);
        mpfr_init(r10562);
        mpfr_init(r10563);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r10545, x, MPFR_RNDN);
        mpfr_set_d(r10546, y, MPFR_RNDN);
        mpfr_mul(r10547, r10545, r10546, MPFR_RNDN);
        ;
        mpfr_set_si(r10549, mpfr_cmp(r10547, r10548) <= 0, MPFR_RNDN);
        mpfr_set_d(r10550, z, MPFR_RNDN);
        mpfr_div(r10551, r10545, r10550, MPFR_RNDN);
        mpfr_mul(r10552, r10551, r10546, MPFR_RNDN);
        ;
        mpfr_set_si(r10554, mpfr_cmp(r10547, r10553) <= 0, MPFR_RNDN);
        mpfr_div(r10555, r10547, r10550, MPFR_RNDN);
        ;
        mpfr_set_si(r10557, mpfr_cmp(r10547, r10556) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r10559, mpfr_cmp(r10547, r10558) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r10559, MPFR_RNDN)) { mpfr_set(r10560, r10555, MPFR_RNDN); } else { mpfr_set(r10560, r10552, MPFR_RNDN); };
        if (mpfr_get_si(r10557, MPFR_RNDN)) { mpfr_set(r10561, r10552, MPFR_RNDN); } else { mpfr_set(r10561, r10560, MPFR_RNDN); };
        if (mpfr_get_si(r10554, MPFR_RNDN)) { mpfr_set(r10562, r10555, MPFR_RNDN); } else { mpfr_set(r10562, r10561, MPFR_RNDN); };
        if (mpfr_get_si(r10549, MPFR_RNDN)) { mpfr_set(r10563, r10552, MPFR_RNDN); } else { mpfr_set(r10563, r10562, MPFR_RNDN); };
        return mpfr_get_d(r10563, MPFR_RNDN);
}

static mpfr_t r10564, r10565, r10566, r10567, r10568, r10569, r10570, r10571, r10572, r10573, r10574, r10575, r10576, r10577, r10578, r10579, r10580, r10581, r10582;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10564);
        mpfr_init(r10565);
        mpfr_init(r10566);
        mpfr_init_set_str(r10567, "-2.701705248459643e+97", 10, MPFR_RNDN);
        mpfr_init(r10568);
        mpfr_init(r10569);
        mpfr_init(r10570);
        mpfr_init(r10571);
        mpfr_init_set_str(r10572, "-1.2460807539482867e-130", 10, MPFR_RNDN);
        mpfr_init(r10573);
        mpfr_init(r10574);
        mpfr_init_set_str(r10575, "3.084811635157326e-167", 10, MPFR_RNDN);
        mpfr_init(r10576);
        mpfr_init_set_str(r10577, "1.6843692024798482e+225", 10, MPFR_RNDN);
        mpfr_init(r10578);
        mpfr_init(r10579);
        mpfr_init(r10580);
        mpfr_init(r10581);
        mpfr_init(r10582);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r10564, x, MPFR_RNDN);
        mpfr_set_d(r10565, y, MPFR_RNDN);
        mpfr_mul(r10566, r10564, r10565, MPFR_RNDN);
        ;
        mpfr_set_si(r10568, mpfr_cmp(r10566, r10567) <= 0, MPFR_RNDN);
        mpfr_set_d(r10569, z, MPFR_RNDN);
        mpfr_div(r10570, r10564, r10569, MPFR_RNDN);
        mpfr_mul(r10571, r10570, r10565, MPFR_RNDN);
        ;
        mpfr_set_si(r10573, mpfr_cmp(r10566, r10572) <= 0, MPFR_RNDN);
        mpfr_div(r10574, r10566, r10569, MPFR_RNDN);
        ;
        mpfr_set_si(r10576, mpfr_cmp(r10566, r10575) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r10578, mpfr_cmp(r10566, r10577) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r10578, MPFR_RNDN)) { mpfr_set(r10579, r10574, MPFR_RNDN); } else { mpfr_set(r10579, r10571, MPFR_RNDN); };
        if (mpfr_get_si(r10576, MPFR_RNDN)) { mpfr_set(r10580, r10571, MPFR_RNDN); } else { mpfr_set(r10580, r10579, MPFR_RNDN); };
        if (mpfr_get_si(r10573, MPFR_RNDN)) { mpfr_set(r10581, r10574, MPFR_RNDN); } else { mpfr_set(r10581, r10580, MPFR_RNDN); };
        if (mpfr_get_si(r10568, MPFR_RNDN)) { mpfr_set(r10582, r10571, MPFR_RNDN); } else { mpfr_set(r10582, r10581, MPFR_RNDN); };
        return mpfr_get_d(r10582, MPFR_RNDN);
}

