#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 r32139 = x;
        float r32140 = y;
        float r32141 = z;
        float r32142 = r32140 / r32141;
        float r32143 = t;
        float r32144 = r32142 * r32143;
        float r32145 = r32144 / r32143;
        float r32146 = r32139 * r32145;
        return r32146;
}

double f_id(double x, double y, double z, double t) {
        double r32147 = x;
        double r32148 = y;
        double r32149 = z;
        double r32150 = r32148 / r32149;
        double r32151 = t;
        double r32152 = r32150 * r32151;
        double r32153 = r32152 / r32151;
        double r32154 = r32147 * r32153;
        return r32154;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r32155 = y;
        float r32156 = -7.542630138100415e+19;
        bool r32157 = r32155 <= r32156;
        float r32158 = x;
        float r32159 = r32155 * r32158;
        float r32160 = z;
        float r32161 = r32159 / r32160;
        float r32162 = 1.5601337082604852e-118;
        bool r32163 = r32155 <= r32162;
        float r32164 = r32155 / r32160;
        float r32165 = r32158 * r32164;
        float r32166 = 3.281842225634271e+250;
        bool r32167 = r32155 <= r32166;
        float r32168 = r32158 / r32160;
        float r32169 = r32168 * r32155;
        float r32170 = r32167 ? r32161 : r32169;
        float r32171 = r32163 ? r32165 : r32170;
        float r32172 = r32157 ? r32161 : r32171;
        return r32172;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r32173 = y;
        double r32174 = -7.542630138100415e+19;
        bool r32175 = r32173 <= r32174;
        double r32176 = x;
        double r32177 = r32173 * r32176;
        double r32178 = z;
        double r32179 = r32177 / r32178;
        double r32180 = 1.5601337082604852e-118;
        bool r32181 = r32173 <= r32180;
        double r32182 = r32173 / r32178;
        double r32183 = r32176 * r32182;
        double r32184 = 3.281842225634271e+250;
        bool r32185 = r32173 <= r32184;
        double r32186 = r32176 / r32178;
        double r32187 = r32186 * r32173;
        double r32188 = r32185 ? r32179 : r32187;
        double r32189 = r32181 ? r32183 : r32188;
        double r32190 = r32175 ? r32179 : r32189;
        return r32190;
}

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 r32191, r32192, r32193, r32194, r32195, r32196, r32197, r32198;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r32191);
        mpfr_init(r32192);
        mpfr_init(r32193);
        mpfr_init(r32194);
        mpfr_init(r32195);
        mpfr_init(r32196);
        mpfr_init(r32197);
        mpfr_init(r32198);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r32191, x, MPFR_RNDN);
        mpfr_set_d(r32192, y, MPFR_RNDN);
        mpfr_set_d(r32193, z, MPFR_RNDN);
        mpfr_div(r32194, r32192, r32193, MPFR_RNDN);
        mpfr_set_d(r32195, t, MPFR_RNDN);
        mpfr_mul(r32196, r32194, r32195, MPFR_RNDN);
        mpfr_div(r32197, r32196, r32195, MPFR_RNDN);
        mpfr_mul(r32198, r32191, r32197, MPFR_RNDN);
        return mpfr_get_d(r32198, MPFR_RNDN);
}

