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

char *name = "Diagrams.TwoD.Arc:arcBetween from diagrams-lib-1.3.0.3";

double f_if(float x, float y) {
        float r50123 = x;
        float r50124 = r50123 * r50123;
        float r50125 = y;
        float r50126 = 4.0f;
        float r50127 = r50125 * r50126;
        float r50128 = r50127 * r50125;
        float r50129 = r50124 - r50128;
        float r50130 = r50124 + r50128;
        float r50131 = r50129 / r50130;
        return r50131;
}

double f_id(double x, double y) {
        double r50132 = x;
        double r50133 = r50132 * r50132;
        double r50134 = y;
        double r50135 = 4.0;
        double r50136 = r50134 * r50135;
        double r50137 = r50136 * r50134;
        double r50138 = r50133 - r50137;
        double r50139 = r50133 + r50137;
        double r50140 = r50138 / r50139;
        return r50140;
}


double f_of(float x, float y) {
        float r50141 = x;
        float r50142 = r50141 * r50141;
        float r50143 = y;
        float r50144 = 4.0f;
        float r50145 = r50143 * r50144;
        float r50146 = r50145 * r50143;
        float r50147 = r50142 - r50146;
        float r50148 = r50142 + r50146;
        float r50149 = r50147 / r50148;
        float r50150 = 0.99995974222954f;
        bool r50151 = r50149 <= r50150;
        float r50152 = r50143 * r50143;
        float r50153 = r50152 * r50144;
        float r50154 = r50142 + r50153;
        float r50155 = r50142 / r50154;
        float r50156 = r50153 / r50154;
        float r50157 = r50155 - r50156;
        float r50158 = 1.0f;
        float r50159 = r50151 ? r50157 : r50158;
        return r50159;
}

double f_od(double x, double y) {
        double r50160 = x;
        double r50161 = r50160 * r50160;
        double r50162 = y;
        double r50163 = 4.0;
        double r50164 = r50162 * r50163;
        double r50165 = r50164 * r50162;
        double r50166 = r50161 - r50165;
        double r50167 = r50161 + r50165;
        double r50168 = r50166 / r50167;
        double r50169 = 0.99995974222954;
        bool r50170 = r50168 <= r50169;
        double r50171 = r50162 * r50162;
        double r50172 = r50171 * r50163;
        double r50173 = r50161 + r50172;
        double r50174 = r50161 / r50173;
        double r50175 = r50172 / r50173;
        double r50176 = r50174 - r50175;
        double r50177 = 1.0;
        double r50178 = r50170 ? r50176 : r50177;
        return r50178;
}

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

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r50179);
        mpfr_init(r50180);
        mpfr_init(r50181);
        mpfr_init_set_str(r50182, "4.0", 10, MPFR_RNDN);
        mpfr_init(r50183);
        mpfr_init(r50184);
        mpfr_init(r50185);
        mpfr_init(r50186);
        mpfr_init(r50187);
}

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

static mpfr_t 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(144);
        mpfr_init(r50188);
        mpfr_init(r50189);
        mpfr_init(r50190);
        mpfr_init_set_str(r50191, "4.0", 10, MPFR_RNDN);
        mpfr_init(r50192);
        mpfr_init(r50193);
        mpfr_init(r50194);
        mpfr_init(r50195);
        mpfr_init(r50196);
        mpfr_init_set_str(r50197, "0.99995974222954", 10, MPFR_RNDN);
        mpfr_init(r50198);
        mpfr_init(r50199);
        mpfr_init(r50200);
        mpfr_init(r50201);
        mpfr_init(r50202);
        mpfr_init(r50203);
        mpfr_init(r50204);
        mpfr_init_set_str(r50205, "1", 10, MPFR_RNDN);
        mpfr_init(r50206);
}

double f_fm(double x, double y) {
        mpfr_set_d(r50188, x, MPFR_RNDN);
        mpfr_mul(r50189, r50188, r50188, MPFR_RNDN);
        mpfr_set_d(r50190, y, MPFR_RNDN);
        ;
        mpfr_mul(r50192, r50190, r50191, MPFR_RNDN);
        mpfr_mul(r50193, r50192, r50190, MPFR_RNDN);
        mpfr_sub(r50194, r50189, r50193, MPFR_RNDN);
        mpfr_add(r50195, r50189, r50193, MPFR_RNDN);
        mpfr_div(r50196, r50194, r50195, MPFR_RNDN);
        ;
        mpfr_set_si(r50198, mpfr_cmp(r50196, r50197) <= 0, MPFR_RNDN);
        mpfr_sqr(r50199, r50190, MPFR_RNDN);
        mpfr_mul(r50200, r50199, r50191, MPFR_RNDN);
        mpfr_add(r50201, r50189, r50200, MPFR_RNDN);
        mpfr_div(r50202, r50189, r50201, MPFR_RNDN);
        mpfr_div(r50203, r50200, r50201, MPFR_RNDN);
        mpfr_sub(r50204, r50202, r50203, MPFR_RNDN);
        ;
        if (mpfr_get_si(r50198, MPFR_RNDN)) { mpfr_set(r50206, r50204, 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;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r50207);
        mpfr_init(r50208);
        mpfr_init(r50209);
        mpfr_init_set_str(r50210, "4.0", 10, MPFR_RNDN);
        mpfr_init(r50211);
        mpfr_init(r50212);
        mpfr_init(r50213);
        mpfr_init(r50214);
        mpfr_init(r50215);
        mpfr_init_set_str(r50216, "0.99995974222954", 10, MPFR_RNDN);
        mpfr_init(r50217);
        mpfr_init(r50218);
        mpfr_init(r50219);
        mpfr_init(r50220);
        mpfr_init(r50221);
        mpfr_init(r50222);
        mpfr_init(r50223);
        mpfr_init_set_str(r50224, "1", 10, MPFR_RNDN);
        mpfr_init(r50225);
}

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

