#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, B";

double f_if(float x, float y, float z, float t) {
        float r50077 = x;
        float r50078 = y;
        float r50079 = z;
        float r50080 = r50078 / r50079;
        float r50081 = t;
        float r50082 = r50080 * r50081;
        float r50083 = r50082 / r50081;
        float r50084 = r50077 * r50083;
        return r50084;
}

double f_id(double x, double y, double z, double t) {
        double r50085 = x;
        double r50086 = y;
        double r50087 = z;
        double r50088 = r50086 / r50087;
        double r50089 = t;
        double r50090 = r50088 * r50089;
        double r50091 = r50090 / r50089;
        double r50092 = r50085 * r50091;
        return r50092;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r50093 = y;
        float r50094 = -5.316705416450865e+21;
        bool r50095 = r50093 <= r50094;
        float r50096 = x;
        float r50097 = r50093 * r50096;
        float r50098 = z;
        float r50099 = r50097 / r50098;
        float r50100 = 1.3651182777344864e-118;
        bool r50101 = r50093 <= r50100;
        float r50102 = r50093 / r50098;
        float r50103 = r50096 * r50102;
        float r50104 = 1.6409211128171354e+250;
        bool r50105 = r50093 <= r50104;
        float r50106 = r50096 / r50098;
        float r50107 = r50106 * r50093;
        float r50108 = r50105 ? r50099 : r50107;
        float r50109 = r50101 ? r50103 : r50108;
        float r50110 = r50095 ? r50099 : r50109;
        return r50110;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r50111 = y;
        double r50112 = -5.316705416450865e+21;
        bool r50113 = r50111 <= r50112;
        double r50114 = x;
        double r50115 = r50111 * r50114;
        double r50116 = z;
        double r50117 = r50115 / r50116;
        double r50118 = 1.3651182777344864e-118;
        bool r50119 = r50111 <= r50118;
        double r50120 = r50111 / r50116;
        double r50121 = r50114 * r50120;
        double r50122 = 1.6409211128171354e+250;
        bool r50123 = r50111 <= r50122;
        double r50124 = r50114 / r50116;
        double r50125 = r50124 * r50111;
        double r50126 = r50123 ? r50117 : r50125;
        double r50127 = r50119 ? r50121 : r50126;
        double r50128 = r50113 ? r50117 : r50127;
        return r50128;
}

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 r50129, r50130, r50131, r50132, r50133, r50134, r50135, r50136;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50129);
        mpfr_init(r50130);
        mpfr_init(r50131);
        mpfr_init(r50132);
        mpfr_init(r50133);
        mpfr_init(r50134);
        mpfr_init(r50135);
        mpfr_init(r50136);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r50129, x, MPFR_RNDN);
        mpfr_set_d(r50130, y, MPFR_RNDN);
        mpfr_set_d(r50131, z, MPFR_RNDN);
        mpfr_div(r50132, r50130, r50131, MPFR_RNDN);
        mpfr_set_d(r50133, t, MPFR_RNDN);
        mpfr_mul(r50134, r50132, r50133, MPFR_RNDN);
        mpfr_div(r50135, r50134, r50133, MPFR_RNDN);
        mpfr_mul(r50136, r50129, r50135, MPFR_RNDN);
        return mpfr_get_d(r50136, MPFR_RNDN);
}

