#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 r50021 = x;
        float r50022 = y;
        float r50023 = z;
        float r50024 = r50022 / r50023;
        float r50025 = t;
        float r50026 = r50024 * r50025;
        float r50027 = r50026 / r50025;
        float r50028 = r50021 * r50027;
        return r50028;
}

double f_id(double x, double y, double z, double t) {
        double r50029 = x;
        double r50030 = y;
        double r50031 = z;
        double r50032 = r50030 / r50031;
        double r50033 = t;
        double r50034 = r50032 * r50033;
        double r50035 = r50034 / r50033;
        double r50036 = r50029 * r50035;
        return r50036;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r50037 = y;
        float r50038 = -7.542630138100415e+19;
        bool r50039 = r50037 <= r50038;
        float r50040 = x;
        float r50041 = r50037 * r50040;
        float r50042 = z;
        float r50043 = r50041 / r50042;
        float r50044 = 1.5601337082604852e-118;
        bool r50045 = r50037 <= r50044;
        float r50046 = r50037 / r50042;
        float r50047 = r50040 * r50046;
        float r50048 = 3.281842225634271e+250;
        bool r50049 = r50037 <= r50048;
        float r50050 = r50040 / r50042;
        float r50051 = r50050 * r50037;
        float r50052 = r50049 ? r50043 : r50051;
        float r50053 = r50045 ? r50047 : r50052;
        float r50054 = r50039 ? r50043 : r50053;
        return r50054;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r50055 = y;
        double r50056 = -7.542630138100415e+19;
        bool r50057 = r50055 <= r50056;
        double r50058 = x;
        double r50059 = r50055 * r50058;
        double r50060 = z;
        double r50061 = r50059 / r50060;
        double r50062 = 1.5601337082604852e-118;
        bool r50063 = r50055 <= r50062;
        double r50064 = r50055 / r50060;
        double r50065 = r50058 * r50064;
        double r50066 = 3.281842225634271e+250;
        bool r50067 = r50055 <= r50066;
        double r50068 = r50058 / r50060;
        double r50069 = r50068 * r50055;
        double r50070 = r50067 ? r50061 : r50069;
        double r50071 = r50063 ? r50065 : r50070;
        double r50072 = r50057 ? r50061 : r50071;
        return r50072;
}

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 r50073, r50074, r50075, r50076, r50077, r50078, r50079, r50080;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50073);
        mpfr_init(r50074);
        mpfr_init(r50075);
        mpfr_init(r50076);
        mpfr_init(r50077);
        mpfr_init(r50078);
        mpfr_init(r50079);
        mpfr_init(r50080);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r50073, x, MPFR_RNDN);
        mpfr_set_d(r50074, y, MPFR_RNDN);
        mpfr_set_d(r50075, z, MPFR_RNDN);
        mpfr_div(r50076, r50074, r50075, MPFR_RNDN);
        mpfr_set_d(r50077, t, MPFR_RNDN);
        mpfr_mul(r50078, r50076, r50077, MPFR_RNDN);
        mpfr_div(r50079, r50078, r50077, MPFR_RNDN);
        mpfr_mul(r50080, r50073, r50079, MPFR_RNDN);
        return mpfr_get_d(r50080, MPFR_RNDN);
}

