#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 r50284 = x;
        float r50285 = y;
        float r50286 = z;
        float r50287 = r50285 / r50286;
        float r50288 = t;
        float r50289 = r50287 * r50288;
        float r50290 = r50289 / r50288;
        float r50291 = r50284 * r50290;
        return r50291;
}

double f_id(double x, double y, double z, double t) {
        double r50292 = x;
        double r50293 = y;
        double r50294 = z;
        double r50295 = r50293 / r50294;
        double r50296 = t;
        double r50297 = r50295 * r50296;
        double r50298 = r50297 / r50296;
        double r50299 = r50292 * r50298;
        return r50299;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r50300 = y;
        float r50301 = -5.316705416450865e+21;
        bool r50302 = r50300 <= r50301;
        float r50303 = x;
        float r50304 = r50300 * r50303;
        float r50305 = z;
        float r50306 = r50304 / r50305;
        float r50307 = 1.3651182777344864e-118;
        bool r50308 = r50300 <= r50307;
        float r50309 = r50300 / r50305;
        float r50310 = r50303 * r50309;
        float r50311 = 1.6409211128171354e+250;
        bool r50312 = r50300 <= r50311;
        float r50313 = r50303 / r50305;
        float r50314 = r50313 * r50300;
        float r50315 = r50312 ? r50306 : r50314;
        float r50316 = r50308 ? r50310 : r50315;
        float r50317 = r50302 ? r50306 : r50316;
        return r50317;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r50318 = y;
        double r50319 = -5.316705416450865e+21;
        bool r50320 = r50318 <= r50319;
        double r50321 = x;
        double r50322 = r50318 * r50321;
        double r50323 = z;
        double r50324 = r50322 / r50323;
        double r50325 = 1.3651182777344864e-118;
        bool r50326 = r50318 <= r50325;
        double r50327 = r50318 / r50323;
        double r50328 = r50321 * r50327;
        double r50329 = 1.6409211128171354e+250;
        bool r50330 = r50318 <= r50329;
        double r50331 = r50321 / r50323;
        double r50332 = r50331 * r50318;
        double r50333 = r50330 ? r50324 : r50332;
        double r50334 = r50326 ? r50328 : r50333;
        double r50335 = r50320 ? r50324 : r50334;
        return r50335;
}

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 r50336, r50337, r50338, r50339, r50340, r50341, r50342, r50343;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50336);
        mpfr_init(r50337);
        mpfr_init(r50338);
        mpfr_init(r50339);
        mpfr_init(r50340);
        mpfr_init(r50341);
        mpfr_init(r50342);
        mpfr_init(r50343);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r50336, x, MPFR_RNDN);
        mpfr_set_d(r50337, y, MPFR_RNDN);
        mpfr_set_d(r50338, z, MPFR_RNDN);
        mpfr_div(r50339, r50337, r50338, MPFR_RNDN);
        mpfr_set_d(r50340, t, MPFR_RNDN);
        mpfr_mul(r50341, r50339, r50340, MPFR_RNDN);
        mpfr_div(r50342, r50341, r50340, MPFR_RNDN);
        mpfr_mul(r50343, r50336, r50342, MPFR_RNDN);
        return mpfr_get_d(r50343, MPFR_RNDN);
}

