#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Graphics.Rendering.Chart.SparkLine:renderSparkLine from Chart-1.5.3";

double f_if(float x, float y, float z, float t, float a) {
        float r49947 = x;
        float r49948 = y;
        float r49949 = z;
        float r49950 = r49948 - r49949;
        float r49951 = t;
        float r49952 = r49951 - r49949;
        float r49953 = 1.0;
        float r49954 = r49952 + r49953;
        float r49955 = a;
        float r49956 = r49954 / r49955;
        float r49957 = r49950 / r49956;
        float r49958 = r49947 - r49957;
        return r49958;
}

double f_id(double x, double y, double z, double t, double a) {
        double r49959 = x;
        double r49960 = y;
        double r49961 = z;
        double r49962 = r49960 - r49961;
        double r49963 = t;
        double r49964 = r49963 - r49961;
        double r49965 = 1.0;
        double r49966 = r49964 + r49965;
        double r49967 = a;
        double r49968 = r49966 / r49967;
        double r49969 = r49962 / r49968;
        double r49970 = r49959 - r49969;
        return r49970;
}


double f_of(float x, float y, float z, float t, float a) {
        float r49971 = x;
        float r49972 = y;
        float r49973 = z;
        float r49974 = r49972 - r49973;
        float r49975 = t;
        float r49976 = r49975 - r49973;
        float r49977 = 1.0;
        float r49978 = r49976 + r49977;
        float r49979 = r49974 / r49978;
        float r49980 = a;
        float r49981 = r49979 * r49980;
        float r49982 = r49971 - r49981;
        return r49982;
}

double f_od(double x, double y, double z, double t, double a) {
        double r49983 = x;
        double r49984 = y;
        double r49985 = z;
        double r49986 = r49984 - r49985;
        double r49987 = t;
        double r49988 = r49987 - r49985;
        double r49989 = 1.0;
        double r49990 = r49988 + r49989;
        double r49991 = r49986 / r49990;
        double r49992 = a;
        double r49993 = r49991 * r49992;
        double r49994 = r49983 - r49993;
        return r49994;
}

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 r49995, r49996, r49997, r49998, r49999, r50000, r50001, r50002, r50003, r50004, r50005, r50006;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(656);
        mpfr_init(r49995);
        mpfr_init(r49996);
        mpfr_init(r49997);
        mpfr_init(r49998);
        mpfr_init(r49999);
        mpfr_init(r50000);
        mpfr_init_set_str(r50001, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50002);
        mpfr_init(r50003);
        mpfr_init(r50004);
        mpfr_init(r50005);
        mpfr_init(r50006);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r49995, x, MPFR_RNDN);
        mpfr_set_d(r49996, y, MPFR_RNDN);
        mpfr_set_d(r49997, z, MPFR_RNDN);
        mpfr_sub(r49998, r49996, r49997, MPFR_RNDN);
        mpfr_set_d(r49999, t, MPFR_RNDN);
        mpfr_sub(r50000, r49999, r49997, MPFR_RNDN);
        ;
        mpfr_add(r50002, r50000, r50001, MPFR_RNDN);
        mpfr_set_d(r50003, a, MPFR_RNDN);
        mpfr_div(r50004, r50002, r50003, MPFR_RNDN);
        mpfr_div(r50005, r49998, r50004, MPFR_RNDN);
        mpfr_sub(r50006, r49995, r50005, MPFR_RNDN);
        return mpfr_get_d(r50006, MPFR_RNDN);
}

static mpfr_t r50007, r50008, r50009, r50010, r50011, r50012, r50013, r50014, r50015, r50016, r50017, r50018;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(656);
        mpfr_init(r50007);
        mpfr_init(r50008);
        mpfr_init(r50009);
        mpfr_init(r50010);
        mpfr_init(r50011);
        mpfr_init(r50012);
        mpfr_init_set_str(r50013, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50014);
        mpfr_init(r50015);
        mpfr_init(r50016);
        mpfr_init(r50017);
        mpfr_init(r50018);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r50007, x, MPFR_RNDN);
        mpfr_set_d(r50008, y, MPFR_RNDN);
        mpfr_set_d(r50009, z, MPFR_RNDN);
        mpfr_sub(r50010, r50008, r50009, MPFR_RNDN);
        mpfr_set_d(r50011, t, MPFR_RNDN);
        mpfr_sub(r50012, r50011, r50009, MPFR_RNDN);
        ;
        mpfr_add(r50014, r50012, r50013, MPFR_RNDN);
        mpfr_div(r50015, r50010, r50014, MPFR_RNDN);
        mpfr_set_d(r50016, a, MPFR_RNDN);
        mpfr_mul(r50017, r50015, r50016, MPFR_RNDN);
        mpfr_sub(r50018, r50007, r50017, MPFR_RNDN);
        return mpfr_get_d(r50018, MPFR_RNDN);
}

static mpfr_t r50019, r50020, r50021, r50022, r50023, r50024, r50025, r50026, r50027, r50028, r50029, r50030;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(656);
        mpfr_init(r50019);
        mpfr_init(r50020);
        mpfr_init(r50021);
        mpfr_init(r50022);
        mpfr_init(r50023);
        mpfr_init(r50024);
        mpfr_init_set_str(r50025, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50026);
        mpfr_init(r50027);
        mpfr_init(r50028);
        mpfr_init(r50029);
        mpfr_init(r50030);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r50019, x, MPFR_RNDN);
        mpfr_set_d(r50020, y, MPFR_RNDN);
        mpfr_set_d(r50021, z, MPFR_RNDN);
        mpfr_sub(r50022, r50020, r50021, MPFR_RNDN);
        mpfr_set_d(r50023, t, MPFR_RNDN);
        mpfr_sub(r50024, r50023, r50021, MPFR_RNDN);
        ;
        mpfr_add(r50026, r50024, r50025, MPFR_RNDN);
        mpfr_div(r50027, r50022, r50026, MPFR_RNDN);
        mpfr_set_d(r50028, a, MPFR_RNDN);
        mpfr_mul(r50029, r50027, r50028, MPFR_RNDN);
        mpfr_sub(r50030, r50019, r50029, MPFR_RNDN);
        return mpfr_get_d(r50030, MPFR_RNDN);
}

