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

char *name = "Graphics.Rendering.Chart.Plot.AreaSpots:renderAreaSpots4D from Chart-1.5.3";

double f_if(float x, float y, float z, float t) {
        float r50120 = x;
        float r50121 = y;
        float r50122 = z;
        float r50123 = r50121 - r50122;
        float r50124 = r50120 * r50123;
        float r50125 = t;
        float r50126 = r50125 - r50122;
        float r50127 = r50124 / r50126;
        return r50127;
}

double f_id(double x, double y, double z, double t) {
        double r50128 = x;
        double r50129 = y;
        double r50130 = z;
        double r50131 = r50129 - r50130;
        double r50132 = r50128 * r50131;
        double r50133 = t;
        double r50134 = r50133 - r50130;
        double r50135 = r50132 / r50134;
        return r50135;
}


double f_of(float x, float y, float z, float t) {
        float r50136 = z;
        float r50137 = -1.8904526391866433e-46;
        bool r50138 = r50136 <= r50137;
        float r50139 = x;
        float r50140 = 1;
        float r50141 = r50139 / r50140;
        float r50142 = y;
        float r50143 = r50142 - r50136;
        float r50144 = t;
        float r50145 = r50144 - r50136;
        float r50146 = r50143 / r50145;
        float r50147 = r50141 * r50146;
        float r50148 = -2.2005782380220625e-285;
        bool r50149 = r50136 <= r50148;
        float r50150 = r50139 * r50143;
        float r50151 = r50140 / r50145;
        float r50152 = r50150 * r50151;
        float r50153 = r50145 / r50143;
        float r50154 = r50139 / r50153;
        float r50155 = r50149 ? r50152 : r50154;
        float r50156 = r50138 ? r50147 : r50155;
        return r50156;
}

double f_od(double x, double y, double z, double t) {
        double r50157 = z;
        double r50158 = -1.8904526391866433e-46;
        bool r50159 = r50157 <= r50158;
        double r50160 = x;
        double r50161 = 1;
        double r50162 = r50160 / r50161;
        double r50163 = y;
        double r50164 = r50163 - r50157;
        double r50165 = t;
        double r50166 = r50165 - r50157;
        double r50167 = r50164 / r50166;
        double r50168 = r50162 * r50167;
        double r50169 = -2.2005782380220625e-285;
        bool r50170 = r50157 <= r50169;
        double r50171 = r50160 * r50164;
        double r50172 = r50161 / r50166;
        double r50173 = r50171 * r50172;
        double r50174 = r50166 / r50164;
        double r50175 = r50160 / r50174;
        double r50176 = r50170 ? r50173 : r50175;
        double r50177 = r50159 ? r50168 : r50176;
        return r50177;
}

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 r50178, r50179, r50180, r50181, r50182, r50183, r50184, r50185;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50178);
        mpfr_init(r50179);
        mpfr_init(r50180);
        mpfr_init(r50181);
        mpfr_init(r50182);
        mpfr_init(r50183);
        mpfr_init(r50184);
        mpfr_init(r50185);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r50178, x, MPFR_RNDN);
        mpfr_set_d(r50179, y, MPFR_RNDN);
        mpfr_set_d(r50180, z, MPFR_RNDN);
        mpfr_sub(r50181, r50179, r50180, MPFR_RNDN);
        mpfr_mul(r50182, r50178, r50181, MPFR_RNDN);
        mpfr_set_d(r50183, t, MPFR_RNDN);
        mpfr_sub(r50184, r50183, r50180, MPFR_RNDN);
        mpfr_div(r50185, r50182, r50184, MPFR_RNDN);
        return mpfr_get_d(r50185, MPFR_RNDN);
}

