#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 r50441 = x;
        float r50442 = y;
        float r50443 = z;
        float r50444 = r50442 / r50443;
        float r50445 = t;
        float r50446 = r50444 * r50445;
        float r50447 = r50446 / r50445;
        float r50448 = r50441 * r50447;
        return r50448;
}

double f_id(double x, double y, double z, double t) {
        double r50449 = x;
        double r50450 = y;
        double r50451 = z;
        double r50452 = r50450 / r50451;
        double r50453 = t;
        double r50454 = r50452 * r50453;
        double r50455 = r50454 / r50453;
        double r50456 = r50449 * r50455;
        return r50456;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r50457 = y;
        float r50458 = -7.542630138100415e+19;
        bool r50459 = r50457 <= r50458;
        float r50460 = x;
        float r50461 = r50457 * r50460;
        float r50462 = z;
        float r50463 = r50461 / r50462;
        float r50464 = 1.5601337082604852e-118;
        bool r50465 = r50457 <= r50464;
        float r50466 = r50457 / r50462;
        float r50467 = r50460 * r50466;
        float r50468 = 3.281842225634271e+250;
        bool r50469 = r50457 <= r50468;
        float r50470 = r50460 / r50462;
        float r50471 = r50470 * r50457;
        float r50472 = r50469 ? r50463 : r50471;
        float r50473 = r50465 ? r50467 : r50472;
        float r50474 = r50459 ? r50463 : r50473;
        return r50474;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r50475 = y;
        double r50476 = -7.542630138100415e+19;
        bool r50477 = r50475 <= r50476;
        double r50478 = x;
        double r50479 = r50475 * r50478;
        double r50480 = z;
        double r50481 = r50479 / r50480;
        double r50482 = 1.5601337082604852e-118;
        bool r50483 = r50475 <= r50482;
        double r50484 = r50475 / r50480;
        double r50485 = r50478 * r50484;
        double r50486 = 3.281842225634271e+250;
        bool r50487 = r50475 <= r50486;
        double r50488 = r50478 / r50480;
        double r50489 = r50488 * r50475;
        double r50490 = r50487 ? r50481 : r50489;
        double r50491 = r50483 ? r50485 : r50490;
        double r50492 = r50477 ? r50481 : r50491;
        return r50492;
}

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 r50493, r50494, r50495, r50496, r50497, r50498, r50499, r50500;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50493);
        mpfr_init(r50494);
        mpfr_init(r50495);
        mpfr_init(r50496);
        mpfr_init(r50497);
        mpfr_init(r50498);
        mpfr_init(r50499);
        mpfr_init(r50500);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r50493, x, MPFR_RNDN);
        mpfr_set_d(r50494, y, MPFR_RNDN);
        mpfr_set_d(r50495, z, MPFR_RNDN);
        mpfr_div(r50496, r50494, r50495, MPFR_RNDN);
        mpfr_set_d(r50497, t, MPFR_RNDN);
        mpfr_mul(r50498, r50496, r50497, MPFR_RNDN);
        mpfr_div(r50499, r50498, r50497, MPFR_RNDN);
        mpfr_mul(r50500, r50493, r50499, MPFR_RNDN);
        return mpfr_get_d(r50500, MPFR_RNDN);
}

