#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 r50996 = x;
        float r50997 = y;
        float r50998 = z;
        float r50999 = r50997 * r50998;
        float r51000 = r50996 + r50999;
        float r51001 = t;
        float r51002 = a;
        float r51003 = r51001 * r51002;
        float r51004 = r51000 + r51003;
        float r51005 = r51002 * r50998;
        float r51006 = b;
        float r51007 = r51005 * r51006;
        float r51008 = r51004 + r51007;
        return r51008;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r51009 = x;
        double r51010 = y;
        double r51011 = z;
        double r51012 = r51010 * r51011;
        double r51013 = r51009 + r51012;
        double r51014 = t;
        double r51015 = a;
        double r51016 = r51014 * r51015;
        double r51017 = r51013 + r51016;
        double r51018 = r51015 * r51011;
        double r51019 = b;
        double r51020 = r51018 * r51019;
        double r51021 = r51017 + r51020;
        return r51021;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r51022 = x;
        float r51023 = a;
        float r51024 = t;
        float r51025 = r51023 * r51024;
        float r51026 = r51022 + r51025;
        float r51027 = z;
        float r51028 = b;
        float r51029 = r51028 * r51023;
        float r51030 = y;
        float r51031 = r51029 + r51030;
        float r51032 = r51027 * r51031;
        float r51033 = r51026 + r51032;
        return r51033;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r51034 = x;
        double r51035 = a;
        double r51036 = t;
        double r51037 = r51035 * r51036;
        double r51038 = r51034 + r51037;
        double r51039 = z;
        double r51040 = b;
        double r51041 = r51040 * r51035;
        double r51042 = y;
        double r51043 = r51041 + r51042;
        double r51044 = r51039 * r51043;
        double r51045 = r51038 + r51044;
        return r51045;
}

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 r51046, r51047, r51048, r51049, r51050, r51051, r51052, r51053, r51054, r51055, r51056, r51057, r51058;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51046);
        mpfr_init(r51047);
        mpfr_init(r51048);
        mpfr_init(r51049);
        mpfr_init(r51050);
        mpfr_init(r51051);
        mpfr_init(r51052);
        mpfr_init(r51053);
        mpfr_init(r51054);
        mpfr_init(r51055);
        mpfr_init(r51056);
        mpfr_init(r51057);
        mpfr_init(r51058);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r51046, x, MPFR_RNDN);
        mpfr_set_d(r51047, y, MPFR_RNDN);
        mpfr_set_d(r51048, z, MPFR_RNDN);
        mpfr_mul(r51049, r51047, r51048, MPFR_RNDN);
        mpfr_add(r51050, r51046, r51049, MPFR_RNDN);
        mpfr_set_d(r51051, t, MPFR_RNDN);
        mpfr_set_d(r51052, a, MPFR_RNDN);
        mpfr_mul(r51053, r51051, r51052, MPFR_RNDN);
        mpfr_add(r51054, r51050, r51053, MPFR_RNDN);
        mpfr_mul(r51055, r51052, r51048, MPFR_RNDN);
        mpfr_set_d(r51056, b, MPFR_RNDN);
        mpfr_mul(r51057, r51055, r51056, MPFR_RNDN);
        mpfr_add(r51058, r51054, r51057, MPFR_RNDN);
        return mpfr_get_d(r51058, MPFR_RNDN);
}

static mpfr_t r51059, r51060, r51061, r51062, r51063, r51064, r51065, r51066, r51067, r51068, r51069, r51070;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51059);
        mpfr_init(r51060);
        mpfr_init(r51061);
        mpfr_init(r51062);
        mpfr_init(r51063);
        mpfr_init(r51064);
        mpfr_init(r51065);
        mpfr_init(r51066);
        mpfr_init(r51067);
        mpfr_init(r51068);
        mpfr_init(r51069);
        mpfr_init(r51070);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r51059, x, MPFR_RNDN);
        mpfr_set_d(r51060, a, MPFR_RNDN);
        mpfr_set_d(r51061, t, MPFR_RNDN);
        mpfr_mul(r51062, r51060, r51061, MPFR_RNDN);
        mpfr_add(r51063, r51059, r51062, MPFR_RNDN);
        mpfr_set_d(r51064, z, MPFR_RNDN);
        mpfr_set_d(r51065, b, MPFR_RNDN);
        mpfr_mul(r51066, r51065, r51060, MPFR_RNDN);
        mpfr_set_d(r51067, y, MPFR_RNDN);
        mpfr_add(r51068, r51066, r51067, MPFR_RNDN);
        mpfr_mul(r51069, r51064, r51068, MPFR_RNDN);
        mpfr_add(r51070, r51063, r51069, MPFR_RNDN);
        return mpfr_get_d(r51070, MPFR_RNDN);
}

static mpfr_t r51071, r51072, r51073, r51074, r51075, r51076, r51077, r51078, r51079, r51080, r51081, r51082;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51071);
        mpfr_init(r51072);
        mpfr_init(r51073);
        mpfr_init(r51074);
        mpfr_init(r51075);
        mpfr_init(r51076);
        mpfr_init(r51077);
        mpfr_init(r51078);
        mpfr_init(r51079);
        mpfr_init(r51080);
        mpfr_init(r51081);
        mpfr_init(r51082);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r51071, x, MPFR_RNDN);
        mpfr_set_d(r51072, a, MPFR_RNDN);
        mpfr_set_d(r51073, t, MPFR_RNDN);
        mpfr_mul(r51074, r51072, r51073, MPFR_RNDN);
        mpfr_add(r51075, r51071, r51074, MPFR_RNDN);
        mpfr_set_d(r51076, z, MPFR_RNDN);
        mpfr_set_d(r51077, b, MPFR_RNDN);
        mpfr_mul(r51078, r51077, r51072, MPFR_RNDN);
        mpfr_set_d(r51079, y, MPFR_RNDN);
        mpfr_add(r51080, r51078, r51079, MPFR_RNDN);
        mpfr_mul(r51081, r51076, r51080, MPFR_RNDN);
        mpfr_add(r51082, r51075, r51081, MPFR_RNDN);
        return mpfr_get_d(r51082, MPFR_RNDN);
}

