#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 r10390 = x;
        float r10391 = y;
        float r10392 = z;
        float r10393 = r10391 / r10392;
        float r10394 = t;
        float r10395 = r10393 * r10394;
        float r10396 = r10395 / r10394;
        float r10397 = r10390 * r10396;
        return r10397;
}

double f_id(double x, double y, double z, double t) {
        double r10398 = x;
        double r10399 = y;
        double r10400 = z;
        double r10401 = r10399 / r10400;
        double r10402 = t;
        double r10403 = r10401 * r10402;
        double r10404 = r10403 / r10402;
        double r10405 = r10398 * r10404;
        return r10405;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r10406 = x;
        float r10407 = y;
        float r10408 = r10406 * r10407;
        float r10409 = -2.701705248459643e+97;
        bool r10410 = r10408 <= r10409;
        float r10411 = z;
        float r10412 = r10406 / r10411;
        float r10413 = r10412 * r10407;
        float r10414 = -1.2460807539482867e-130;
        bool r10415 = r10408 <= r10414;
        float r10416 = r10408 / r10411;
        float r10417 = 3.084811635157326e-167;
        bool r10418 = r10408 <= r10417;
        float r10419 = 1.6843692024798482e+225;
        bool r10420 = r10408 <= r10419;
        float r10421 = r10420 ? r10416 : r10413;
        float r10422 = r10418 ? r10413 : r10421;
        float r10423 = r10415 ? r10416 : r10422;
        float r10424 = r10410 ? r10413 : r10423;
        return r10424;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r10425 = x;
        double r10426 = y;
        double r10427 = r10425 * r10426;
        double r10428 = -2.701705248459643e+97;
        bool r10429 = r10427 <= r10428;
        double r10430 = z;
        double r10431 = r10425 / r10430;
        double r10432 = r10431 * r10426;
        double r10433 = -1.2460807539482867e-130;
        bool r10434 = r10427 <= r10433;
        double r10435 = r10427 / r10430;
        double r10436 = 3.084811635157326e-167;
        bool r10437 = r10427 <= r10436;
        double r10438 = 1.6843692024798482e+225;
        bool r10439 = r10427 <= r10438;
        double r10440 = r10439 ? r10435 : r10432;
        double r10441 = r10437 ? r10432 : r10440;
        double r10442 = r10434 ? r10435 : r10441;
        double r10443 = r10429 ? r10432 : r10442;
        return r10443;
}

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 r10444, r10445, r10446, r10447, r10448, r10449, r10450, r10451;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10444);
        mpfr_init(r10445);
        mpfr_init(r10446);
        mpfr_init(r10447);
        mpfr_init(r10448);
        mpfr_init(r10449);
        mpfr_init(r10450);
        mpfr_init(r10451);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r10444, x, MPFR_RNDN);
        mpfr_set_d(r10445, y, MPFR_RNDN);
        mpfr_set_d(r10446, z, MPFR_RNDN);
        mpfr_div(r10447, r10445, r10446, MPFR_RNDN);
        mpfr_set_d(r10448, t, MPFR_RNDN);
        mpfr_mul(r10449, r10447, r10448, MPFR_RNDN);
        mpfr_div(r10450, r10449, r10448, MPFR_RNDN);
        mpfr_mul(r10451, r10444, r10450, MPFR_RNDN);
        return mpfr_get_d(r10451, MPFR_RNDN);
}

