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

char *name = "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3";

double f_if(float x, float y, float z) {
        float r52123 = x;
        float r52124 = y;
        float r52125 = z;
        float r52126 = r52124 - r52125;
        float r52127 = 1.0;
        float r52128 = r52126 + r52127;
        float r52129 = r52123 * r52128;
        float r52130 = r52129 / r52125;
        return r52130;
}

double f_id(double x, double y, double z) {
        double r52131 = x;
        double r52132 = y;
        double r52133 = z;
        double r52134 = r52132 - r52133;
        double r52135 = 1.0;
        double r52136 = r52134 + r52135;
        double r52137 = r52131 * r52136;
        double r52138 = r52137 / r52133;
        return r52138;
}


double f_of(float x, float y, float z) {
        float r52139 = x;
        float r52140 = y;
        float r52141 = z;
        float r52142 = r52140 - r52141;
        float r52143 = 1.0;
        float r52144 = r52142 + r52143;
        float r52145 = r52139 * r52144;
        float r52146 = r52145 / r52141;
        float r52147 = -1.293154407109218e+92;
        bool r52148 = r52146 <= r52147;
        float r52149 = r52139 / r52141;
        float r52150 = r52140 + r52143;
        float r52151 = r52149 * r52150;
        float r52152 = r52151 - r52139;
        float r52153 = 4.04716974457547e-37;
        bool r52154 = r52146 <= r52153;
        float r52155 = r52141 / r52144;
        float r52156 = r52139 / r52155;
        float r52157 = r52154 ? r52156 : r52152;
        float r52158 = r52148 ? r52152 : r52157;
        return r52158;
}

double f_od(double x, double y, double z) {
        double r52159 = x;
        double r52160 = y;
        double r52161 = z;
        double r52162 = r52160 - r52161;
        double r52163 = 1.0;
        double r52164 = r52162 + r52163;
        double r52165 = r52159 * r52164;
        double r52166 = r52165 / r52161;
        double r52167 = -1.293154407109218e+92;
        bool r52168 = r52166 <= r52167;
        double r52169 = r52159 / r52161;
        double r52170 = r52160 + r52163;
        double r52171 = r52169 * r52170;
        double r52172 = r52171 - r52159;
        double r52173 = 4.04716974457547e-37;
        bool r52174 = r52166 <= r52173;
        double r52175 = r52161 / r52164;
        double r52176 = r52159 / r52175;
        double r52177 = r52174 ? r52176 : r52172;
        double r52178 = r52168 ? r52172 : r52177;
        return r52178;
}

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 r52179, r52180, r52181, r52182, r52183, r52184, r52185, r52186;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r52179);
        mpfr_init(r52180);
        mpfr_init(r52181);
        mpfr_init(r52182);
        mpfr_init_set_str(r52183, "1.0", 10, MPFR_RNDN);
        mpfr_init(r52184);
        mpfr_init(r52185);
        mpfr_init(r52186);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r52179, x, MPFR_RNDN);
        mpfr_set_d(r52180, y, MPFR_RNDN);
        mpfr_set_d(r52181, z, MPFR_RNDN);
        mpfr_sub(r52182, r52180, r52181, MPFR_RNDN);
        ;
        mpfr_add(r52184, r52182, r52183, MPFR_RNDN);
        mpfr_mul(r52185, r52179, r52184, MPFR_RNDN);
        mpfr_div(r52186, r52185, r52181, MPFR_RNDN);
        return mpfr_get_d(r52186, MPFR_RNDN);
}