static mpfr_t r50137, r50138, r50139, r50140, r50141, r50142, r50143, r50144, r50145, r50146, r50147, r50148, r50149, r50150, r50151, r50152, r50153, r50154;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50137);
        mpfr_init_set_str(r50138, "-5.316705416450865e+21", 10, MPFR_RNDN);
        mpfr_init(r50139);
        mpfr_init(r50140);
        mpfr_init(r50141);
        mpfr_init(r50142);
        mpfr_init(r50143);
        mpfr_init_set_str(r50144, "1.3651182777344864e-118", 10, MPFR_RNDN);
        mpfr_init(r50145);
        mpfr_init(r50146);
        mpfr_init(r50147);
        mpfr_init_set_str(r50148, "1.6409211128171354e+250", 10, MPFR_RNDN);
        mpfr_init(r50149);
        mpfr_init(r50150);
        mpfr_init(r50151);
        mpfr_init(r50152);
        mpfr_init(r50153);
        mpfr_init(r50154);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r50137, y, MPFR_RNDN);
        ;
        mpfr_set_si(r50139, mpfr_cmp(r50137, r50138) <= 0, MPFR_RNDN);
        mpfr_set_d(r50140, x, MPFR_RNDN);
        mpfr_mul(r50141, r50137, r50140, MPFR_RNDN);
        mpfr_set_d(r50142, z, MPFR_RNDN);
        mpfr_div(r50143, r50141, r50142, MPFR_RNDN);
        ;
        mpfr_set_si(r50145, mpfr_cmp(r50137, r50144) <= 0, MPFR_RNDN);
        mpfr_div(r50146, r50137, r50142, MPFR_RNDN);
        mpfr_mul(r50147, r50140, r50146, MPFR_RNDN);
        ;
        mpfr_set_si(r50149, mpfr_cmp(r50137, r50148) <= 0, MPFR_RNDN);
        mpfr_div(r50150, r50140, r50142, MPFR_RNDN);
        mpfr_mul(r50151, r50150, r50137, MPFR_RNDN);
        if (mpfr_get_si(r50149, MPFR_RNDN)) { mpfr_set(r50152, r50143, MPFR_RNDN); } else { mpfr_set(r50152, r50151, MPFR_RNDN); };
        if (mpfr_get_si(r50145, MPFR_RNDN)) { mpfr_set(r50153, r50147, MPFR_RNDN); } else { mpfr_set(r50153, r50152, MPFR_RNDN); };
        if (mpfr_get_si(r50139, MPFR_RNDN)) { mpfr_set(r50154, r50143, MPFR_RNDN); } else { mpfr_set(r50154, r50153, MPFR_RNDN); };
        return mpfr_get_d(r50154, MPFR_RNDN);
}

static mpfr_t r50155, r50156, r50157, r50158, r50159, r50160, r50161, r50162, r50163, r50164, r50165, r50166, r50167, r50168, r50169, r50170, r50171, r50172;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50155);
        mpfr_init_set_str(r50156, "-5.316705416450865e+21", 10, MPFR_RNDN);
        mpfr_init(r50157);
        mpfr_init(r50158);
        mpfr_init(r50159);
        mpfr_init(r50160);
        mpfr_init(r50161);
        mpfr_init_set_str(r50162, "1.3651182777344864e-118", 10, MPFR_RNDN);
        mpfr_init(r50163);
        mpfr_init(r50164);
        mpfr_init(r50165);
        mpfr_init_set_str(r50166, "1.6409211128171354e+250", 10, MPFR_RNDN);
        mpfr_init(r50167);
        mpfr_init(r50168);
        mpfr_init(r50169);
        mpfr_init(r50170);
        mpfr_init(r50171);
        mpfr_init(r50172);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r50155, y, MPFR_RNDN);
        ;
        mpfr_set_si(r50157, mpfr_cmp(r50155, r50156) <= 0, MPFR_RNDN);
        mpfr_set_d(r50158, x, MPFR_RNDN);
        mpfr_mul(r50159, r50155, r50158, MPFR_RNDN);
        mpfr_set_d(r50160, z, MPFR_RNDN);
        mpfr_div(r50161, r50159, r50160, MPFR_RNDN);
        ;
        mpfr_set_si(r50163, mpfr_cmp(r50155, r50162) <= 0, MPFR_RNDN);
        mpfr_div(r50164, r50155, r50160, MPFR_RNDN);
        mpfr_mul(r50165, r50158, r50164, MPFR_RNDN);
        ;
        mpfr_set_si(r50167, mpfr_cmp(r50155, r50166) <= 0, MPFR_RNDN);
        mpfr_div(r50168, r50158, r50160, MPFR_RNDN);
        mpfr_mul(r50169, r50168, r50155, MPFR_RNDN);
        if (mpfr_get_si(r50167, MPFR_RNDN)) { mpfr_set(r50170, r50161, MPFR_RNDN); } else { mpfr_set(r50170, r50169, MPFR_RNDN); };
        if (mpfr_get_si(r50163, MPFR_RNDN)) { mpfr_set(r50171, r50165, MPFR_RNDN); } else { mpfr_set(r50171, r50170, MPFR_RNDN); };
        if (mpfr_get_si(r50157, MPFR_RNDN)) { mpfr_set(r50172, r50161, MPFR_RNDN); } else { mpfr_set(r50172, r50171, MPFR_RNDN); };
        return mpfr_get_d(r50172, MPFR_RNDN);
}