static mpfr_t r10452, r10453, r10454, r10455, r10456, r10457, r10458, r10459, r10460, r10461, r10462, r10463, r10464, r10465, r10466, r10467, r10468, r10469, r10470;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10452);
        mpfr_init(r10453);
        mpfr_init(r10454);
        mpfr_init_set_str(r10455, "-2.701705248459643e+97", 10, MPFR_RNDN);
        mpfr_init(r10456);
        mpfr_init(r10457);
        mpfr_init(r10458);
        mpfr_init(r10459);
        mpfr_init_set_str(r10460, "-1.2460807539482867e-130", 10, MPFR_RNDN);
        mpfr_init(r10461);
        mpfr_init(r10462);
        mpfr_init_set_str(r10463, "3.084811635157326e-167", 10, MPFR_RNDN);
        mpfr_init(r10464);
        mpfr_init_set_str(r10465, "1.6843692024798482e+225", 10, MPFR_RNDN);
        mpfr_init(r10466);
        mpfr_init(r10467);
        mpfr_init(r10468);
        mpfr_init(r10469);
        mpfr_init(r10470);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r10452, x, MPFR_RNDN);
        mpfr_set_d(r10453, y, MPFR_RNDN);
        mpfr_mul(r10454, r10452, r10453, MPFR_RNDN);
        ;
        mpfr_set_si(r10456, mpfr_cmp(r10454, r10455) <= 0, MPFR_RNDN);
        mpfr_set_d(r10457, z, MPFR_RNDN);
        mpfr_div(r10458, r10452, r10457, MPFR_RNDN);
        mpfr_mul(r10459, r10458, r10453, MPFR_RNDN);
        ;
        mpfr_set_si(r10461, mpfr_cmp(r10454, r10460) <= 0, MPFR_RNDN);
        mpfr_div(r10462, r10454, r10457, MPFR_RNDN);
        ;
        mpfr_set_si(r10464, mpfr_cmp(r10454, r10463) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r10466, mpfr_cmp(r10454, r10465) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r10466, MPFR_RNDN)) { mpfr_set(r10467, r10462, MPFR_RNDN); } else { mpfr_set(r10467, r10459, MPFR_RNDN); };
        if (mpfr_get_si(r10464, MPFR_RNDN)) { mpfr_set(r10468, r10459, MPFR_RNDN); } else { mpfr_set(r10468, r10467, MPFR_RNDN); };
        if (mpfr_get_si(r10461, MPFR_RNDN)) { mpfr_set(r10469, r10462, MPFR_RNDN); } else { mpfr_set(r10469, r10468, MPFR_RNDN); };
        if (mpfr_get_si(r10456, MPFR_RNDN)) { mpfr_set(r10470, r10459, MPFR_RNDN); } else { mpfr_set(r10470, r10469, MPFR_RNDN); };
        return mpfr_get_d(r10470, MPFR_RNDN);
}

static mpfr_t r10471, r10472, r10473, r10474, r10475, r10476, r10477, r10478, r10479, r10480, r10481, r10482, r10483, r10484, r10485, r10486, r10487, r10488, r10489;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10471);
        mpfr_init(r10472);
        mpfr_init(r10473);
        mpfr_init_set_str(r10474, "-2.701705248459643e+97", 10, MPFR_RNDN);
        mpfr_init(r10475);
        mpfr_init(r10476);
        mpfr_init(r10477);
        mpfr_init(r10478);
        mpfr_init_set_str(r10479, "-1.2460807539482867e-130", 10, MPFR_RNDN);
        mpfr_init(r10480);
        mpfr_init(r10481);
        mpfr_init_set_str(r10482, "3.084811635157326e-167", 10, MPFR_RNDN);
        mpfr_init(r10483);
        mpfr_init_set_str(r10484, "1.6843692024798482e+225", 10, MPFR_RNDN);
        mpfr_init(r10485);
        mpfr_init(r10486);
        mpfr_init(r10487);
        mpfr_init(r10488);
        mpfr_init(r10489);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r10471, x, MPFR_RNDN);
        mpfr_set_d(r10472, y, MPFR_RNDN);
        mpfr_mul(r10473, r10471, r10472, MPFR_RNDN);
        ;
        mpfr_set_si(r10475, mpfr_cmp(r10473, r10474) <= 0, MPFR_RNDN);
        mpfr_set_d(r10476, z, MPFR_RNDN);
        mpfr_div(r10477, r10471, r10476, MPFR_RNDN);
        mpfr_mul(r10478, r10477, r10472, MPFR_RNDN);
        ;
        mpfr_set_si(r10480, mpfr_cmp(r10473, r10479) <= 0, MPFR_RNDN);
        mpfr_div(r10481, r10473, r10476, MPFR_RNDN);
        ;
        mpfr_set_si(r10483, mpfr_cmp(r10473, r10482) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r10485, mpfr_cmp(r10473, r10484) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r10485, MPFR_RNDN)) { mpfr_set(r10486, r10481, MPFR_RNDN); } else { mpfr_set(r10486, r10478, MPFR_RNDN); };
        if (mpfr_get_si(r10483, MPFR_RNDN)) { mpfr_set(r10487, r10478, MPFR_RNDN); } else { mpfr_set(r10487, r10486, MPFR_RNDN); };
        if (mpfr_get_si(r10480, MPFR_RNDN)) { mpfr_set(r10488, r10481, MPFR_RNDN); } else { mpfr_set(r10488, r10487, MPFR_RNDN); };
        if (mpfr_get_si(r10475, MPFR_RNDN)) { mpfr_set(r10489, r10478, MPFR_RNDN); } else { mpfr_set(r10489, r10488, MPFR_RNDN); };
        return mpfr_get_d(r10489, MPFR_RNDN);
}