static mpfr_t r50501, r50502, r50503, r50504, r50505, r50506, r50507, r50508, r50509, r50510, r50511, r50512, r50513, r50514, r50515, r50516, r50517, r50518;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50501);
        mpfr_init_set_str(r50502, "-7.542630138100415e+19", 10, MPFR_RNDN);
        mpfr_init(r50503);
        mpfr_init(r50504);
        mpfr_init(r50505);
        mpfr_init(r50506);
        mpfr_init(r50507);
        mpfr_init_set_str(r50508, "1.5601337082604852e-118", 10, MPFR_RNDN);
        mpfr_init(r50509);
        mpfr_init(r50510);
        mpfr_init(r50511);
        mpfr_init_set_str(r50512, "3.281842225634271e+250", 10, MPFR_RNDN);
        mpfr_init(r50513);
        mpfr_init(r50514);
        mpfr_init(r50515);
        mpfr_init(r50516);
        mpfr_init(r50517);
        mpfr_init(r50518);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r50501, y, MPFR_RNDN);
        ;
        mpfr_set_si(r50503, mpfr_cmp(r50501, r50502) <= 0, MPFR_RNDN);
        mpfr_set_d(r50504, x, MPFR_RNDN);
        mpfr_mul(r50505, r50501, r50504, MPFR_RNDN);
        mpfr_set_d(r50506, z, MPFR_RNDN);
        mpfr_div(r50507, r50505, r50506, MPFR_RNDN);
        ;
        mpfr_set_si(r50509, mpfr_cmp(r50501, r50508) <= 0, MPFR_RNDN);
        mpfr_div(r50510, r50501, r50506, MPFR_RNDN);
        mpfr_mul(r50511, r50504, r50510, MPFR_RNDN);
        ;
        mpfr_set_si(r50513, mpfr_cmp(r50501, r50512) <= 0, MPFR_RNDN);
        mpfr_div(r50514, r50504, r50506, MPFR_RNDN);
        mpfr_mul(r50515, r50514, r50501, MPFR_RNDN);
        if (mpfr_get_si(r50513, MPFR_RNDN)) { mpfr_set(r50516, r50507, MPFR_RNDN); } else { mpfr_set(r50516, r50515, MPFR_RNDN); };
        if (mpfr_get_si(r50509, MPFR_RNDN)) { mpfr_set(r50517, r50511, MPFR_RNDN); } else { mpfr_set(r50517, r50516, MPFR_RNDN); };
        if (mpfr_get_si(r50503, MPFR_RNDN)) { mpfr_set(r50518, r50507, MPFR_RNDN); } else { mpfr_set(r50518, r50517, MPFR_RNDN); };
        return mpfr_get_d(r50518, MPFR_RNDN);
}

static mpfr_t r50519, r50520, r50521, r50522, r50523, r50524, r50525, r50526, r50527, r50528, r50529, r50530, r50531, r50532, r50533, r50534, r50535, r50536;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50519);
        mpfr_init_set_str(r50520, "-7.542630138100415e+19", 10, MPFR_RNDN);
        mpfr_init(r50521);
        mpfr_init(r50522);
        mpfr_init(r50523);
        mpfr_init(r50524);
        mpfr_init(r50525);
        mpfr_init_set_str(r50526, "1.5601337082604852e-118", 10, MPFR_RNDN);
        mpfr_init(r50527);
        mpfr_init(r50528);
        mpfr_init(r50529);
        mpfr_init_set_str(r50530, "3.281842225634271e+250", 10, MPFR_RNDN);
        mpfr_init(r50531);
        mpfr_init(r50532);
        mpfr_init(r50533);
        mpfr_init(r50534);
        mpfr_init(r50535);
        mpfr_init(r50536);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r50519, y, MPFR_RNDN);
        ;
        mpfr_set_si(r50521, mpfr_cmp(r50519, r50520) <= 0, MPFR_RNDN);
        mpfr_set_d(r50522, x, MPFR_RNDN);
        mpfr_mul(r50523, r50519, r50522, MPFR_RNDN);
        mpfr_set_d(r50524, z, MPFR_RNDN);
        mpfr_div(r50525, r50523, r50524, MPFR_RNDN);
        ;
        mpfr_set_si(r50527, mpfr_cmp(r50519, r50526) <= 0, MPFR_RNDN);
        mpfr_div(r50528, r50519, r50524, MPFR_RNDN);
        mpfr_mul(r50529, r50522, r50528, MPFR_RNDN);
        ;
        mpfr_set_si(r50531, mpfr_cmp(r50519, r50530) <= 0, MPFR_RNDN);
        mpfr_div(r50532, r50522, r50524, MPFR_RNDN);
        mpfr_mul(r50533, r50532, r50519, MPFR_RNDN);
        if (mpfr_get_si(r50531, MPFR_RNDN)) { mpfr_set(r50534, r50525, MPFR_RNDN); } else { mpfr_set(r50534, r50533, MPFR_RNDN); };
        if (mpfr_get_si(r50527, MPFR_RNDN)) { mpfr_set(r50535, r50529, MPFR_RNDN); } else { mpfr_set(r50535, r50534, MPFR_RNDN); };
        if (mpfr_get_si(r50521, MPFR_RNDN)) { mpfr_set(r50536, r50525, MPFR_RNDN); } else { mpfr_set(r50536, r50535, MPFR_RNDN); };
        return mpfr_get_d(r50536, MPFR_RNDN);
}

