#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 r51322 = x;
        float r51323 = y;
        float r51324 = z;
        float r51325 = r51323 * r51324;
        float r51326 = r51322 + r51325;
        float r51327 = t;
        float r51328 = a;
        float r51329 = r51327 * r51328;
        float r51330 = r51326 + r51329;
        float r51331 = r51328 * r51324;
        float r51332 = b;
        float r51333 = r51331 * r51332;
        float r51334 = r51330 + r51333;
        return r51334;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r51335 = x;
        double r51336 = y;
        double r51337 = z;
        double r51338 = r51336 * r51337;
        double r51339 = r51335 + r51338;
        double r51340 = t;
        double r51341 = a;
        double r51342 = r51340 * r51341;
        double r51343 = r51339 + r51342;
        double r51344 = r51341 * r51337;
        double r51345 = b;
        double r51346 = r51344 * r51345;
        double r51347 = r51343 + r51346;
        return r51347;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r51348 = x;
        float r51349 = a;
        float r51350 = t;
        float r51351 = r51349 * r51350;
        float r51352 = r51348 + r51351;
        float r51353 = z;
        float r51354 = b;
        float r51355 = r51354 * r51349;
        float r51356 = y;
        float r51357 = r51355 + r51356;
        float r51358 = r51353 * r51357;
        float r51359 = r51352 + r51358;
        return r51359;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r51360 = x;
        double r51361 = a;
        double r51362 = t;
        double r51363 = r51361 * r51362;
        double r51364 = r51360 + r51363;
        double r51365 = z;
        double r51366 = b;
        double r51367 = r51366 * r51361;
        double r51368 = y;
        double r51369 = r51367 + r51368;
        double r51370 = r51365 * r51369;
        double r51371 = r51364 + r51370;
        return r51371;
}

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 r51372, r51373, r51374, r51375, r51376, r51377, r51378, r51379, r51380, r51381, r51382, r51383, r51384;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51372);
        mpfr_init(r51373);
        mpfr_init(r51374);
        mpfr_init(r51375);
        mpfr_init(r51376);
        mpfr_init(r51377);
        mpfr_init(r51378);
        mpfr_init(r51379);
        mpfr_init(r51380);
        mpfr_init(r51381);
        mpfr_init(r51382);
        mpfr_init(r51383);
        mpfr_init(r51384);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r51372, x, MPFR_RNDN);
        mpfr_set_d(r51373, y, MPFR_RNDN);
        mpfr_set_d(r51374, z, MPFR_RNDN);
        mpfr_mul(r51375, r51373, r51374, MPFR_RNDN);
        mpfr_add(r51376, r51372, r51375, MPFR_RNDN);
        mpfr_set_d(r51377, t, MPFR_RNDN);
        mpfr_set_d(r51378, a, MPFR_RNDN);
        mpfr_mul(r51379, r51377, r51378, MPFR_RNDN);
        mpfr_add(r51380, r51376, r51379, MPFR_RNDN);
        mpfr_mul(r51381, r51378, r51374, MPFR_RNDN);
        mpfr_set_d(r51382, b, MPFR_RNDN);
        mpfr_mul(r51383, r51381, r51382, MPFR_RNDN);
        mpfr_add(r51384, r51380, r51383, MPFR_RNDN);
        return mpfr_get_d(r51384, MPFR_RNDN);
}

static mpfr_t r51385, r51386, r51387, r51388, r51389, r51390, r51391, r51392, r51393, r51394, r51395, r51396;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51385);
        mpfr_init(r51386);
        mpfr_init(r51387);
        mpfr_init(r51388);
        mpfr_init(r51389);
        mpfr_init(r51390);
        mpfr_init(r51391);
        mpfr_init(r51392);
        mpfr_init(r51393);
        mpfr_init(r51394);
        mpfr_init(r51395);
        mpfr_init(r51396);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r51385, x, MPFR_RNDN);
        mpfr_set_d(r51386, a, MPFR_RNDN);
        mpfr_set_d(r51387, t, MPFR_RNDN);
        mpfr_mul(r51388, r51386, r51387, MPFR_RNDN);
        mpfr_add(r51389, r51385, r51388, MPFR_RNDN);
        mpfr_set_d(r51390, z, MPFR_RNDN);
        mpfr_set_d(r51391, b, MPFR_RNDN);
        mpfr_mul(r51392, r51391, r51386, MPFR_RNDN);
        mpfr_set_d(r51393, y, MPFR_RNDN);
        mpfr_add(r51394, r51392, r51393, MPFR_RNDN);
        mpfr_mul(r51395, r51390, r51394, MPFR_RNDN);
        mpfr_add(r51396, r51389, r51395, MPFR_RNDN);
        return mpfr_get_d(r51396, MPFR_RNDN);
}

static mpfr_t r51397, r51398, r51399, r51400, r51401, r51402, r51403, r51404, r51405, r51406, r51407, r51408;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51397);
        mpfr_init(r51398);
        mpfr_init(r51399);
        mpfr_init(r51400);
        mpfr_init(r51401);
        mpfr_init(r51402);
        mpfr_init(r51403);
        mpfr_init(r51404);
        mpfr_init(r51405);
        mpfr_init(r51406);
        mpfr_init(r51407);
        mpfr_init(r51408);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r51397, x, MPFR_RNDN);
        mpfr_set_d(r51398, a, MPFR_RNDN);
        mpfr_set_d(r51399, t, MPFR_RNDN);
        mpfr_mul(r51400, r51398, r51399, MPFR_RNDN);
        mpfr_add(r51401, r51397, r51400, MPFR_RNDN);
        mpfr_set_d(r51402, z, MPFR_RNDN);
        mpfr_set_d(r51403, b, MPFR_RNDN);
        mpfr_mul(r51404, r51403, r51398, MPFR_RNDN);
        mpfr_set_d(r51405, y, MPFR_RNDN);
        mpfr_add(r51406, r51404, r51405, MPFR_RNDN);
        mpfr_mul(r51407, r51402, r51406, MPFR_RNDN);
        mpfr_add(r51408, r51401, r51407, MPFR_RNDN);
        return mpfr_get_d(r51408, MPFR_RNDN);
}

