#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, B";

double f_if(float x, float y, float z, float t) {
        float r49543 = x;
        float r49544 = y;
        float r49545 = z;
        float r49546 = r49544 / r49545;
        float r49547 = t;
        float r49548 = r49546 * r49547;
        float r49549 = r49548 / r49547;
        float r49550 = r49543 * r49549;
        return r49550;
}

double f_id(double x, double y, double z, double t) {
        double r49551 = x;
        double r49552 = y;
        double r49553 = z;
        double r49554 = r49552 / r49553;
        double r49555 = t;
        double r49556 = r49554 * r49555;
        double r49557 = r49556 / r49555;
        double r49558 = r49551 * r49557;
        return r49558;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r49559 = y;
        float r49560 = -2.58053419571785e+22;
        bool r49561 = r49559 <= r49560;
        float r49562 = x;
        float r49563 = r49559 * r49562;
        float r49564 = z;
        float r49565 = r49563 / r49564;
        float r49566 = 9.019566302352389e-119;
        bool r49567 = r49559 <= r49566;
        float r49568 = r49559 / r49564;
        float r49569 = r49562 * r49568;
        float r49570 = 5.127878477553548e+249;
        bool r49571 = r49559 <= r49570;
        float r49572 = r49562 / r49564;
        float r49573 = r49572 * r49559;
        float r49574 = r49571 ? r49565 : r49573;
        float r49575 = r49567 ? r49569 : r49574;
        float r49576 = r49561 ? r49565 : r49575;
        return r49576;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r49577 = y;
        double r49578 = -2.58053419571785e+22;
        bool r49579 = r49577 <= r49578;
        double r49580 = x;
        double r49581 = r49577 * r49580;
        double r49582 = z;
        double r49583 = r49581 / r49582;
        double r49584 = 9.019566302352389e-119;
        bool r49585 = r49577 <= r49584;
        double r49586 = r49577 / r49582;
        double r49587 = r49580 * r49586;
        double r49588 = 5.127878477553548e+249;
        bool r49589 = r49577 <= r49588;
        double r49590 = r49580 / r49582;
        double r49591 = r49590 * r49577;
        double r49592 = r49589 ? r49583 : r49591;
        double r49593 = r49585 ? r49587 : r49592;
        double r49594 = r49579 ? r49583 : r49593;
        return r49594;
}

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 r49595, r49596, r49597, r49598, r49599, r49600, r49601, r49602;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r49595);
        mpfr_init(r49596);
        mpfr_init(r49597);
        mpfr_init(r49598);
        mpfr_init(r49599);
        mpfr_init(r49600);
        mpfr_init(r49601);
        mpfr_init(r49602);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r49595, x, MPFR_RNDN);
        mpfr_set_d(r49596, y, MPFR_RNDN);
        mpfr_set_d(r49597, z, MPFR_RNDN);
        mpfr_div(r49598, r49596, r49597, MPFR_RNDN);
        mpfr_set_d(r49599, t, MPFR_RNDN);
        mpfr_mul(r49600, r49598, r49599, MPFR_RNDN);
        mpfr_div(r49601, r49600, r49599, MPFR_RNDN);
        mpfr_mul(r49602, r49595, r49601, MPFR_RNDN);
        return mpfr_get_d(r49602, MPFR_RNDN);
}

