#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 r47056 = x;
        float r47057 = y;
        float r47058 = z;
        float r47059 = r47057 - r47058;
        float r47060 = t;
        float r47061 = r47060 - r47058;
        float r47062 = 1.0f;
        float r47063 = r47061 + r47062;
        float r47064 = a;
        float r47065 = r47063 / r47064;
        float r47066 = r47059 / r47065;
        float r47067 = r47056 - r47066;
        return r47067;
}

double f_id(double x, double y, double z, double t, double a) {
        double r47068 = x;
        double r47069 = y;
        double r47070 = z;
        double r47071 = r47069 - r47070;
        double r47072 = t;
        double r47073 = r47072 - r47070;
        double r47074 = 1.0;
        double r47075 = r47073 + r47074;
        double r47076 = a;
        double r47077 = r47075 / r47076;
        double r47078 = r47071 / r47077;
        double r47079 = r47068 - r47078;
        return r47079;
}


double f_of(float x, float y, float z, float t, float a) {
        float r47080 = x;
        float r47081 = y;
        float r47082 = z;
        float r47083 = r47081 - r47082;
        float r47084 = t;
        float r47085 = r47084 - r47082;
        float r47086 = 1.0f;
        float r47087 = r47085 + r47086;
        float r47088 = r47083 / r47087;
        float r47089 = 1.0f;
        float r47090 = a;
        float r47091 = r47089 / r47090;
        float r47092 = r47088 / r47091;
        float r47093 = r47080 - r47092;
        return r47093;
}

double f_od(double x, double y, double z, double t, double a) {
        double r47094 = x;
        double r47095 = y;
        double r47096 = z;
        double r47097 = r47095 - r47096;
        double r47098 = t;
        double r47099 = r47098 - r47096;
        double r47100 = 1.0;
        double r47101 = r47099 + r47100;
        double r47102 = r47097 / r47101;
        double r47103 = 1.0;
        double r47104 = a;
        double r47105 = r47103 / r47104;
        double r47106 = r47102 / r47105;
        double r47107 = r47094 - r47106;
        return r47107;
}

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 r47108, r47109, r47110, r47111, r47112, r47113, r47114, r47115, r47116, r47117, r47118, r47119;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r47108);
        mpfr_init(r47109);
        mpfr_init(r47110);
        mpfr_init(r47111);
        mpfr_init(r47112);
        mpfr_init(r47113);
        mpfr_init_set_str(r47114, "1.0", 10, MPFR_RNDN);
        mpfr_init(r47115);
        mpfr_init(r47116);
        mpfr_init(r47117);
        mpfr_init(r47118);
        mpfr_init(r47119);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r47108, x, MPFR_RNDN);
        mpfr_set_d(r47109, y, MPFR_RNDN);
        mpfr_set_d(r47110, z, MPFR_RNDN);
        mpfr_sub(r47111, r47109, r47110, MPFR_RNDN);
        mpfr_set_d(r47112, t, MPFR_RNDN);
        mpfr_sub(r47113, r47112, r47110, MPFR_RNDN);
        ;
        mpfr_add(r47115, r47113, r47114, MPFR_RNDN);
        mpfr_set_d(r47116, a, MPFR_RNDN);
        mpfr_div(r47117, r47115, r47116, MPFR_RNDN);
        mpfr_div(r47118, r47111, r47117, MPFR_RNDN);
        mpfr_sub(r47119, r47108, r47118, MPFR_RNDN);
        return mpfr_get_d(r47119, MPFR_RNDN);
}

static mpfr_t r47120, r47121, r47122, r47123, r47124, r47125, r47126, r47127, r47128, r47129, r47130, r47131, r47132, r47133;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r47120);
        mpfr_init(r47121);
        mpfr_init(r47122);
        mpfr_init(r47123);
        mpfr_init(r47124);
        mpfr_init(r47125);
        mpfr_init_set_str(r47126, "1.0", 10, MPFR_RNDN);
        mpfr_init(r47127);
        mpfr_init(r47128);
        mpfr_init_set_str(r47129, "1", 10, MPFR_RNDN);
        mpfr_init(r47130);
        mpfr_init(r47131);
        mpfr_init(r47132);
        mpfr_init(r47133);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r47120, x, MPFR_RNDN);
        mpfr_set_d(r47121, y, MPFR_RNDN);
        mpfr_set_d(r47122, z, MPFR_RNDN);
        mpfr_sub(r47123, r47121, r47122, MPFR_RNDN);
        mpfr_set_d(r47124, t, MPFR_RNDN);
        mpfr_sub(r47125, r47124, r47122, MPFR_RNDN);
        ;
        mpfr_add(r47127, r47125, r47126, MPFR_RNDN);
        mpfr_div(r47128, r47123, r47127, MPFR_RNDN);
        ;
        mpfr_set_d(r47130, a, MPFR_RNDN);
        mpfr_div(r47131, r47129, r47130, MPFR_RNDN);
        mpfr_div(r47132, r47128, r47131, MPFR_RNDN);
        mpfr_sub(r47133, r47120, r47132, MPFR_RNDN);
        return mpfr_get_d(r47133, MPFR_RNDN);
}

static mpfr_t r47134, r47135, r47136, r47137, r47138, r47139, r47140, r47141, r47142, r47143, r47144, r47145, r47146, r47147;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r47134);
        mpfr_init(r47135);
        mpfr_init(r47136);
        mpfr_init(r47137);
        mpfr_init(r47138);
        mpfr_init(r47139);
        mpfr_init_set_str(r47140, "1.0", 10, MPFR_RNDN);
        mpfr_init(r47141);
        mpfr_init(r47142);
        mpfr_init_set_str(r47143, "1", 10, MPFR_RNDN);
        mpfr_init(r47144);
        mpfr_init(r47145);
        mpfr_init(r47146);
        mpfr_init(r47147);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r47134, x, MPFR_RNDN);
        mpfr_set_d(r47135, y, MPFR_RNDN);
        mpfr_set_d(r47136, z, MPFR_RNDN);
        mpfr_sub(r47137, r47135, r47136, MPFR_RNDN);
        mpfr_set_d(r47138, t, MPFR_RNDN);
        mpfr_sub(r47139, r47138, r47136, MPFR_RNDN);
        ;
        mpfr_add(r47141, r47139, r47140, MPFR_RNDN);
        mpfr_div(r47142, r47137, r47141, MPFR_RNDN);
        ;
        mpfr_set_d(r47144, a, MPFR_RNDN);
        mpfr_div(r47145, r47143, r47144, MPFR_RNDN);
        mpfr_div(r47146, r47142, r47145, MPFR_RNDN);
        mpfr_sub(r47147, r47134, r47146, MPFR_RNDN);
        return mpfr_get_d(r47147, MPFR_RNDN);
}