static mpfr_t r50081, r50082, r50083, r50084, r50085, r50086, r50087, r50088, r50089, r50090, r50091, r50092, r50093, r50094, r50095, r50096, r50097, r50098;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50081);
        mpfr_init_set_str(r50082, "-7.542630138100415e+19", 10, MPFR_RNDN);
        mpfr_init(r50083);
        mpfr_init(r50084);
        mpfr_init(r50085);
        mpfr_init(r50086);
        mpfr_init(r50087);
        mpfr_init_set_str(r50088, "1.5601337082604852e-118", 10, MPFR_RNDN);
        mpfr_init(r50089);
        mpfr_init(r50090);
        mpfr_init(r50091);
        mpfr_init_set_str(r50092, "3.281842225634271e+250", 10, MPFR_RNDN);
        mpfr_init(r50093);
        mpfr_init(r50094);
        mpfr_init(r50095);
        mpfr_init(r50096);
        mpfr_init(r50097);
        mpfr_init(r50098);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r50081, y, MPFR_RNDN);
        ;
        mpfr_set_si(r50083, mpfr_cmp(r50081, r50082) <= 0, MPFR_RNDN);
        mpfr_set_d(r50084, x, MPFR_RNDN);
        mpfr_mul(r50085, r50081, r50084, MPFR_RNDN);
        mpfr_set_d(r50086, z, MPFR_RNDN);
        mpfr_div(r50087, r50085, r50086, MPFR_RNDN);
        ;
        mpfr_set_si(r50089, mpfr_cmp(r50081, r50088) <= 0, MPFR_RNDN);
        mpfr_div(r50090, r50081, r50086, MPFR_RNDN);
        mpfr_mul(r50091, r50084, r50090, MPFR_RNDN);
        ;
        mpfr_set_si(r50093, mpfr_cmp(r50081, r50092) <= 0, MPFR_RNDN);
        mpfr_div(r50094, r50084, r50086, MPFR_RNDN);
        mpfr_mul(r50095, r50094, r50081, MPFR_RNDN);
        if (mpfr_get_si(r50093, MPFR_RNDN)) { mpfr_set(r50096, r50087, MPFR_RNDN); } else { mpfr_set(r50096, r50095, MPFR_RNDN); };
        if (mpfr_get_si(r50089, MPFR_RNDN)) { mpfr_set(r50097, r50091, MPFR_RNDN); } else { mpfr_set(r50097, r50096, MPFR_RNDN); };
        if (mpfr_get_si(r50083, MPFR_RNDN)) { mpfr_set(r50098, r50087, MPFR_RNDN); } else { mpfr_set(r50098, r50097, MPFR_RNDN); };
        return mpfr_get_d(r50098, MPFR_RNDN);
}

static mpfr_t r50099, r50100, r50101, r50102, r50103, r50104, r50105, r50106, r50107, r50108, r50109, r50110, r50111, r50112, r50113, r50114, r50115, r50116;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50099);
        mpfr_init_set_str(r50100, "-7.542630138100415e+19", 10, MPFR_RNDN);
        mpfr_init(r50101);
        mpfr_init(r50102);
        mpfr_init(r50103);
        mpfr_init(r50104);
        mpfr_init(r50105);
        mpfr_init_set_str(r50106, "1.5601337082604852e-118", 10, MPFR_RNDN);
        mpfr_init(r50107);
        mpfr_init(r50108);
        mpfr_init(r50109);
        mpfr_init_set_str(r50110, "3.281842225634271e+250", 10, MPFR_RNDN);
        mpfr_init(r50111);
        mpfr_init(r50112);
        mpfr_init(r50113);
        mpfr_init(r50114);
        mpfr_init(r50115);
        mpfr_init(r50116);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r50099, y, MPFR_RNDN);
        ;
        mpfr_set_si(r50101, mpfr_cmp(r50099, r50100) <= 0, MPFR_RNDN);
        mpfr_set_d(r50102, x, MPFR_RNDN);
        mpfr_mul(r50103, r50099, r50102, MPFR_RNDN);
        mpfr_set_d(r50104, z, MPFR_RNDN);
        mpfr_div(r50105, r50103, r50104, MPFR_RNDN);
        ;
        mpfr_set_si(r50107, mpfr_cmp(r50099, r50106) <= 0, MPFR_RNDN);
        mpfr_div(r50108, r50099, r50104, MPFR_RNDN);
        mpfr_mul(r50109, r50102, r50108, MPFR_RNDN);
        ;
        mpfr_set_si(r50111, mpfr_cmp(r50099, r50110) <= 0, MPFR_RNDN);
        mpfr_div(r50112, r50102, r50104, MPFR_RNDN);
        mpfr_mul(r50113, r50112, r50099, MPFR_RNDN);
        if (mpfr_get_si(r50111, MPFR_RNDN)) { mpfr_set(r50114, r50105, MPFR_RNDN); } else { mpfr_set(r50114, r50113, MPFR_RNDN); };
        if (mpfr_get_si(r50107, MPFR_RNDN)) { mpfr_set(r50115, r50109, MPFR_RNDN); } else { mpfr_set(r50115, r50114, MPFR_RNDN); };
        if (mpfr_get_si(r50101, MPFR_RNDN)) { mpfr_set(r50116, r50105, MPFR_RNDN); } else { mpfr_set(r50116, r50115, MPFR_RNDN); };
        return mpfr_get_d(r50116, MPFR_RNDN);
}