static mpfr_t r32199, r32200, r32201, r32202, r32203, r32204, r32205, r32206, r32207, r32208, r32209, r32210, r32211, r32212, r32213, r32214, r32215, r32216;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32199);
        mpfr_init_set_str(r32200, "-7.542630138100415e+19", 10, MPFR_RNDN);
        mpfr_init(r32201);
        mpfr_init(r32202);
        mpfr_init(r32203);
        mpfr_init(r32204);
        mpfr_init(r32205);
        mpfr_init_set_str(r32206, "1.5601337082604852e-118", 10, MPFR_RNDN);
        mpfr_init(r32207);
        mpfr_init(r32208);
        mpfr_init(r32209);
        mpfr_init_set_str(r32210, "3.281842225634271e+250", 10, MPFR_RNDN);
        mpfr_init(r32211);
        mpfr_init(r32212);
        mpfr_init(r32213);
        mpfr_init(r32214);
        mpfr_init(r32215);
        mpfr_init(r32216);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r32199, y, MPFR_RNDN);
        ;
        mpfr_set_si(r32201, mpfr_cmp(r32199, r32200) <= 0, MPFR_RNDN);
        mpfr_set_d(r32202, x, MPFR_RNDN);
        mpfr_mul(r32203, r32199, r32202, MPFR_RNDN);
        mpfr_set_d(r32204, z, MPFR_RNDN);
        mpfr_div(r32205, r32203, r32204, MPFR_RNDN);
        ;
        mpfr_set_si(r32207, mpfr_cmp(r32199, r32206) <= 0, MPFR_RNDN);
        mpfr_div(r32208, r32199, r32204, MPFR_RNDN);
        mpfr_mul(r32209, r32202, r32208, MPFR_RNDN);
        ;
        mpfr_set_si(r32211, mpfr_cmp(r32199, r32210) <= 0, MPFR_RNDN);
        mpfr_div(r32212, r32202, r32204, MPFR_RNDN);
        mpfr_mul(r32213, r32212, r32199, MPFR_RNDN);
        if (mpfr_get_si(r32211, MPFR_RNDN)) { mpfr_set(r32214, r32205, MPFR_RNDN); } else { mpfr_set(r32214, r32213, MPFR_RNDN); };
        if (mpfr_get_si(r32207, MPFR_RNDN)) { mpfr_set(r32215, r32209, MPFR_RNDN); } else { mpfr_set(r32215, r32214, MPFR_RNDN); };
        if (mpfr_get_si(r32201, MPFR_RNDN)) { mpfr_set(r32216, r32205, MPFR_RNDN); } else { mpfr_set(r32216, r32215, MPFR_RNDN); };
        return mpfr_get_d(r32216, MPFR_RNDN);
}

static mpfr_t r32217, r32218, r32219, r32220, r32221, r32222, r32223, r32224, r32225, r32226, r32227, r32228, r32229, r32230, r32231, r32232, r32233, r32234;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32217);
        mpfr_init_set_str(r32218, "-7.542630138100415e+19", 10, MPFR_RNDN);
        mpfr_init(r32219);
        mpfr_init(r32220);
        mpfr_init(r32221);
        mpfr_init(r32222);
        mpfr_init(r32223);
        mpfr_init_set_str(r32224, "1.5601337082604852e-118", 10, MPFR_RNDN);
        mpfr_init(r32225);
        mpfr_init(r32226);
        mpfr_init(r32227);
        mpfr_init_set_str(r32228, "3.281842225634271e+250", 10, MPFR_RNDN);
        mpfr_init(r32229);
        mpfr_init(r32230);
        mpfr_init(r32231);
        mpfr_init(r32232);
        mpfr_init(r32233);
        mpfr_init(r32234);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r32217, y, MPFR_RNDN);
        ;
        mpfr_set_si(r32219, mpfr_cmp(r32217, r32218) <= 0, MPFR_RNDN);
        mpfr_set_d(r32220, x, MPFR_RNDN);
        mpfr_mul(r32221, r32217, r32220, MPFR_RNDN);
        mpfr_set_d(r32222, z, MPFR_RNDN);
        mpfr_div(r32223, r32221, r32222, MPFR_RNDN);
        ;
        mpfr_set_si(r32225, mpfr_cmp(r32217, r32224) <= 0, MPFR_RNDN);
        mpfr_div(r32226, r32217, r32222, MPFR_RNDN);
        mpfr_mul(r32227, r32220, r32226, MPFR_RNDN);
        ;
        mpfr_set_si(r32229, mpfr_cmp(r32217, r32228) <= 0, MPFR_RNDN);
        mpfr_div(r32230, r32220, r32222, MPFR_RNDN);
        mpfr_mul(r32231, r32230, r32217, MPFR_RNDN);
        if (mpfr_get_si(r32229, MPFR_RNDN)) { mpfr_set(r32232, r32223, MPFR_RNDN); } else { mpfr_set(r32232, r32231, MPFR_RNDN); };
        if (mpfr_get_si(r32225, MPFR_RNDN)) { mpfr_set(r32233, r32227, MPFR_RNDN); } else { mpfr_set(r32233, r32232, MPFR_RNDN); };
        if (mpfr_get_si(r32219, MPFR_RNDN)) { mpfr_set(r32234, r32223, MPFR_RNDN); } else { mpfr_set(r32234, r32233, MPFR_RNDN); };
        return mpfr_get_d(r32234, MPFR_RNDN);
}

