#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 r51190 = x;
        float r51191 = y;
        float r51192 = z;
        float r51193 = r51191 * r51192;
        float r51194 = r51190 + r51193;
        float r51195 = t;
        float r51196 = a;
        float r51197 = r51195 * r51196;
        float r51198 = r51194 + r51197;
        float r51199 = r51196 * r51192;
        float r51200 = b;
        float r51201 = r51199 * r51200;
        float r51202 = r51198 + r51201;
        return r51202;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r51203 = x;
        double r51204 = y;
        double r51205 = z;
        double r51206 = r51204 * r51205;
        double r51207 = r51203 + r51206;
        double r51208 = t;
        double r51209 = a;
        double r51210 = r51208 * r51209;
        double r51211 = r51207 + r51210;
        double r51212 = r51209 * r51205;
        double r51213 = b;
        double r51214 = r51212 * r51213;
        double r51215 = r51211 + r51214;
        return r51215;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r51216 = x;
        float r51217 = a;
        float r51218 = t;
        float r51219 = r51217 * r51218;
        float r51220 = r51216 + r51219;
        float r51221 = z;
        float r51222 = b;
        float r51223 = r51222 * r51217;
        float r51224 = y;
        float r51225 = r51223 + r51224;
        float r51226 = r51221 * r51225;
        float r51227 = r51220 + r51226;
        return r51227;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r51228 = x;
        double r51229 = a;
        double r51230 = t;
        double r51231 = r51229 * r51230;
        double r51232 = r51228 + r51231;
        double r51233 = z;
        double r51234 = b;
        double r51235 = r51234 * r51229;
        double r51236 = y;
        double r51237 = r51235 + r51236;
        double r51238 = r51233 * r51237;
        double r51239 = r51232 + r51238;
        return r51239;
}

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 r51240, r51241, r51242, r51243, r51244, r51245, r51246, r51247, r51248, r51249, r51250, r51251, r51252;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51240);
        mpfr_init(r51241);
        mpfr_init(r51242);
        mpfr_init(r51243);
        mpfr_init(r51244);
        mpfr_init(r51245);
        mpfr_init(r51246);
        mpfr_init(r51247);
        mpfr_init(r51248);
        mpfr_init(r51249);
        mpfr_init(r51250);
        mpfr_init(r51251);
        mpfr_init(r51252);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r51240, x, MPFR_RNDN);
        mpfr_set_d(r51241, y, MPFR_RNDN);
        mpfr_set_d(r51242, z, MPFR_RNDN);
        mpfr_mul(r51243, r51241, r51242, MPFR_RNDN);
        mpfr_add(r51244, r51240, r51243, MPFR_RNDN);
        mpfr_set_d(r51245, t, MPFR_RNDN);
        mpfr_set_d(r51246, a, MPFR_RNDN);
        mpfr_mul(r51247, r51245, r51246, MPFR_RNDN);
        mpfr_add(r51248, r51244, r51247, MPFR_RNDN);
        mpfr_mul(r51249, r51246, r51242, MPFR_RNDN);
        mpfr_set_d(r51250, b, MPFR_RNDN);
        mpfr_mul(r51251, r51249, r51250, MPFR_RNDN);
        mpfr_add(r51252, r51248, r51251, MPFR_RNDN);
        return mpfr_get_d(r51252, MPFR_RNDN);
}

static mpfr_t r51253, r51254, r51255, r51256, r51257, r51258, r51259, r51260, r51261, r51262, r51263, r51264;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51253);
        mpfr_init(r51254);
        mpfr_init(r51255);
        mpfr_init(r51256);
        mpfr_init(r51257);
        mpfr_init(r51258);
        mpfr_init(r51259);
        mpfr_init(r51260);
        mpfr_init(r51261);
        mpfr_init(r51262);
        mpfr_init(r51263);
        mpfr_init(r51264);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r51253, x, MPFR_RNDN);
        mpfr_set_d(r51254, a, MPFR_RNDN);
        mpfr_set_d(r51255, t, MPFR_RNDN);
        mpfr_mul(r51256, r51254, r51255, MPFR_RNDN);
        mpfr_add(r51257, r51253, r51256, MPFR_RNDN);
        mpfr_set_d(r51258, z, MPFR_RNDN);
        mpfr_set_d(r51259, b, MPFR_RNDN);
        mpfr_mul(r51260, r51259, r51254, MPFR_RNDN);
        mpfr_set_d(r51261, y, MPFR_RNDN);
        mpfr_add(r51262, r51260, r51261, MPFR_RNDN);
        mpfr_mul(r51263, r51258, r51262, MPFR_RNDN);
        mpfr_add(r51264, r51257, r51263, MPFR_RNDN);
        return mpfr_get_d(r51264, MPFR_RNDN);
}

static mpfr_t r51265, r51266, r51267, r51268, r51269, r51270, r51271, r51272, r51273, r51274, r51275, r51276;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51265);
        mpfr_init(r51266);
        mpfr_init(r51267);
        mpfr_init(r51268);
        mpfr_init(r51269);
        mpfr_init(r51270);
        mpfr_init(r51271);
        mpfr_init(r51272);
        mpfr_init(r51273);
        mpfr_init(r51274);
        mpfr_init(r51275);
        mpfr_init(r51276);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r51265, x, MPFR_RNDN);
        mpfr_set_d(r51266, a, MPFR_RNDN);
        mpfr_set_d(r51267, t, MPFR_RNDN);
        mpfr_mul(r51268, r51266, r51267, MPFR_RNDN);
        mpfr_add(r51269, r51265, r51268, MPFR_RNDN);
        mpfr_set_d(r51270, z, MPFR_RNDN);
        mpfr_set_d(r51271, b, MPFR_RNDN);
        mpfr_mul(r51272, r51271, r51266, MPFR_RNDN);
        mpfr_set_d(r51273, y, MPFR_RNDN);
        mpfr_add(r51274, r51272, r51273, MPFR_RNDN);
        mpfr_mul(r51275, r51270, r51274, MPFR_RNDN);
        mpfr_add(r51276, r51269, r51275, MPFR_RNDN);
        return mpfr_get_d(r51276, MPFR_RNDN);
}

