#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 r32104 = x;
        float r32105 = y;
        float r32106 = z;
        float r32107 = r32105 / r32106;
        float r32108 = t;
        float r32109 = r32107 * r32108;
        float r32110 = r32109 / r32108;
        float r32111 = r32104 * r32110;
        return r32111;
}

double f_id(double x, double y, double z, double t) {
        double r32112 = x;
        double r32113 = y;
        double r32114 = z;
        double r32115 = r32113 / r32114;
        double r32116 = t;
        double r32117 = r32115 * r32116;
        double r32118 = r32117 / r32116;
        double r32119 = r32112 * r32118;
        return r32119;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r32120 = y;
        float r32121 = -5.316705416450865e+21;
        bool r32122 = r32120 <= r32121;
        float r32123 = x;
        float r32124 = r32120 * r32123;
        float r32125 = z;
        float r32126 = r32124 / r32125;
        float r32127 = 1.3651182777344864e-118;
        bool r32128 = r32120 <= r32127;
        float r32129 = r32120 / r32125;
        float r32130 = r32123 * r32129;
        float r32131 = 1.6409211128171354e+250;
        bool r32132 = r32120 <= r32131;
        float r32133 = r32123 / r32125;
        float r32134 = r32133 * r32120;
        float r32135 = r32132 ? r32126 : r32134;
        float r32136 = r32128 ? r32130 : r32135;
        float r32137 = r32122 ? r32126 : r32136;
        return r32137;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r32138 = y;
        double r32139 = -5.316705416450865e+21;
        bool r32140 = r32138 <= r32139;
        double r32141 = x;
        double r32142 = r32138 * r32141;
        double r32143 = z;
        double r32144 = r32142 / r32143;
        double r32145 = 1.3651182777344864e-118;
        bool r32146 = r32138 <= r32145;
        double r32147 = r32138 / r32143;
        double r32148 = r32141 * r32147;
        double r32149 = 1.6409211128171354e+250;
        bool r32150 = r32138 <= r32149;
        double r32151 = r32141 / r32143;
        double r32152 = r32151 * r32138;
        double r32153 = r32150 ? r32144 : r32152;
        double r32154 = r32146 ? r32148 : r32153;
        double r32155 = r32140 ? r32144 : r32154;
        return r32155;
}

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 r32156, r32157, r32158, r32159, r32160, r32161, r32162, r32163;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r32156);
        mpfr_init(r32157);
        mpfr_init(r32158);
        mpfr_init(r32159);
        mpfr_init(r32160);
        mpfr_init(r32161);
        mpfr_init(r32162);
        mpfr_init(r32163);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r32156, x, MPFR_RNDN);
        mpfr_set_d(r32157, y, MPFR_RNDN);
        mpfr_set_d(r32158, z, MPFR_RNDN);
        mpfr_div(r32159, r32157, r32158, MPFR_RNDN);
        mpfr_set_d(r32160, t, MPFR_RNDN);
        mpfr_mul(r32161, r32159, r32160, MPFR_RNDN);
        mpfr_div(r32162, r32161, r32160, MPFR_RNDN);
        mpfr_mul(r32163, r32156, r32162, MPFR_RNDN);
        return mpfr_get_d(r32163, MPFR_RNDN);
}

