#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 r32384 = x;
        float r32385 = y;
        float r32386 = z;
        float r32387 = r32385 / r32386;
        float r32388 = t;
        float r32389 = r32387 * r32388;
        float r32390 = r32389 / r32388;
        float r32391 = r32384 * r32390;
        return r32391;
}

double f_id(double x, double y, double z, double t) {
        double r32392 = x;
        double r32393 = y;
        double r32394 = z;
        double r32395 = r32393 / r32394;
        double r32396 = t;
        double r32397 = r32395 * r32396;
        double r32398 = r32397 / r32396;
        double r32399 = r32392 * r32398;
        return r32399;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r32400 = y;
        float r32401 = -2.58053419571785e+22;
        bool r32402 = r32400 <= r32401;
        float r32403 = x;
        float r32404 = r32400 * r32403;
        float r32405 = z;
        float r32406 = r32404 / r32405;
        float r32407 = 9.019566302352389e-119;
        bool r32408 = r32400 <= r32407;
        float r32409 = r32400 / r32405;
        float r32410 = r32403 * r32409;
        float r32411 = 5.127878477553548e+249;
        bool r32412 = r32400 <= r32411;
        float r32413 = r32403 / r32405;
        float r32414 = r32413 * r32400;
        float r32415 = r32412 ? r32406 : r32414;
        float r32416 = r32408 ? r32410 : r32415;
        float r32417 = r32402 ? r32406 : r32416;
        return r32417;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r32418 = y;
        double r32419 = -2.58053419571785e+22;
        bool r32420 = r32418 <= r32419;
        double r32421 = x;
        double r32422 = r32418 * r32421;
        double r32423 = z;
        double r32424 = r32422 / r32423;
        double r32425 = 9.019566302352389e-119;
        bool r32426 = r32418 <= r32425;
        double r32427 = r32418 / r32423;
        double r32428 = r32421 * r32427;
        double r32429 = 5.127878477553548e+249;
        bool r32430 = r32418 <= r32429;
        double r32431 = r32421 / r32423;
        double r32432 = r32431 * r32418;
        double r32433 = r32430 ? r32424 : r32432;
        double r32434 = r32426 ? r32428 : r32433;
        double r32435 = r32420 ? r32424 : r32434;
        return r32435;
}

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 r32436, r32437, r32438, r32439, r32440, r32441, r32442, r32443;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r32436);
        mpfr_init(r32437);
        mpfr_init(r32438);
        mpfr_init(r32439);
        mpfr_init(r32440);
        mpfr_init(r32441);
        mpfr_init(r32442);
        mpfr_init(r32443);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r32436, x, MPFR_RNDN);
        mpfr_set_d(r32437, y, MPFR_RNDN);
        mpfr_set_d(r32438, z, MPFR_RNDN);
        mpfr_div(r32439, r32437, r32438, MPFR_RNDN);
        mpfr_set_d(r32440, t, MPFR_RNDN);
        mpfr_mul(r32441, r32439, r32440, MPFR_RNDN);
        mpfr_div(r32442, r32441, r32440, MPFR_RNDN);
        mpfr_mul(r32443, r32436, r32442, MPFR_RNDN);
        return mpfr_get_d(r32443, MPFR_RNDN);
}

