#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 r32099 = x;
        float r32100 = y;
        float r32101 = z;
        float r32102 = r32100 / r32101;
        float r32103 = t;
        float r32104 = r32102 * r32103;
        float r32105 = r32104 / r32103;
        float r32106 = r32099 * r32105;
        return r32106;
}

double f_id(double x, double y, double z, double t) {
        double r32107 = x;
        double r32108 = y;
        double r32109 = z;
        double r32110 = r32108 / r32109;
        double r32111 = t;
        double r32112 = r32110 * r32111;
        double r32113 = r32112 / r32111;
        double r32114 = r32107 * r32113;
        return r32114;
}


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

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

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 r32151, r32152, r32153, r32154, r32155, r32156, r32157, r32158;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r32151);
        mpfr_init(r32152);
        mpfr_init(r32153);
        mpfr_init(r32154);
        mpfr_init(r32155);
        mpfr_init(r32156);
        mpfr_init(r32157);
        mpfr_init(r32158);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r32151, x, MPFR_RNDN);
        mpfr_set_d(r32152, y, MPFR_RNDN);
        mpfr_set_d(r32153, z, MPFR_RNDN);
        mpfr_div(r32154, r32152, r32153, MPFR_RNDN);
        mpfr_set_d(r32155, t, MPFR_RNDN);
        mpfr_mul(r32156, r32154, r32155, MPFR_RNDN);
        mpfr_div(r32157, r32156, r32155, MPFR_RNDN);
        mpfr_mul(r32158, r32151, r32157, MPFR_RNDN);
        return mpfr_get_d(r32158, MPFR_RNDN);
}

static mpfr_t r32159, r32160, r32161, r32162, r32163, r32164, r32165, r32166, r32167, r32168, r32169, r32170, r32171, r32172, r32173, r32174, r32175, r32176;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32159);
        mpfr_init_set_str(r32160, "-5.316705416450865e+21", 10, MPFR_RNDN);
        mpfr_init(r32161);
        mpfr_init(r32162);
        mpfr_init(r32163);
        mpfr_init(r32164);
        mpfr_init(r32165);
        mpfr_init_set_str(r32166, "1.3651182777344864e-118", 10, MPFR_RNDN);
        mpfr_init(r32167);
        mpfr_init(r32168);
        mpfr_init(r32169);
        mpfr_init_set_str(r32170, "1.6409211128171354e+250", 10, MPFR_RNDN);
        mpfr_init(r32171);
        mpfr_init(r32172);
        mpfr_init(r32173);
        mpfr_init(r32174);
        mpfr_init(r32175);
        mpfr_init(r32176);
}

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

static mpfr_t r32177, r32178, r32179, r32180, r32181, r32182, r32183, r32184, r32185, r32186, r32187, r32188, r32189, r32190, r32191, r32192, r32193, r32194;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32177);
        mpfr_init_set_str(r32178, "-5.316705416450865e+21", 10, MPFR_RNDN);
        mpfr_init(r32179);
        mpfr_init(r32180);
        mpfr_init(r32181);
        mpfr_init(r32182);
        mpfr_init(r32183);
        mpfr_init_set_str(r32184, "1.3651182777344864e-118", 10, MPFR_RNDN);
        mpfr_init(r32185);
        mpfr_init(r32186);
        mpfr_init(r32187);
        mpfr_init_set_str(r32188, "1.6409211128171354e+250", 10, MPFR_RNDN);
        mpfr_init(r32189);
        mpfr_init(r32190);
        mpfr_init(r32191);
        mpfr_init(r32192);
        mpfr_init(r32193);
        mpfr_init(r32194);
}

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

