#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 r52317 = x;
        float r52318 = y;
        float r52319 = z;
        float r52320 = r52318 - r52319;
        float r52321 = 1.0;
        float r52322 = r52320 + r52321;
        float r52323 = r52317 * r52322;
        float r52324 = r52323 / r52319;
        return r52324;
}

double f_id(double x, double y, double z) {
        double r52325 = x;
        double r52326 = y;
        double r52327 = z;
        double r52328 = r52326 - r52327;
        double r52329 = 1.0;
        double r52330 = r52328 + r52329;
        double r52331 = r52325 * r52330;
        double r52332 = r52331 / r52327;
        return r52332;
}


double f_of(float x, float y, float z) {
        float r52333 = x;
        float r52334 = y;
        float r52335 = z;
        float r52336 = r52334 - r52335;
        float r52337 = 1.0;
        float r52338 = r52336 + r52337;
        float r52339 = r52333 * r52338;
        float r52340 = r52339 / r52335;
        float r52341 = -1.293154407109218e+92;
        bool r52342 = r52340 <= r52341;
        float r52343 = r52333 / r52335;
        float r52344 = r52334 + r52337;
        float r52345 = r52343 * r52344;
        float r52346 = r52345 - r52333;
        float r52347 = 4.04716974457547e-37;
        bool r52348 = r52340 <= r52347;
        float r52349 = r52335 / r52338;
        float r52350 = r52333 / r52349;
        float r52351 = r52348 ? r52350 : r52346;
        float r52352 = r52342 ? r52346 : r52351;
        return r52352;
}

double f_od(double x, double y, double z) {
        double r52353 = x;
        double r52354 = y;
        double r52355 = z;
        double r52356 = r52354 - r52355;
        double r52357 = 1.0;
        double r52358 = r52356 + r52357;
        double r52359 = r52353 * r52358;
        double r52360 = r52359 / r52355;
        double r52361 = -1.293154407109218e+92;
        bool r52362 = r52360 <= r52361;
        double r52363 = r52353 / r52355;
        double r52364 = r52354 + r52357;
        double r52365 = r52363 * r52364;
        double r52366 = r52365 - r52353;
        double r52367 = 4.04716974457547e-37;
        bool r52368 = r52360 <= r52367;
        double r52369 = r52355 / r52358;
        double r52370 = r52353 / r52369;
        double r52371 = r52368 ? r52370 : r52366;
        double r52372 = r52362 ? r52366 : r52371;
        return r52372;
}

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 r52373, r52374, r52375, r52376, r52377, r52378, r52379, r52380;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r52373);
        mpfr_init(r52374);
        mpfr_init(r52375);
        mpfr_init(r52376);
        mpfr_init_set_str(r52377, "1.0", 10, MPFR_RNDN);
        mpfr_init(r52378);
        mpfr_init(r52379);
        mpfr_init(r52380);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r52373, x, MPFR_RNDN);
        mpfr_set_d(r52374, y, MPFR_RNDN);
        mpfr_set_d(r52375, z, MPFR_RNDN);
        mpfr_sub(r52376, r52374, r52375, MPFR_RNDN);
        ;
        mpfr_add(r52378, r52376, r52377, MPFR_RNDN);
        mpfr_mul(r52379, r52373, r52378, MPFR_RNDN);
        mpfr_div(r52380, r52379, r52375, MPFR_RNDN);
        return mpfr_get_d(r52380, MPFR_RNDN);
}

