#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 r50255 = x;
        float r50256 = y;
        float r50257 = z;
        float r50258 = r50256 * r50257;
        float r50259 = r50255 + r50258;
        float r50260 = t;
        float r50261 = a;
        float r50262 = r50260 * r50261;
        float r50263 = r50259 + r50262;
        float r50264 = r50261 * r50257;
        float r50265 = b;
        float r50266 = r50264 * r50265;
        float r50267 = r50263 + r50266;
        return r50267;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r50268 = x;
        double r50269 = y;
        double r50270 = z;
        double r50271 = r50269 * r50270;
        double r50272 = r50268 + r50271;
        double r50273 = t;
        double r50274 = a;
        double r50275 = r50273 * r50274;
        double r50276 = r50272 + r50275;
        double r50277 = r50274 * r50270;
        double r50278 = b;
        double r50279 = r50277 * r50278;
        double r50280 = r50276 + r50279;
        return r50280;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r50281 = x;
        float r50282 = a;
        float r50283 = t;
        float r50284 = r50282 * r50283;
        float r50285 = r50281 + r50284;
        float r50286 = z;
        float r50287 = b;
        float r50288 = r50287 * r50282;
        float r50289 = y;
        float r50290 = r50288 + r50289;
        float r50291 = r50286 * r50290;
        float r50292 = r50285 + r50291;
        return r50292;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r50293 = x;
        double r50294 = a;
        double r50295 = t;
        double r50296 = r50294 * r50295;
        double r50297 = r50293 + r50296;
        double r50298 = z;
        double r50299 = b;
        double r50300 = r50299 * r50294;
        double r50301 = y;
        double r50302 = r50300 + r50301;
        double r50303 = r50298 * r50302;
        double r50304 = r50297 + r50303;
        return r50304;
}

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 r50305, r50306, r50307, r50308, r50309, r50310, r50311, r50312, r50313, r50314, r50315, r50316, r50317;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50305);
        mpfr_init(r50306);
        mpfr_init(r50307);
        mpfr_init(r50308);
        mpfr_init(r50309);
        mpfr_init(r50310);
        mpfr_init(r50311);
        mpfr_init(r50312);
        mpfr_init(r50313);
        mpfr_init(r50314);
        mpfr_init(r50315);
        mpfr_init(r50316);
        mpfr_init(r50317);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r50305, x, MPFR_RNDN);
        mpfr_set_d(r50306, y, MPFR_RNDN);
        mpfr_set_d(r50307, z, MPFR_RNDN);
        mpfr_mul(r50308, r50306, r50307, MPFR_RNDN);
        mpfr_add(r50309, r50305, r50308, MPFR_RNDN);
        mpfr_set_d(r50310, t, MPFR_RNDN);
        mpfr_set_d(r50311, a, MPFR_RNDN);
        mpfr_mul(r50312, r50310, r50311, MPFR_RNDN);
        mpfr_add(r50313, r50309, r50312, MPFR_RNDN);
        mpfr_mul(r50314, r50311, r50307, MPFR_RNDN);
        mpfr_set_d(r50315, b, MPFR_RNDN);
        mpfr_mul(r50316, r50314, r50315, MPFR_RNDN);
        mpfr_add(r50317, r50313, r50316, MPFR_RNDN);
        return mpfr_get_d(r50317, MPFR_RNDN);
}

static mpfr_t r50318, r50319, r50320, r50321, r50322, r50323, r50324, r50325, r50326, r50327, r50328, r50329;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50318);
        mpfr_init(r50319);
        mpfr_init(r50320);
        mpfr_init(r50321);
        mpfr_init(r50322);
        mpfr_init(r50323);
        mpfr_init(r50324);
        mpfr_init(r50325);
        mpfr_init(r50326);
        mpfr_init(r50327);
        mpfr_init(r50328);
        mpfr_init(r50329);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r50318, x, MPFR_RNDN);
        mpfr_set_d(r50319, a, MPFR_RNDN);
        mpfr_set_d(r50320, t, MPFR_RNDN);
        mpfr_mul(r50321, r50319, r50320, MPFR_RNDN);
        mpfr_add(r50322, r50318, r50321, MPFR_RNDN);
        mpfr_set_d(r50323, z, MPFR_RNDN);
        mpfr_set_d(r50324, b, MPFR_RNDN);
        mpfr_mul(r50325, r50324, r50319, MPFR_RNDN);
        mpfr_set_d(r50326, y, MPFR_RNDN);
        mpfr_add(r50327, r50325, r50326, MPFR_RNDN);
        mpfr_mul(r50328, r50323, r50327, MPFR_RNDN);
        mpfr_add(r50329, r50322, r50328, MPFR_RNDN);
        return mpfr_get_d(r50329, MPFR_RNDN);
}

static mpfr_t r50330, r50331, r50332, r50333, r50334, r50335, r50336, r50337, r50338, r50339, r50340, r50341;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50330);
        mpfr_init(r50331);
        mpfr_init(r50332);
        mpfr_init(r50333);
        mpfr_init(r50334);
        mpfr_init(r50335);
        mpfr_init(r50336);
        mpfr_init(r50337);
        mpfr_init(r50338);
        mpfr_init(r50339);
        mpfr_init(r50340);
        mpfr_init(r50341);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r50330, x, MPFR_RNDN);
        mpfr_set_d(r50331, a, MPFR_RNDN);
        mpfr_set_d(r50332, t, MPFR_RNDN);
        mpfr_mul(r50333, r50331, r50332, MPFR_RNDN);
        mpfr_add(r50334, r50330, r50333, MPFR_RNDN);
        mpfr_set_d(r50335, z, MPFR_RNDN);
        mpfr_set_d(r50336, b, MPFR_RNDN);
        mpfr_mul(r50337, r50336, r50331, MPFR_RNDN);
        mpfr_set_d(r50338, y, MPFR_RNDN);
        mpfr_add(r50339, r50337, r50338, MPFR_RNDN);
        mpfr_mul(r50340, r50335, r50339, MPFR_RNDN);
        mpfr_add(r50341, r50334, r50340, MPFR_RNDN);
        return mpfr_get_d(r50341, MPFR_RNDN);
}

