#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 r50958 = x;
        float r50959 = y;
        float r50960 = z;
        float r50961 = r50959 * r50960;
        float r50962 = r50958 + r50961;
        float r50963 = t;
        float r50964 = a;
        float r50965 = r50963 * r50964;
        float r50966 = r50962 + r50965;
        float r50967 = r50964 * r50960;
        float r50968 = b;
        float r50969 = r50967 * r50968;
        float r50970 = r50966 + r50969;
        return r50970;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r50971 = x;
        double r50972 = y;
        double r50973 = z;
        double r50974 = r50972 * r50973;
        double r50975 = r50971 + r50974;
        double r50976 = t;
        double r50977 = a;
        double r50978 = r50976 * r50977;
        double r50979 = r50975 + r50978;
        double r50980 = r50977 * r50973;
        double r50981 = b;
        double r50982 = r50980 * r50981;
        double r50983 = r50979 + r50982;
        return r50983;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r50984 = x;
        float r50985 = a;
        float r50986 = t;
        float r50987 = r50985 * r50986;
        float r50988 = r50984 + r50987;
        float r50989 = z;
        float r50990 = b;
        float r50991 = r50990 * r50985;
        float r50992 = y;
        float r50993 = r50991 + r50992;
        float r50994 = r50989 * r50993;
        float r50995 = r50988 + r50994;
        return r50995;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r50996 = x;
        double r50997 = a;
        double r50998 = t;
        double r50999 = r50997 * r50998;
        double r51000 = r50996 + r50999;
        double r51001 = z;
        double r51002 = b;
        double r51003 = r51002 * r50997;
        double r51004 = y;
        double r51005 = r51003 + r51004;
        double r51006 = r51001 * r51005;
        double r51007 = r51000 + r51006;
        return r51007;
}

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 r51008, r51009, r51010, r51011, r51012, r51013, r51014, r51015, r51016, r51017, r51018, r51019, r51020;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51008);
        mpfr_init(r51009);
        mpfr_init(r51010);
        mpfr_init(r51011);
        mpfr_init(r51012);
        mpfr_init(r51013);
        mpfr_init(r51014);
        mpfr_init(r51015);
        mpfr_init(r51016);
        mpfr_init(r51017);
        mpfr_init(r51018);
        mpfr_init(r51019);
        mpfr_init(r51020);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r51008, x, MPFR_RNDN);
        mpfr_set_d(r51009, y, MPFR_RNDN);
        mpfr_set_d(r51010, z, MPFR_RNDN);
        mpfr_mul(r51011, r51009, r51010, MPFR_RNDN);
        mpfr_add(r51012, r51008, r51011, MPFR_RNDN);
        mpfr_set_d(r51013, t, MPFR_RNDN);
        mpfr_set_d(r51014, a, MPFR_RNDN);
        mpfr_mul(r51015, r51013, r51014, MPFR_RNDN);
        mpfr_add(r51016, r51012, r51015, MPFR_RNDN);
        mpfr_mul(r51017, r51014, r51010, MPFR_RNDN);
        mpfr_set_d(r51018, b, MPFR_RNDN);
        mpfr_mul(r51019, r51017, r51018, MPFR_RNDN);
        mpfr_add(r51020, r51016, r51019, MPFR_RNDN);
        return mpfr_get_d(r51020, MPFR_RNDN);
}

static mpfr_t r51021, r51022, r51023, r51024, r51025, r51026, r51027, r51028, r51029, r51030, r51031, r51032;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51021);
        mpfr_init(r51022);
        mpfr_init(r51023);
        mpfr_init(r51024);
        mpfr_init(r51025);
        mpfr_init(r51026);
        mpfr_init(r51027);
        mpfr_init(r51028);
        mpfr_init(r51029);
        mpfr_init(r51030);
        mpfr_init(r51031);
        mpfr_init(r51032);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r51021, x, MPFR_RNDN);
        mpfr_set_d(r51022, a, MPFR_RNDN);
        mpfr_set_d(r51023, t, MPFR_RNDN);
        mpfr_mul(r51024, r51022, r51023, MPFR_RNDN);
        mpfr_add(r51025, r51021, r51024, MPFR_RNDN);
        mpfr_set_d(r51026, z, MPFR_RNDN);
        mpfr_set_d(r51027, b, MPFR_RNDN);
        mpfr_mul(r51028, r51027, r51022, MPFR_RNDN);
        mpfr_set_d(r51029, y, MPFR_RNDN);
        mpfr_add(r51030, r51028, r51029, MPFR_RNDN);
        mpfr_mul(r51031, r51026, r51030, MPFR_RNDN);
        mpfr_add(r51032, r51025, r51031, MPFR_RNDN);
        return mpfr_get_d(r51032, MPFR_RNDN);
}

static mpfr_t r51033, r51034, r51035, r51036, r51037, r51038, r51039, r51040, r51041, r51042, r51043, r51044;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51033);
        mpfr_init(r51034);
        mpfr_init(r51035);
        mpfr_init(r51036);
        mpfr_init(r51037);
        mpfr_init(r51038);
        mpfr_init(r51039);
        mpfr_init(r51040);
        mpfr_init(r51041);
        mpfr_init(r51042);
        mpfr_init(r51043);
        mpfr_init(r51044);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r51033, x, MPFR_RNDN);
        mpfr_set_d(r51034, a, MPFR_RNDN);
        mpfr_set_d(r51035, t, MPFR_RNDN);
        mpfr_mul(r51036, r51034, r51035, MPFR_RNDN);
        mpfr_add(r51037, r51033, r51036, MPFR_RNDN);
        mpfr_set_d(r51038, z, MPFR_RNDN);
        mpfr_set_d(r51039, b, MPFR_RNDN);
        mpfr_mul(r51040, r51039, r51034, MPFR_RNDN);
        mpfr_set_d(r51041, y, MPFR_RNDN);
        mpfr_add(r51042, r51040, r51041, MPFR_RNDN);
        mpfr_mul(r51043, r51038, r51042, MPFR_RNDN);
        mpfr_add(r51044, r51037, r51043, MPFR_RNDN);
        return mpfr_get_d(r51044, MPFR_RNDN);
}

