#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 r32045 = x;
        float r32046 = y;
        float r32047 = z;
        float r32048 = r32046 / r32047;
        float r32049 = t;
        float r32050 = r32048 * r32049;
        float r32051 = r32050 / r32049;
        float r32052 = r32045 * r32051;
        return r32052;
}

double f_id(double x, double y, double z, double t) {
        double r32053 = x;
        double r32054 = y;
        double r32055 = z;
        double r32056 = r32054 / r32055;
        double r32057 = t;
        double r32058 = r32056 * r32057;
        double r32059 = r32058 / r32057;
        double r32060 = r32053 * r32059;
        return r32060;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r32061 = y;
        float r32062 = -2.58053419571785e+22;
        bool r32063 = r32061 <= r32062;
        float r32064 = x;
        float r32065 = r32061 * r32064;
        float r32066 = z;
        float r32067 = r32065 / r32066;
        float r32068 = 9.019566302352389e-119;
        bool r32069 = r32061 <= r32068;
        float r32070 = r32061 / r32066;
        float r32071 = r32064 * r32070;
        float r32072 = 5.127878477553548e+249;
        bool r32073 = r32061 <= r32072;
        float r32074 = r32064 / r32066;
        float r32075 = r32074 * r32061;
        float r32076 = r32073 ? r32067 : r32075;
        float r32077 = r32069 ? r32071 : r32076;
        float r32078 = r32063 ? r32067 : r32077;
        return r32078;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r32079 = y;
        double r32080 = -2.58053419571785e+22;
        bool r32081 = r32079 <= r32080;
        double r32082 = x;
        double r32083 = r32079 * r32082;
        double r32084 = z;
        double r32085 = r32083 / r32084;
        double r32086 = 9.019566302352389e-119;
        bool r32087 = r32079 <= r32086;
        double r32088 = r32079 / r32084;
        double r32089 = r32082 * r32088;
        double r32090 = 5.127878477553548e+249;
        bool r32091 = r32079 <= r32090;
        double r32092 = r32082 / r32084;
        double r32093 = r32092 * r32079;
        double r32094 = r32091 ? r32085 : r32093;
        double r32095 = r32087 ? r32089 : r32094;
        double r32096 = r32081 ? r32085 : r32095;
        return r32096;
}

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 r32097, r32098, r32099, r32100, r32101, r32102, r32103, r32104;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r32097);
        mpfr_init(r32098);
        mpfr_init(r32099);
        mpfr_init(r32100);
        mpfr_init(r32101);
        mpfr_init(r32102);
        mpfr_init(r32103);
        mpfr_init(r32104);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r32097, x, MPFR_RNDN);
        mpfr_set_d(r32098, y, MPFR_RNDN);
        mpfr_set_d(r32099, z, MPFR_RNDN);
        mpfr_div(r32100, r32098, r32099, MPFR_RNDN);
        mpfr_set_d(r32101, t, MPFR_RNDN);
        mpfr_mul(r32102, r32100, r32101, MPFR_RNDN);
        mpfr_div(r32103, r32102, r32101, MPFR_RNDN);
        mpfr_mul(r32104, r32097, r32103, MPFR_RNDN);
        return mpfr_get_d(r32104, MPFR_RNDN);
}

