#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Graphics.Rasterific.CubicBezier:cachedBezierAt from Rasterific-0.6.1";

double f_if(float x, float y, float z, float t, float a, float b) {
        float r48494 = x;
        float r48495 = y;
        float r48496 = z;
        float r48497 = r48495 * r48496;
        float r48498 = r48494 + r48497;
        float r48499 = t;
        float r48500 = a;
        float r48501 = r48499 * r48500;
        float r48502 = r48498 + r48501;
        float r48503 = r48500 * r48496;
        float r48504 = b;
        float r48505 = r48503 * r48504;
        float r48506 = r48502 + r48505;
        return r48506;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r48507 = x;
        double r48508 = y;
        double r48509 = z;
        double r48510 = r48508 * r48509;
        double r48511 = r48507 + r48510;
        double r48512 = t;
        double r48513 = a;
        double r48514 = r48512 * r48513;
        double r48515 = r48511 + r48514;
        double r48516 = r48513 * r48509;
        double r48517 = b;
        double r48518 = r48516 * r48517;
        double r48519 = r48515 + r48518;
        return r48519;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r48520 = z;
        float r48521 = -1.7570734968756763e+120f;
        bool r48522 = r48520 <= r48521;
        float r48523 = y;
        float r48524 = r48520 * r48523;
        float r48525 = b;
        float r48526 = a;
        float r48527 = r48525 * r48526;
        float r48528 = r48520 * r48527;
        float r48529 = t;
        float r48530 = r48526 * r48529;
        float r48531 = r48528 + r48530;
        float r48532 = r48524 + r48531;
        float r48533 = x;
        float r48534 = r48524 + r48533;
        float r48535 = r48525 * r48520;
        float r48536 = r48535 + r48529;
        float r48537 = r48536 * r48526;
        float r48538 = r48534 + r48537;
        float r48539 = r48522 ? r48532 : r48538;
        return r48539;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r48540 = z;
        double r48541 = -1.7570734968756763e+120;
        bool r48542 = r48540 <= r48541;
        double r48543 = y;
        double r48544 = r48540 * r48543;
        double r48545 = b;
        double r48546 = a;
        double r48547 = r48545 * r48546;
        double r48548 = r48540 * r48547;
        double r48549 = t;
        double r48550 = r48546 * r48549;
        double r48551 = r48548 + r48550;
        double r48552 = r48544 + r48551;
        double r48553 = x;
        double r48554 = r48544 + r48553;
        double r48555 = r48545 * r48540;
        double r48556 = r48555 + r48549;
        double r48557 = r48556 * r48546;
        double r48558 = r48554 + r48557;
        double r48559 = r48542 ? r48552 : r48558;
        return r48559;
}

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 r48560, r48561, r48562, r48563, r48564, r48565, r48566, r48567, r48568, r48569, r48570, r48571, r48572;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r48560);
        mpfr_init(r48561);
        mpfr_init(r48562);
        mpfr_init(r48563);
        mpfr_init(r48564);
        mpfr_init(r48565);
        mpfr_init(r48566);
        mpfr_init(r48567);
        mpfr_init(r48568);
        mpfr_init(r48569);
        mpfr_init(r48570);
        mpfr_init(r48571);
        mpfr_init(r48572);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r48560, x, MPFR_RNDN);
        mpfr_set_d(r48561, y, MPFR_RNDN);
        mpfr_set_d(r48562, z, MPFR_RNDN);
        mpfr_mul(r48563, r48561, r48562, MPFR_RNDN);
        mpfr_add(r48564, r48560, r48563, MPFR_RNDN);
        mpfr_set_d(r48565, t, MPFR_RNDN);
        mpfr_set_d(r48566, a, MPFR_RNDN);
        mpfr_mul(r48567, r48565, r48566, MPFR_RNDN);
        mpfr_add(r48568, r48564, r48567, MPFR_RNDN);
        mpfr_mul(r48569, r48566, r48562, MPFR_RNDN);
        mpfr_set_d(r48570, b, MPFR_RNDN);
        mpfr_mul(r48571, r48569, r48570, MPFR_RNDN);
        mpfr_add(r48572, r48568, r48571, MPFR_RNDN);
        return mpfr_get_d(r48572, MPFR_RNDN);
}