static mpfr_t r50186, r50187, r50188, r50189, r50190, r50191, r50192, r50193, r50194, r50195, r50196, r50197, r50198, r50199, r50200, r50201, r50202, r50203, r50204, r50205, r50206;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50186);
        mpfr_init_set_str(r50187, "-1.8904526391866433e-46", 10, MPFR_RNDN);
        mpfr_init(r50188);
        mpfr_init(r50189);
        mpfr_init_set_str(r50190, "1", 10, MPFR_RNDN);
        mpfr_init(r50191);
        mpfr_init(r50192);
        mpfr_init(r50193);
        mpfr_init(r50194);
        mpfr_init(r50195);
        mpfr_init(r50196);
        mpfr_init(r50197);
        mpfr_init_set_str(r50198, "-2.2005782380220625e-285", 10, MPFR_RNDN);
        mpfr_init(r50199);
        mpfr_init(r50200);
        mpfr_init(r50201);
        mpfr_init(r50202);
        mpfr_init(r50203);
        mpfr_init(r50204);
        mpfr_init(r50205);
        mpfr_init(r50206);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r50186, z, MPFR_RNDN);
        ;
        mpfr_set_si(r50188, mpfr_cmp(r50186, r50187) <= 0, MPFR_RNDN);
        mpfr_set_d(r50189, x, MPFR_RNDN);
        ;
        mpfr_div(r50191, r50189, r50190, MPFR_RNDN);
        mpfr_set_d(r50192, y, MPFR_RNDN);
        mpfr_sub(r50193, r50192, r50186, MPFR_RNDN);
        mpfr_set_d(r50194, t, MPFR_RNDN);
        mpfr_sub(r50195, r50194, r50186, MPFR_RNDN);
        mpfr_div(r50196, r50193, r50195, MPFR_RNDN);
        mpfr_mul(r50197, r50191, r50196, MPFR_RNDN);
        ;
        mpfr_set_si(r50199, mpfr_cmp(r50186, r50198) <= 0, MPFR_RNDN);
        mpfr_mul(r50200, r50189, r50193, MPFR_RNDN);
        mpfr_div(r50201, r50190, r50195, MPFR_RNDN);
        mpfr_mul(r50202, r50200, r50201, MPFR_RNDN);
        mpfr_div(r50203, r50195, r50193, MPFR_RNDN);
        mpfr_div(r50204, r50189, r50203, MPFR_RNDN);
        if (mpfr_get_si(r50199, MPFR_RNDN)) { mpfr_set(r50205, r50202, MPFR_RNDN); } else { mpfr_set(r50205, r50204, MPFR_RNDN); };
        if (mpfr_get_si(r50188, MPFR_RNDN)) { mpfr_set(r50206, r50197, MPFR_RNDN); } else { mpfr_set(r50206, r50205, MPFR_RNDN); };
        return mpfr_get_d(r50206, MPFR_RNDN);
}

static mpfr_t r50207, r50208, r50209, r50210, r50211, r50212, r50213, r50214, r50215, r50216, r50217, r50218, r50219, r50220, r50221, r50222, r50223, r50224, r50225, r50226, r50227;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50207);
        mpfr_init_set_str(r50208, "-1.8904526391866433e-46", 10, MPFR_RNDN);
        mpfr_init(r50209);
        mpfr_init(r50210);
        mpfr_init_set_str(r50211, "1", 10, MPFR_RNDN);
        mpfr_init(r50212);
        mpfr_init(r50213);
        mpfr_init(r50214);
        mpfr_init(r50215);
        mpfr_init(r50216);
        mpfr_init(r50217);
        mpfr_init(r50218);
        mpfr_init_set_str(r50219, "-2.2005782380220625e-285", 10, MPFR_RNDN);
        mpfr_init(r50220);
        mpfr_init(r50221);
        mpfr_init(r50222);
        mpfr_init(r50223);
        mpfr_init(r50224);
        mpfr_init(r50225);
        mpfr_init(r50226);
        mpfr_init(r50227);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r50207, z, MPFR_RNDN);
        ;
        mpfr_set_si(r50209, mpfr_cmp(r50207, r50208) <= 0, MPFR_RNDN);
        mpfr_set_d(r50210, x, MPFR_RNDN);
        ;
        mpfr_div(r50212, r50210, r50211, MPFR_RNDN);
        mpfr_set_d(r50213, y, MPFR_RNDN);
        mpfr_sub(r50214, r50213, r50207, MPFR_RNDN);
        mpfr_set_d(r50215, t, MPFR_RNDN);
        mpfr_sub(r50216, r50215, r50207, MPFR_RNDN);
        mpfr_div(r50217, r50214, r50216, MPFR_RNDN);
        mpfr_mul(r50218, r50212, r50217, MPFR_RNDN);
        ;
        mpfr_set_si(r50220, mpfr_cmp(r50207, r50219) <= 0, MPFR_RNDN);
        mpfr_mul(r50221, r50210, r50214, MPFR_RNDN);
        mpfr_div(r50222, r50211, r50216, MPFR_RNDN);
        mpfr_mul(r50223, r50221, r50222, MPFR_RNDN);
        mpfr_div(r50224, r50216, r50214, MPFR_RNDN);
        mpfr_div(r50225, r50210, r50224, MPFR_RNDN);
        if (mpfr_get_si(r50220, MPFR_RNDN)) { mpfr_set(r50226, r50223, MPFR_RNDN); } else { mpfr_set(r50226, r50225, MPFR_RNDN); };
        if (mpfr_get_si(r50209, MPFR_RNDN)) { mpfr_set(r50227, r50218, MPFR_RNDN); } else { mpfr_set(r50227, r50226, MPFR_RNDN); };
        return mpfr_get_d(r50227, MPFR_RNDN);
}