static mpfr_t r50344, r50345, r50346, r50347, r50348, r50349, r50350, r50351, r50352, r50353, r50354, r50355, r50356, r50357, r50358, r50359, r50360, r50361;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50344);
        mpfr_init_set_str(r50345, "-5.316705416450865e+21", 10, MPFR_RNDN);
        mpfr_init(r50346);
        mpfr_init(r50347);
        mpfr_init(r50348);
        mpfr_init(r50349);
        mpfr_init(r50350);
        mpfr_init_set_str(r50351, "1.3651182777344864e-118", 10, MPFR_RNDN);
        mpfr_init(r50352);
        mpfr_init(r50353);
        mpfr_init(r50354);
        mpfr_init_set_str(r50355, "1.6409211128171354e+250", 10, MPFR_RNDN);
        mpfr_init(r50356);
        mpfr_init(r50357);
        mpfr_init(r50358);
        mpfr_init(r50359);
        mpfr_init(r50360);
        mpfr_init(r50361);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r50344, y, MPFR_RNDN);
        ;
        mpfr_set_si(r50346, mpfr_cmp(r50344, r50345) <= 0, MPFR_RNDN);
        mpfr_set_d(r50347, x, MPFR_RNDN);
        mpfr_mul(r50348, r50344, r50347, MPFR_RNDN);
        mpfr_set_d(r50349, z, MPFR_RNDN);
        mpfr_div(r50350, r50348, r50349, MPFR_RNDN);
        ;
        mpfr_set_si(r50352, mpfr_cmp(r50344, r50351) <= 0, MPFR_RNDN);
        mpfr_div(r50353, r50344, r50349, MPFR_RNDN);
        mpfr_mul(r50354, r50347, r50353, MPFR_RNDN);
        ;
        mpfr_set_si(r50356, mpfr_cmp(r50344, r50355) <= 0, MPFR_RNDN);
        mpfr_div(r50357, r50347, r50349, MPFR_RNDN);
        mpfr_mul(r50358, r50357, r50344, MPFR_RNDN);
        if (mpfr_get_si(r50356, MPFR_RNDN)) { mpfr_set(r50359, r50350, MPFR_RNDN); } else { mpfr_set(r50359, r50358, MPFR_RNDN); };
        if (mpfr_get_si(r50352, MPFR_RNDN)) { mpfr_set(r50360, r50354, MPFR_RNDN); } else { mpfr_set(r50360, r50359, MPFR_RNDN); };
        if (mpfr_get_si(r50346, MPFR_RNDN)) { mpfr_set(r50361, r50350, MPFR_RNDN); } else { mpfr_set(r50361, r50360, MPFR_RNDN); };
        return mpfr_get_d(r50361, MPFR_RNDN);
}

static mpfr_t r50362, r50363, r50364, r50365, r50366, r50367, r50368, r50369, r50370, r50371, r50372, r50373, r50374, r50375, r50376, r50377, r50378, r50379;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50362);
        mpfr_init_set_str(r50363, "-5.316705416450865e+21", 10, MPFR_RNDN);
        mpfr_init(r50364);
        mpfr_init(r50365);
        mpfr_init(r50366);
        mpfr_init(r50367);
        mpfr_init(r50368);
        mpfr_init_set_str(r50369, "1.3651182777344864e-118", 10, MPFR_RNDN);
        mpfr_init(r50370);
        mpfr_init(r50371);
        mpfr_init(r50372);
        mpfr_init_set_str(r50373, "1.6409211128171354e+250", 10, MPFR_RNDN);
        mpfr_init(r50374);
        mpfr_init(r50375);
        mpfr_init(r50376);
        mpfr_init(r50377);
        mpfr_init(r50378);
        mpfr_init(r50379);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r50362, y, MPFR_RNDN);
        ;
        mpfr_set_si(r50364, mpfr_cmp(r50362, r50363) <= 0, MPFR_RNDN);
        mpfr_set_d(r50365, x, MPFR_RNDN);
        mpfr_mul(r50366, r50362, r50365, MPFR_RNDN);
        mpfr_set_d(r50367, z, MPFR_RNDN);
        mpfr_div(r50368, r50366, r50367, MPFR_RNDN);
        ;
        mpfr_set_si(r50370, mpfr_cmp(r50362, r50369) <= 0, MPFR_RNDN);
        mpfr_div(r50371, r50362, r50367, MPFR_RNDN);
        mpfr_mul(r50372, r50365, r50371, MPFR_RNDN);
        ;
        mpfr_set_si(r50374, mpfr_cmp(r50362, r50373) <= 0, MPFR_RNDN);
        mpfr_div(r50375, r50365, r50367, MPFR_RNDN);
        mpfr_mul(r50376, r50375, r50362, MPFR_RNDN);
        if (mpfr_get_si(r50374, MPFR_RNDN)) { mpfr_set(r50377, r50368, MPFR_RNDN); } else { mpfr_set(r50377, r50376, MPFR_RNDN); };
        if (mpfr_get_si(r50370, MPFR_RNDN)) { mpfr_set(r50378, r50372, MPFR_RNDN); } else { mpfr_set(r50378, r50377, MPFR_RNDN); };
        if (mpfr_get_si(r50364, MPFR_RNDN)) { mpfr_set(r50379, r50368, MPFR_RNDN); } else { mpfr_set(r50379, r50378, MPFR_RNDN); };
        return mpfr_get_d(r50379, MPFR_RNDN);
}