static mpfr_t r52187, r52188, r52189, r52190, r52191, r52192, r52193, r52194, r52195, r52196, r52197, r52198, r52199, r52200, r52201, r52202, r52203, r52204, r52205, r52206;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52187);
        mpfr_init(r52188);
        mpfr_init(r52189);
        mpfr_init(r52190);
        mpfr_init_set_str(r52191, "1.0", 10, MPFR_RNDN);
        mpfr_init(r52192);
        mpfr_init(r52193);
        mpfr_init(r52194);
        mpfr_init_set_str(r52195, "-1.293154407109218e+92", 10, MPFR_RNDN);
        mpfr_init(r52196);
        mpfr_init(r52197);
        mpfr_init(r52198);
        mpfr_init(r52199);
        mpfr_init(r52200);
        mpfr_init_set_str(r52201, "4.04716974457547e-37", 10, MPFR_RNDN);
        mpfr_init(r52202);
        mpfr_init(r52203);
        mpfr_init(r52204);
        mpfr_init(r52205);
        mpfr_init(r52206);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r52187, x, MPFR_RNDN);
        mpfr_set_d(r52188, y, MPFR_RNDN);
        mpfr_set_d(r52189, z, MPFR_RNDN);
        mpfr_sub(r52190, r52188, r52189, MPFR_RNDN);
        ;
        mpfr_add(r52192, r52190, r52191, MPFR_RNDN);
        mpfr_mul(r52193, r52187, r52192, MPFR_RNDN);
        mpfr_div(r52194, r52193, r52189, MPFR_RNDN);
        ;
        mpfr_set_si(r52196, mpfr_cmp(r52194, r52195) <= 0, MPFR_RNDN);
        mpfr_div(r52197, r52187, r52189, MPFR_RNDN);
        mpfr_add(r52198, r52188, r52191, MPFR_RNDN);
        mpfr_mul(r52199, r52197, r52198, MPFR_RNDN);
        mpfr_sub(r52200, r52199, r52187, MPFR_RNDN);
        ;
        mpfr_set_si(r52202, mpfr_cmp(r52194, r52201) <= 0, MPFR_RNDN);
        mpfr_div(r52203, r52189, r52192, MPFR_RNDN);
        mpfr_div(r52204, r52187, r52203, MPFR_RNDN);
        if (mpfr_get_si(r52202, MPFR_RNDN)) { mpfr_set(r52205, r52204, MPFR_RNDN); } else { mpfr_set(r52205, r52200, MPFR_RNDN); };
        if (mpfr_get_si(r52196, MPFR_RNDN)) { mpfr_set(r52206, r52200, MPFR_RNDN); } else { mpfr_set(r52206, r52205, MPFR_RNDN); };
        return mpfr_get_d(r52206, MPFR_RNDN);
}

static mpfr_t r52207, r52208, r52209, r52210, r52211, r52212, r52213, r52214, r52215, r52216, r52217, r52218, r52219, r52220, r52221, r52222, r52223, r52224, r52225, r52226;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52207);
        mpfr_init(r52208);
        mpfr_init(r52209);
        mpfr_init(r52210);
        mpfr_init_set_str(r52211, "1.0", 10, MPFR_RNDN);
        mpfr_init(r52212);
        mpfr_init(r52213);
        mpfr_init(r52214);
        mpfr_init_set_str(r52215, "-1.293154407109218e+92", 10, MPFR_RNDN);
        mpfr_init(r52216);
        mpfr_init(r52217);
        mpfr_init(r52218);
        mpfr_init(r52219);
        mpfr_init(r52220);
        mpfr_init_set_str(r52221, "4.04716974457547e-37", 10, MPFR_RNDN);
        mpfr_init(r52222);
        mpfr_init(r52223);
        mpfr_init(r52224);
        mpfr_init(r52225);
        mpfr_init(r52226);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r52207, x, MPFR_RNDN);
        mpfr_set_d(r52208, y, MPFR_RNDN);
        mpfr_set_d(r52209, z, MPFR_RNDN);
        mpfr_sub(r52210, r52208, r52209, MPFR_RNDN);
        ;
        mpfr_add(r52212, r52210, r52211, MPFR_RNDN);
        mpfr_mul(r52213, r52207, r52212, MPFR_RNDN);
        mpfr_div(r52214, r52213, r52209, MPFR_RNDN);
        ;
        mpfr_set_si(r52216, mpfr_cmp(r52214, r52215) <= 0, MPFR_RNDN);
        mpfr_div(r52217, r52207, r52209, MPFR_RNDN);
        mpfr_add(r52218, r52208, r52211, MPFR_RNDN);
        mpfr_mul(r52219, r52217, r52218, MPFR_RNDN);
        mpfr_sub(r52220, r52219, r52207, MPFR_RNDN);
        ;
        mpfr_set_si(r52222, mpfr_cmp(r52214, r52221) <= 0, MPFR_RNDN);
        mpfr_div(r52223, r52209, r52212, MPFR_RNDN);
        mpfr_div(r52224, r52207, r52223, MPFR_RNDN);
        if (mpfr_get_si(r52222, MPFR_RNDN)) { mpfr_set(r52225, r52224, MPFR_RNDN); } else { mpfr_set(r52225, r52220, MPFR_RNDN); };
        if (mpfr_get_si(r52216, MPFR_RNDN)) { mpfr_set(r52226, r52220, MPFR_RNDN); } else { mpfr_set(r52226, r52225, MPFR_RNDN); };
        return mpfr_get_d(r52226, MPFR_RNDN);
}