static mpfr_t r32164, r32165, r32166, r32167, r32168, r32169, r32170, r32171, r32172, r32173, r32174, r32175, r32176, r32177, r32178, r32179, r32180, r32181;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32164);
        mpfr_init_set_str(r32165, "-5.316705416450865e+21", 10, MPFR_RNDN);
        mpfr_init(r32166);
        mpfr_init(r32167);
        mpfr_init(r32168);
        mpfr_init(r32169);
        mpfr_init(r32170);
        mpfr_init_set_str(r32171, "1.3651182777344864e-118", 10, MPFR_RNDN);
        mpfr_init(r32172);
        mpfr_init(r32173);
        mpfr_init(r32174);
        mpfr_init_set_str(r32175, "1.6409211128171354e+250", 10, MPFR_RNDN);
        mpfr_init(r32176);
        mpfr_init(r32177);
        mpfr_init(r32178);
        mpfr_init(r32179);
        mpfr_init(r32180);
        mpfr_init(r32181);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r32164, y, MPFR_RNDN);
        ;
        mpfr_set_si(r32166, mpfr_cmp(r32164, r32165) <= 0, MPFR_RNDN);
        mpfr_set_d(r32167, x, MPFR_RNDN);
        mpfr_mul(r32168, r32164, r32167, MPFR_RNDN);
        mpfr_set_d(r32169, z, MPFR_RNDN);
        mpfr_div(r32170, r32168, r32169, MPFR_RNDN);
        ;
        mpfr_set_si(r32172, mpfr_cmp(r32164, r32171) <= 0, MPFR_RNDN);
        mpfr_div(r32173, r32164, r32169, MPFR_RNDN);
        mpfr_mul(r32174, r32167, r32173, MPFR_RNDN);
        ;
        mpfr_set_si(r32176, mpfr_cmp(r32164, r32175) <= 0, MPFR_RNDN);
        mpfr_div(r32177, r32167, r32169, MPFR_RNDN);
        mpfr_mul(r32178, r32177, r32164, MPFR_RNDN);
        if (mpfr_get_si(r32176, MPFR_RNDN)) { mpfr_set(r32179, r32170, MPFR_RNDN); } else { mpfr_set(r32179, r32178, MPFR_RNDN); };
        if (mpfr_get_si(r32172, MPFR_RNDN)) { mpfr_set(r32180, r32174, MPFR_RNDN); } else { mpfr_set(r32180, r32179, MPFR_RNDN); };
        if (mpfr_get_si(r32166, MPFR_RNDN)) { mpfr_set(r32181, r32170, MPFR_RNDN); } else { mpfr_set(r32181, r32180, MPFR_RNDN); };
        return mpfr_get_d(r32181, MPFR_RNDN);
}

static mpfr_t r32182, r32183, r32184, r32185, r32186, r32187, r32188, r32189, r32190, r32191, r32192, r32193, r32194, r32195, r32196, r32197, r32198, r32199;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32182);
        mpfr_init_set_str(r32183, "-5.316705416450865e+21", 10, MPFR_RNDN);
        mpfr_init(r32184);
        mpfr_init(r32185);
        mpfr_init(r32186);
        mpfr_init(r32187);
        mpfr_init(r32188);
        mpfr_init_set_str(r32189, "1.3651182777344864e-118", 10, MPFR_RNDN);
        mpfr_init(r32190);
        mpfr_init(r32191);
        mpfr_init(r32192);
        mpfr_init_set_str(r32193, "1.6409211128171354e+250", 10, MPFR_RNDN);
        mpfr_init(r32194);
        mpfr_init(r32195);
        mpfr_init(r32196);
        mpfr_init(r32197);
        mpfr_init(r32198);
        mpfr_init(r32199);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r32182, y, MPFR_RNDN);
        ;
        mpfr_set_si(r32184, mpfr_cmp(r32182, r32183) <= 0, MPFR_RNDN);
        mpfr_set_d(r32185, x, MPFR_RNDN);
        mpfr_mul(r32186, r32182, r32185, MPFR_RNDN);
        mpfr_set_d(r32187, z, MPFR_RNDN);
        mpfr_div(r32188, r32186, r32187, MPFR_RNDN);
        ;
        mpfr_set_si(r32190, mpfr_cmp(r32182, r32189) <= 0, MPFR_RNDN);
        mpfr_div(r32191, r32182, r32187, MPFR_RNDN);
        mpfr_mul(r32192, r32185, r32191, MPFR_RNDN);
        ;
        mpfr_set_si(r32194, mpfr_cmp(r32182, r32193) <= 0, MPFR_RNDN);
        mpfr_div(r32195, r32185, r32187, MPFR_RNDN);
        mpfr_mul(r32196, r32195, r32182, MPFR_RNDN);
        if (mpfr_get_si(r32194, MPFR_RNDN)) { mpfr_set(r32197, r32188, MPFR_RNDN); } else { mpfr_set(r32197, r32196, MPFR_RNDN); };
        if (mpfr_get_si(r32190, MPFR_RNDN)) { mpfr_set(r32198, r32192, MPFR_RNDN); } else { mpfr_set(r32198, r32197, MPFR_RNDN); };
        if (mpfr_get_si(r32184, MPFR_RNDN)) { mpfr_set(r32199, r32188, MPFR_RNDN); } else { mpfr_set(r32199, r32198, MPFR_RNDN); };
        return mpfr_get_d(r32199, MPFR_RNDN);
}

