#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 r27117 = x;
        float r27118 = y;
        float r27119 = z;
        float r27120 = r27118 / r27119;
        float r27121 = t;
        float r27122 = r27120 * r27121;
        float r27123 = r27122 / r27121;
        float r27124 = r27117 * r27123;
        return r27124;
}

double f_id(double x, double y, double z, double t) {
        double r27125 = x;
        double r27126 = y;
        double r27127 = z;
        double r27128 = r27126 / r27127;
        double r27129 = t;
        double r27130 = r27128 * r27129;
        double r27131 = r27130 / r27129;
        double r27132 = r27125 * r27131;
        return r27132;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r27133 = z;
        float r27134 = y;
        float r27135 = r27133 / r27134;
        float r27136 = -7.477196651461092e+299;
        bool r27137 = r27135 <= r27136;
        float r27138 = x;
        float r27139 = r27138 * r27134;
        float r27140 = r27139 / r27133;
        float r27141 = -3.216441226474962e-233;
        bool r27142 = r27135 <= r27141;
        float r27143 = r27138 / r27135;
        float r27144 = 1.6231268326186054e-152;
        bool r27145 = r27135 <= r27144;
        float r27146 = 2.9774054308490443e+181;
        bool r27147 = r27135 <= r27146;
        float r27148 = r27147 ? r27143 : r27140;
        float r27149 = r27145 ? r27140 : r27148;
        float r27150 = r27142 ? r27143 : r27149;
        float r27151 = r27137 ? r27140 : r27150;
        return r27151;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r27152 = z;
        double r27153 = y;
        double r27154 = r27152 / r27153;
        double r27155 = -7.477196651461092e+299;
        bool r27156 = r27154 <= r27155;
        double r27157 = x;
        double r27158 = r27157 * r27153;
        double r27159 = r27158 / r27152;
        double r27160 = -3.216441226474962e-233;
        bool r27161 = r27154 <= r27160;
        double r27162 = r27157 / r27154;
        double r27163 = 1.6231268326186054e-152;
        bool r27164 = r27154 <= r27163;
        double r27165 = 2.9774054308490443e+181;
        bool r27166 = r27154 <= r27165;
        double r27167 = r27166 ? r27162 : r27159;
        double r27168 = r27164 ? r27159 : r27167;
        double r27169 = r27161 ? r27162 : r27168;
        double r27170 = r27156 ? r27159 : r27169;
        return r27170;
}

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 r27171, r27172, r27173, r27174, r27175, r27176, r27177, r27178;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r27171);
        mpfr_init(r27172);
        mpfr_init(r27173);
        mpfr_init(r27174);
        mpfr_init(r27175);
        mpfr_init(r27176);
        mpfr_init(r27177);
        mpfr_init(r27178);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r27171, x, MPFR_RNDN);
        mpfr_set_d(r27172, y, MPFR_RNDN);
        mpfr_set_d(r27173, z, MPFR_RNDN);
        mpfr_div(r27174, r27172, r27173, MPFR_RNDN);
        mpfr_set_d(r27175, t, MPFR_RNDN);
        mpfr_mul(r27176, r27174, r27175, MPFR_RNDN);
        mpfr_div(r27177, r27176, r27175, MPFR_RNDN);
        mpfr_mul(r27178, r27171, r27177, MPFR_RNDN);
        return mpfr_get_d(r27178, MPFR_RNDN);
}