static mpfr_t r52381, r52382, r52383, r52384, r52385, r52386, r52387, r52388, r52389, r52390, r52391, r52392, r52393, r52394, r52395, r52396, r52397, r52398, r52399, r52400;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52381);
        mpfr_init(r52382);
        mpfr_init(r52383);
        mpfr_init(r52384);
        mpfr_init_set_str(r52385, "1.0", 10, MPFR_RNDN);
        mpfr_init(r52386);
        mpfr_init(r52387);
        mpfr_init(r52388);
        mpfr_init_set_str(r52389, "-1.293154407109218e+92", 10, MPFR_RNDN);
        mpfr_init(r52390);
        mpfr_init(r52391);
        mpfr_init(r52392);
        mpfr_init(r52393);
        mpfr_init(r52394);
        mpfr_init_set_str(r52395, "4.04716974457547e-37", 10, MPFR_RNDN);
        mpfr_init(r52396);
        mpfr_init(r52397);
        mpfr_init(r52398);
        mpfr_init(r52399);
        mpfr_init(r52400);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r52381, x, MPFR_RNDN);
        mpfr_set_d(r52382, y, MPFR_RNDN);
        mpfr_set_d(r52383, z, MPFR_RNDN);
        mpfr_sub(r52384, r52382, r52383, MPFR_RNDN);
        ;
        mpfr_add(r52386, r52384, r52385, MPFR_RNDN);
        mpfr_mul(r52387, r52381, r52386, MPFR_RNDN);
        mpfr_div(r52388, r52387, r52383, MPFR_RNDN);
        ;
        mpfr_set_si(r52390, mpfr_cmp(r52388, r52389) <= 0, MPFR_RNDN);
        mpfr_div(r52391, r52381, r52383, MPFR_RNDN);
        mpfr_add(r52392, r52382, r52385, MPFR_RNDN);
        mpfr_mul(r52393, r52391, r52392, MPFR_RNDN);
        mpfr_sub(r52394, r52393, r52381, MPFR_RNDN);
        ;
        mpfr_set_si(r52396, mpfr_cmp(r52388, r52395) <= 0, MPFR_RNDN);
        mpfr_div(r52397, r52383, r52386, MPFR_RNDN);
        mpfr_div(r52398, r52381, r52397, MPFR_RNDN);
        if (mpfr_get_si(r52396, MPFR_RNDN)) { mpfr_set(r52399, r52398, MPFR_RNDN); } else { mpfr_set(r52399, r52394, MPFR_RNDN); };
        if (mpfr_get_si(r52390, MPFR_RNDN)) { mpfr_set(r52400, r52394, MPFR_RNDN); } else { mpfr_set(r52400, r52399, MPFR_RNDN); };
        return mpfr_get_d(r52400, MPFR_RNDN);
}

static mpfr_t r52401, r52402, r52403, r52404, r52405, r52406, r52407, r52408, r52409, r52410, r52411, r52412, r52413, r52414, r52415, r52416, r52417, r52418, r52419, r52420;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52401);
        mpfr_init(r52402);
        mpfr_init(r52403);
        mpfr_init(r52404);
        mpfr_init_set_str(r52405, "1.0", 10, MPFR_RNDN);
        mpfr_init(r52406);
        mpfr_init(r52407);
        mpfr_init(r52408);
        mpfr_init_set_str(r52409, "-1.293154407109218e+92", 10, MPFR_RNDN);
        mpfr_init(r52410);
        mpfr_init(r52411);
        mpfr_init(r52412);
        mpfr_init(r52413);
        mpfr_init(r52414);
        mpfr_init_set_str(r52415, "4.04716974457547e-37", 10, MPFR_RNDN);
        mpfr_init(r52416);
        mpfr_init(r52417);
        mpfr_init(r52418);
        mpfr_init(r52419);
        mpfr_init(r52420);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r52401, x, MPFR_RNDN);
        mpfr_set_d(r52402, y, MPFR_RNDN);
        mpfr_set_d(r52403, z, MPFR_RNDN);
        mpfr_sub(r52404, r52402, r52403, MPFR_RNDN);
        ;
        mpfr_add(r52406, r52404, r52405, MPFR_RNDN);
        mpfr_mul(r52407, r52401, r52406, MPFR_RNDN);
        mpfr_div(r52408, r52407, r52403, MPFR_RNDN);
        ;
        mpfr_set_si(r52410, mpfr_cmp(r52408, r52409) <= 0, MPFR_RNDN);
        mpfr_div(r52411, r52401, r52403, MPFR_RNDN);
        mpfr_add(r52412, r52402, r52405, MPFR_RNDN);
        mpfr_mul(r52413, r52411, r52412, MPFR_RNDN);
        mpfr_sub(r52414, r52413, r52401, MPFR_RNDN);
        ;
        mpfr_set_si(r52416, mpfr_cmp(r52408, r52415) <= 0, MPFR_RNDN);
        mpfr_div(r52417, r52403, r52406, MPFR_RNDN);
        mpfr_div(r52418, r52401, r52417, MPFR_RNDN);
        if (mpfr_get_si(r52416, MPFR_RNDN)) { mpfr_set(r52419, r52418, MPFR_RNDN); } else { mpfr_set(r52419, r52414, MPFR_RNDN); };
        if (mpfr_get_si(r52410, MPFR_RNDN)) { mpfr_set(r52420, r52414, MPFR_RNDN); } else { mpfr_set(r52420, r52419, MPFR_RNDN); };
        return mpfr_get_d(r52420, MPFR_RNDN);
}