static mpfr_t r32105, r32106, r32107, r32108, r32109, r32110, r32111, r32112, r32113, r32114, r32115, r32116, r32117, r32118, r32119, r32120, r32121, r32122;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32105);
        mpfr_init_set_str(r32106, "-2.58053419571785e+22", 10, MPFR_RNDN);
        mpfr_init(r32107);
        mpfr_init(r32108);
        mpfr_init(r32109);
        mpfr_init(r32110);
        mpfr_init(r32111);
        mpfr_init_set_str(r32112, "9.019566302352389e-119", 10, MPFR_RNDN);
        mpfr_init(r32113);
        mpfr_init(r32114);
        mpfr_init(r32115);
        mpfr_init_set_str(r32116, "5.127878477553548e+249", 10, MPFR_RNDN);
        mpfr_init(r32117);
        mpfr_init(r32118);
        mpfr_init(r32119);
        mpfr_init(r32120);
        mpfr_init(r32121);
        mpfr_init(r32122);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r32105, y, MPFR_RNDN);
        ;
        mpfr_set_si(r32107, mpfr_cmp(r32105, r32106) <= 0, MPFR_RNDN);
        mpfr_set_d(r32108, x, MPFR_RNDN);
        mpfr_mul(r32109, r32105, r32108, MPFR_RNDN);
        mpfr_set_d(r32110, z, MPFR_RNDN);
        mpfr_div(r32111, r32109, r32110, MPFR_RNDN);
        ;
        mpfr_set_si(r32113, mpfr_cmp(r32105, r32112) <= 0, MPFR_RNDN);
        mpfr_div(r32114, r32105, r32110, MPFR_RNDN);
        mpfr_mul(r32115, r32108, r32114, MPFR_RNDN);
        ;
        mpfr_set_si(r32117, mpfr_cmp(r32105, r32116) <= 0, MPFR_RNDN);
        mpfr_div(r32118, r32108, r32110, MPFR_RNDN);
        mpfr_mul(r32119, r32118, r32105, MPFR_RNDN);
        if (mpfr_get_si(r32117, MPFR_RNDN)) { mpfr_set(r32120, r32111, MPFR_RNDN); } else { mpfr_set(r32120, r32119, MPFR_RNDN); };
        if (mpfr_get_si(r32113, MPFR_RNDN)) { mpfr_set(r32121, r32115, MPFR_RNDN); } else { mpfr_set(r32121, r32120, MPFR_RNDN); };
        if (mpfr_get_si(r32107, MPFR_RNDN)) { mpfr_set(r32122, r32111, MPFR_RNDN); } else { mpfr_set(r32122, r32121, MPFR_RNDN); };
        return mpfr_get_d(r32122, MPFR_RNDN);
}

static mpfr_t r32123, r32124, r32125, r32126, r32127, r32128, r32129, r32130, r32131, r32132, r32133, r32134, r32135, r32136, r32137, r32138, r32139, r32140;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32123);
        mpfr_init_set_str(r32124, "-2.58053419571785e+22", 10, MPFR_RNDN);
        mpfr_init(r32125);
        mpfr_init(r32126);
        mpfr_init(r32127);
        mpfr_init(r32128);
        mpfr_init(r32129);
        mpfr_init_set_str(r32130, "9.019566302352389e-119", 10, MPFR_RNDN);
        mpfr_init(r32131);
        mpfr_init(r32132);
        mpfr_init(r32133);
        mpfr_init_set_str(r32134, "5.127878477553548e+249", 10, MPFR_RNDN);
        mpfr_init(r32135);
        mpfr_init(r32136);
        mpfr_init(r32137);
        mpfr_init(r32138);
        mpfr_init(r32139);
        mpfr_init(r32140);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r32123, y, MPFR_RNDN);
        ;
        mpfr_set_si(r32125, mpfr_cmp(r32123, r32124) <= 0, MPFR_RNDN);
        mpfr_set_d(r32126, x, MPFR_RNDN);
        mpfr_mul(r32127, r32123, r32126, MPFR_RNDN);
        mpfr_set_d(r32128, z, MPFR_RNDN);
        mpfr_div(r32129, r32127, r32128, MPFR_RNDN);
        ;
        mpfr_set_si(r32131, mpfr_cmp(r32123, r32130) <= 0, MPFR_RNDN);
        mpfr_div(r32132, r32123, r32128, MPFR_RNDN);
        mpfr_mul(r32133, r32126, r32132, MPFR_RNDN);
        ;
        mpfr_set_si(r32135, mpfr_cmp(r32123, r32134) <= 0, MPFR_RNDN);
        mpfr_div(r32136, r32126, r32128, MPFR_RNDN);
        mpfr_mul(r32137, r32136, r32123, MPFR_RNDN);
        if (mpfr_get_si(r32135, MPFR_RNDN)) { mpfr_set(r32138, r32129, MPFR_RNDN); } else { mpfr_set(r32138, r32137, MPFR_RNDN); };
        if (mpfr_get_si(r32131, MPFR_RNDN)) { mpfr_set(r32139, r32133, MPFR_RNDN); } else { mpfr_set(r32139, r32138, MPFR_RNDN); };
        if (mpfr_get_si(r32125, MPFR_RNDN)) { mpfr_set(r32140, r32129, MPFR_RNDN); } else { mpfr_set(r32140, r32139, MPFR_RNDN); };
        return mpfr_get_d(r32140, MPFR_RNDN);
}