static mpfr_t r27179, r27180, r27181, r27182, r27183, r27184, r27185, r27186, r27187, r27188, r27189, r27190, r27191, r27192, r27193, r27194, r27195, r27196, r27197;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27179);
        mpfr_init(r27180);
        mpfr_init(r27181);
        mpfr_init_set_str(r27182, "-7.477196651461092e+299", 10, MPFR_RNDN);
        mpfr_init(r27183);
        mpfr_init(r27184);
        mpfr_init(r27185);
        mpfr_init(r27186);
        mpfr_init_set_str(r27187, "-3.216441226474962e-233", 10, MPFR_RNDN);
        mpfr_init(r27188);
        mpfr_init(r27189);
        mpfr_init_set_str(r27190, "1.6231268326186054e-152", 10, MPFR_RNDN);
        mpfr_init(r27191);
        mpfr_init_set_str(r27192, "2.9774054308490443e+181", 10, MPFR_RNDN);
        mpfr_init(r27193);
        mpfr_init(r27194);
        mpfr_init(r27195);
        mpfr_init(r27196);
        mpfr_init(r27197);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r27179, z, MPFR_RNDN);
        mpfr_set_d(r27180, y, MPFR_RNDN);
        mpfr_div(r27181, r27179, r27180, MPFR_RNDN);
        ;
        mpfr_set_si(r27183, mpfr_cmp(r27181, r27182) <= 0, MPFR_RNDN);
        mpfr_set_d(r27184, x, MPFR_RNDN);
        mpfr_mul(r27185, r27184, r27180, MPFR_RNDN);
        mpfr_div(r27186, r27185, r27179, MPFR_RNDN);
        ;
        mpfr_set_si(r27188, mpfr_cmp(r27181, r27187) <= 0, MPFR_RNDN);
        mpfr_div(r27189, r27184, r27181, MPFR_RNDN);
        ;
        mpfr_set_si(r27191, mpfr_cmp(r27181, r27190) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27193, mpfr_cmp(r27181, r27192) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r27193, MPFR_RNDN)) { mpfr_set(r27194, r27189, MPFR_RNDN); } else { mpfr_set(r27194, r27186, MPFR_RNDN); };
        if (mpfr_get_si(r27191, MPFR_RNDN)) { mpfr_set(r27195, r27186, MPFR_RNDN); } else { mpfr_set(r27195, r27194, MPFR_RNDN); };
        if (mpfr_get_si(r27188, MPFR_RNDN)) { mpfr_set(r27196, r27189, MPFR_RNDN); } else { mpfr_set(r27196, r27195, MPFR_RNDN); };
        if (mpfr_get_si(r27183, MPFR_RNDN)) { mpfr_set(r27197, r27186, MPFR_RNDN); } else { mpfr_set(r27197, r27196, MPFR_RNDN); };
        return mpfr_get_d(r27197, MPFR_RNDN);
}

static mpfr_t r27198, r27199, r27200, r27201, r27202, r27203, r27204, r27205, r27206, r27207, r27208, r27209, r27210, r27211, r27212, r27213, r27214, r27215, r27216;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27198);
        mpfr_init(r27199);
        mpfr_init(r27200);
        mpfr_init_set_str(r27201, "-7.477196651461092e+299", 10, MPFR_RNDN);
        mpfr_init(r27202);
        mpfr_init(r27203);
        mpfr_init(r27204);
        mpfr_init(r27205);
        mpfr_init_set_str(r27206, "-3.216441226474962e-233", 10, MPFR_RNDN);
        mpfr_init(r27207);
        mpfr_init(r27208);
        mpfr_init_set_str(r27209, "1.6231268326186054e-152", 10, MPFR_RNDN);
        mpfr_init(r27210);
        mpfr_init_set_str(r27211, "2.9774054308490443e+181", 10, MPFR_RNDN);
        mpfr_init(r27212);
        mpfr_init(r27213);
        mpfr_init(r27214);
        mpfr_init(r27215);
        mpfr_init(r27216);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r27198, z, MPFR_RNDN);
        mpfr_set_d(r27199, y, MPFR_RNDN);
        mpfr_div(r27200, r27198, r27199, MPFR_RNDN);
        ;
        mpfr_set_si(r27202, mpfr_cmp(r27200, r27201) <= 0, MPFR_RNDN);
        mpfr_set_d(r27203, x, MPFR_RNDN);
        mpfr_mul(r27204, r27203, r27199, MPFR_RNDN);
        mpfr_div(r27205, r27204, r27198, MPFR_RNDN);
        ;
        mpfr_set_si(r27207, mpfr_cmp(r27200, r27206) <= 0, MPFR_RNDN);
        mpfr_div(r27208, r27203, r27200, MPFR_RNDN);
        ;
        mpfr_set_si(r27210, mpfr_cmp(r27200, r27209) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27212, mpfr_cmp(r27200, r27211) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r27212, MPFR_RNDN)) { mpfr_set(r27213, r27208, MPFR_RNDN); } else { mpfr_set(r27213, r27205, MPFR_RNDN); };
        if (mpfr_get_si(r27210, MPFR_RNDN)) { mpfr_set(r27214, r27205, MPFR_RNDN); } else { mpfr_set(r27214, r27213, MPFR_RNDN); };
        if (mpfr_get_si(r27207, MPFR_RNDN)) { mpfr_set(r27215, r27208, MPFR_RNDN); } else { mpfr_set(r27215, r27214, MPFR_RNDN); };
        if (mpfr_get_si(r27202, MPFR_RNDN)) { mpfr_set(r27216, r27205, MPFR_RNDN); } else { mpfr_set(r27216, r27215, MPFR_RNDN); };
        return mpfr_get_d(r27216, MPFR_RNDN);
}