static mpfr_t r49603, r49604, r49605, r49606, r49607, r49608, r49609, r49610, r49611, r49612, r49613, r49614, r49615, r49616, r49617, r49618, r49619, r49620;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r49603);
        mpfr_init_set_str(r49604, "-2.58053419571785e+22", 10, MPFR_RNDN);
        mpfr_init(r49605);
        mpfr_init(r49606);
        mpfr_init(r49607);
        mpfr_init(r49608);
        mpfr_init(r49609);
        mpfr_init_set_str(r49610, "9.019566302352389e-119", 10, MPFR_RNDN);
        mpfr_init(r49611);
        mpfr_init(r49612);
        mpfr_init(r49613);
        mpfr_init_set_str(r49614, "5.127878477553548e+249", 10, MPFR_RNDN);
        mpfr_init(r49615);
        mpfr_init(r49616);
        mpfr_init(r49617);
        mpfr_init(r49618);
        mpfr_init(r49619);
        mpfr_init(r49620);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r49603, y, MPFR_RNDN);
        ;
        mpfr_set_si(r49605, mpfr_cmp(r49603, r49604) <= 0, MPFR_RNDN);
        mpfr_set_d(r49606, x, MPFR_RNDN);
        mpfr_mul(r49607, r49603, r49606, MPFR_RNDN);
        mpfr_set_d(r49608, z, MPFR_RNDN);
        mpfr_div(r49609, r49607, r49608, MPFR_RNDN);
        ;
        mpfr_set_si(r49611, mpfr_cmp(r49603, r49610) <= 0, MPFR_RNDN);
        mpfr_div(r49612, r49603, r49608, MPFR_RNDN);
        mpfr_mul(r49613, r49606, r49612, MPFR_RNDN);
        ;
        mpfr_set_si(r49615, mpfr_cmp(r49603, r49614) <= 0, MPFR_RNDN);
        mpfr_div(r49616, r49606, r49608, MPFR_RNDN);
        mpfr_mul(r49617, r49616, r49603, MPFR_RNDN);
        if (mpfr_get_si(r49615, MPFR_RNDN)) { mpfr_set(r49618, r49609, MPFR_RNDN); } else { mpfr_set(r49618, r49617, MPFR_RNDN); };
        if (mpfr_get_si(r49611, MPFR_RNDN)) { mpfr_set(r49619, r49613, MPFR_RNDN); } else { mpfr_set(r49619, r49618, MPFR_RNDN); };
        if (mpfr_get_si(r49605, MPFR_RNDN)) { mpfr_set(r49620, r49609, MPFR_RNDN); } else { mpfr_set(r49620, r49619, MPFR_RNDN); };
        return mpfr_get_d(r49620, MPFR_RNDN);
}

static mpfr_t r49621, r49622, r49623, r49624, r49625, r49626, r49627, r49628, r49629, r49630, r49631, r49632, r49633, r49634, r49635, r49636, r49637, r49638;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r49621);
        mpfr_init_set_str(r49622, "-2.58053419571785e+22", 10, MPFR_RNDN);
        mpfr_init(r49623);
        mpfr_init(r49624);
        mpfr_init(r49625);
        mpfr_init(r49626);
        mpfr_init(r49627);
        mpfr_init_set_str(r49628, "9.019566302352389e-119", 10, MPFR_RNDN);
        mpfr_init(r49629);
        mpfr_init(r49630);
        mpfr_init(r49631);
        mpfr_init_set_str(r49632, "5.127878477553548e+249", 10, MPFR_RNDN);
        mpfr_init(r49633);
        mpfr_init(r49634);
        mpfr_init(r49635);
        mpfr_init(r49636);
        mpfr_init(r49637);
        mpfr_init(r49638);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r49621, y, MPFR_RNDN);
        ;
        mpfr_set_si(r49623, mpfr_cmp(r49621, r49622) <= 0, MPFR_RNDN);
        mpfr_set_d(r49624, x, MPFR_RNDN);
        mpfr_mul(r49625, r49621, r49624, MPFR_RNDN);
        mpfr_set_d(r49626, z, MPFR_RNDN);
        mpfr_div(r49627, r49625, r49626, MPFR_RNDN);
        ;
        mpfr_set_si(r49629, mpfr_cmp(r49621, r49628) <= 0, MPFR_RNDN);
        mpfr_div(r49630, r49621, r49626, MPFR_RNDN);
        mpfr_mul(r49631, r49624, r49630, MPFR_RNDN);
        ;
        mpfr_set_si(r49633, mpfr_cmp(r49621, r49632) <= 0, MPFR_RNDN);
        mpfr_div(r49634, r49624, r49626, MPFR_RNDN);
        mpfr_mul(r49635, r49634, r49621, MPFR_RNDN);
        if (mpfr_get_si(r49633, MPFR_RNDN)) { mpfr_set(r49636, r49627, MPFR_RNDN); } else { mpfr_set(r49636, r49635, MPFR_RNDN); };
        if (mpfr_get_si(r49629, MPFR_RNDN)) { mpfr_set(r49637, r49631, MPFR_RNDN); } else { mpfr_set(r49637, r49636, MPFR_RNDN); };
        if (mpfr_get_si(r49623, MPFR_RNDN)) { mpfr_set(r49638, r49627, MPFR_RNDN); } else { mpfr_set(r49638, r49637, MPFR_RNDN); };
        return mpfr_get_d(r49638, MPFR_RNDN);
}