static mpfr_t r48573, r48574, r48575, r48576, r48577, r48578, r48579, r48580, r48581, r48582, r48583, r48584, r48585, r48586, r48587, r48588, r48589, r48590, r48591, r48592;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r48573);
        mpfr_init_set_str(r48574, "-1.7570734968756763e+120", 10, MPFR_RNDN);
        mpfr_init(r48575);
        mpfr_init(r48576);
        mpfr_init(r48577);
        mpfr_init(r48578);
        mpfr_init(r48579);
        mpfr_init(r48580);
        mpfr_init(r48581);
        mpfr_init(r48582);
        mpfr_init(r48583);
        mpfr_init(r48584);
        mpfr_init(r48585);
        mpfr_init(r48586);
        mpfr_init(r48587);
        mpfr_init(r48588);
        mpfr_init(r48589);
        mpfr_init(r48590);
        mpfr_init(r48591);
        mpfr_init(r48592);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r48573, z, MPFR_RNDN);
        ;
        mpfr_set_si(r48575, mpfr_cmp(r48573, r48574) <= 0, MPFR_RNDN);
        mpfr_set_d(r48576, y, MPFR_RNDN);
        mpfr_mul(r48577, r48573, r48576, MPFR_RNDN);
        mpfr_set_d(r48578, b, MPFR_RNDN);
        mpfr_set_d(r48579, a, MPFR_RNDN);
        mpfr_mul(r48580, r48578, r48579, MPFR_RNDN);
        mpfr_mul(r48581, r48573, r48580, MPFR_RNDN);
        mpfr_set_d(r48582, t, MPFR_RNDN);
        mpfr_mul(r48583, r48579, r48582, MPFR_RNDN);
        mpfr_add(r48584, r48581, r48583, MPFR_RNDN);
        mpfr_add(r48585, r48577, r48584, MPFR_RNDN);
        mpfr_set_d(r48586, x, MPFR_RNDN);
        mpfr_add(r48587, r48577, r48586, MPFR_RNDN);
        mpfr_mul(r48588, r48578, r48573, MPFR_RNDN);
        mpfr_add(r48589, r48588, r48582, MPFR_RNDN);
        mpfr_mul(r48590, r48589, r48579, MPFR_RNDN);
        mpfr_add(r48591, r48587, r48590, MPFR_RNDN);
        if (mpfr_get_si(r48575, MPFR_RNDN)) { mpfr_set(r48592, r48585, MPFR_RNDN); } else { mpfr_set(r48592, r48591, MPFR_RNDN); };
        return mpfr_get_d(r48592, MPFR_RNDN);
}

static mpfr_t r48593, r48594, r48595, r48596, r48597, r48598, r48599, r48600, r48601, r48602, r48603, r48604, r48605, r48606, r48607, r48608, r48609, r48610, r48611, r48612;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r48593);
        mpfr_init_set_str(r48594, "-1.7570734968756763e+120", 10, MPFR_RNDN);
        mpfr_init(r48595);
        mpfr_init(r48596);
        mpfr_init(r48597);
        mpfr_init(r48598);
        mpfr_init(r48599);
        mpfr_init(r48600);
        mpfr_init(r48601);
        mpfr_init(r48602);
        mpfr_init(r48603);
        mpfr_init(r48604);
        mpfr_init(r48605);
        mpfr_init(r48606);
        mpfr_init(r48607);
        mpfr_init(r48608);
        mpfr_init(r48609);
        mpfr_init(r48610);
        mpfr_init(r48611);
        mpfr_init(r48612);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r48593, z, MPFR_RNDN);
        ;
        mpfr_set_si(r48595, mpfr_cmp(r48593, r48594) <= 0, MPFR_RNDN);
        mpfr_set_d(r48596, y, MPFR_RNDN);
        mpfr_mul(r48597, r48593, r48596, MPFR_RNDN);
        mpfr_set_d(r48598, b, MPFR_RNDN);
        mpfr_set_d(r48599, a, MPFR_RNDN);
        mpfr_mul(r48600, r48598, r48599, MPFR_RNDN);
        mpfr_mul(r48601, r48593, r48600, MPFR_RNDN);
        mpfr_set_d(r48602, t, MPFR_RNDN);
        mpfr_mul(r48603, r48599, r48602, MPFR_RNDN);
        mpfr_add(r48604, r48601, r48603, MPFR_RNDN);
        mpfr_add(r48605, r48597, r48604, MPFR_RNDN);
        mpfr_set_d(r48606, x, MPFR_RNDN);
        mpfr_add(r48607, r48597, r48606, MPFR_RNDN);
        mpfr_mul(r48608, r48598, r48593, MPFR_RNDN);
        mpfr_add(r48609, r48608, r48602, MPFR_RNDN);
        mpfr_mul(r48610, r48609, r48599, MPFR_RNDN);
        mpfr_add(r48611, r48607, r48610, MPFR_RNDN);
        if (mpfr_get_si(r48595, MPFR_RNDN)) { mpfr_set(r48612, r48605, MPFR_RNDN); } else { mpfr_set(r48612, r48611, MPFR_RNDN); };
        return mpfr_get_d(r48612, MPFR_RNDN);
}