static mpfr_t r32444, r32445, r32446, r32447, r32448, r32449, r32450, r32451, r32452, r32453, r32454, r32455, r32456, r32457, r32458, r32459, r32460, r32461;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32444);
        mpfr_init_set_str(r32445, "-2.58053419571785e+22", 10, MPFR_RNDN);
        mpfr_init(r32446);
        mpfr_init(r32447);
        mpfr_init(r32448);
        mpfr_init(r32449);
        mpfr_init(r32450);
        mpfr_init_set_str(r32451, "9.019566302352389e-119", 10, MPFR_RNDN);
        mpfr_init(r32452);
        mpfr_init(r32453);
        mpfr_init(r32454);
        mpfr_init_set_str(r32455, "5.127878477553548e+249", 10, MPFR_RNDN);
        mpfr_init(r32456);
        mpfr_init(r32457);
        mpfr_init(r32458);
        mpfr_init(r32459);
        mpfr_init(r32460);
        mpfr_init(r32461);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r32444, y, MPFR_RNDN);
        ;
        mpfr_set_si(r32446, mpfr_cmp(r32444, r32445) <= 0, MPFR_RNDN);
        mpfr_set_d(r32447, x, MPFR_RNDN);
        mpfr_mul(r32448, r32444, r32447, MPFR_RNDN);
        mpfr_set_d(r32449, z, MPFR_RNDN);
        mpfr_div(r32450, r32448, r32449, MPFR_RNDN);
        ;
        mpfr_set_si(r32452, mpfr_cmp(r32444, r32451) <= 0, MPFR_RNDN);
        mpfr_div(r32453, r32444, r32449, MPFR_RNDN);
        mpfr_mul(r32454, r32447, r32453, MPFR_RNDN);
        ;
        mpfr_set_si(r32456, mpfr_cmp(r32444, r32455) <= 0, MPFR_RNDN);
        mpfr_div(r32457, r32447, r32449, MPFR_RNDN);
        mpfr_mul(r32458, r32457, r32444, MPFR_RNDN);
        if (mpfr_get_si(r32456, MPFR_RNDN)) { mpfr_set(r32459, r32450, MPFR_RNDN); } else { mpfr_set(r32459, r32458, MPFR_RNDN); };
        if (mpfr_get_si(r32452, MPFR_RNDN)) { mpfr_set(r32460, r32454, MPFR_RNDN); } else { mpfr_set(r32460, r32459, MPFR_RNDN); };
        if (mpfr_get_si(r32446, MPFR_RNDN)) { mpfr_set(r32461, r32450, MPFR_RNDN); } else { mpfr_set(r32461, r32460, MPFR_RNDN); };
        return mpfr_get_d(r32461, MPFR_RNDN);
}

static mpfr_t r32462, r32463, r32464, r32465, r32466, r32467, r32468, r32469, r32470, r32471, r32472, r32473, r32474, r32475, r32476, r32477, r32478, r32479;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32462);
        mpfr_init_set_str(r32463, "-2.58053419571785e+22", 10, MPFR_RNDN);
        mpfr_init(r32464);
        mpfr_init(r32465);
        mpfr_init(r32466);
        mpfr_init(r32467);
        mpfr_init(r32468);
        mpfr_init_set_str(r32469, "9.019566302352389e-119", 10, MPFR_RNDN);
        mpfr_init(r32470);
        mpfr_init(r32471);
        mpfr_init(r32472);
        mpfr_init_set_str(r32473, "5.127878477553548e+249", 10, MPFR_RNDN);
        mpfr_init(r32474);
        mpfr_init(r32475);
        mpfr_init(r32476);
        mpfr_init(r32477);
        mpfr_init(r32478);
        mpfr_init(r32479);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r32462, y, MPFR_RNDN);
        ;
        mpfr_set_si(r32464, mpfr_cmp(r32462, r32463) <= 0, MPFR_RNDN);
        mpfr_set_d(r32465, x, MPFR_RNDN);
        mpfr_mul(r32466, r32462, r32465, MPFR_RNDN);
        mpfr_set_d(r32467, z, MPFR_RNDN);
        mpfr_div(r32468, r32466, r32467, MPFR_RNDN);
        ;
        mpfr_set_si(r32470, mpfr_cmp(r32462, r32469) <= 0, MPFR_RNDN);
        mpfr_div(r32471, r32462, r32467, MPFR_RNDN);
        mpfr_mul(r32472, r32465, r32471, MPFR_RNDN);
        ;
        mpfr_set_si(r32474, mpfr_cmp(r32462, r32473) <= 0, MPFR_RNDN);
        mpfr_div(r32475, r32465, r32467, MPFR_RNDN);
        mpfr_mul(r32476, r32475, r32462, MPFR_RNDN);
        if (mpfr_get_si(r32474, MPFR_RNDN)) { mpfr_set(r32477, r32468, MPFR_RNDN); } else { mpfr_set(r32477, r32476, MPFR_RNDN); };
        if (mpfr_get_si(r32470, MPFR_RNDN)) { mpfr_set(r32478, r32472, MPFR_RNDN); } else { mpfr_set(r32478, r32477, MPFR_RNDN); };
        if (mpfr_get_si(r32464, MPFR_RNDN)) { mpfr_set(r32479, r32468, MPFR_RNDN); } else { mpfr_set(r32479, r32478, MPFR_RNDN); };
        return mpfr_get_d(r32479, MPFR_RNDN);
}

