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

char *name = "Complex division, real part";

double f_if(float a, float b, float c, float d) {
        float r58136 = a;
        float r58137 = c;
        float r58138 = r58136 * r58137;
        float r58139 = b;
        float r58140 = d;
        float r58141 = r58139 * r58140;
        float r58142 = r58138 + r58141;
        float r58143 = r58137 * r58137;
        float r58144 = r58140 * r58140;
        float r58145 = r58143 + r58144;
        float r58146 = r58142 / r58145;
        return r58146;
}

double f_id(double a, double b, double c, double d) {
        double r58147 = a;
        double r58148 = c;
        double r58149 = r58147 * r58148;
        double r58150 = b;
        double r58151 = d;
        double r58152 = r58150 * r58151;
        double r58153 = r58149 + r58152;
        double r58154 = r58148 * r58148;
        double r58155 = r58151 * r58151;
        double r58156 = r58154 + r58155;
        double r58157 = r58153 / r58156;
        return r58157;
}


double f_of(float a, float b, float c, float d) {
        float r58158 = c;
        float r58159 = 3.215973189848367e+60;
        bool r58160 = r58158 <= r58159;
        float r58161 = 1;
        float r58162 = r58158 * r58158;
        float r58163 = d;
        float r58164 = r58163 * r58163;
        float r58165 = r58162 + r58164;
        float r58166 = sqrt(r58165);
        float r58167 = r58161 / r58166;
        float r58168 = a;
        float r58169 = r58168 * r58158;
        float r58170 = b;
        float r58171 = r58170 * r58163;
        float r58172 = r58169 + r58171;
        float r58173 = r58172 / r58166;
        float r58174 = r58167 * r58173;
        float r58175 = r58164 + r58162;
        float r58176 = sqrt(r58175);
        float r58177 = r58168 / r58176;
        float r58178 = r58160 ? r58174 : r58177;
        return r58178;
}

double f_od(double a, double b, double c, double d) {
        double r58179 = c;
        double r58180 = 3.215973189848367e+60;
        bool r58181 = r58179 <= r58180;
        double r58182 = 1;
        double r58183 = r58179 * r58179;
        double r58184 = d;
        double r58185 = r58184 * r58184;
        double r58186 = r58183 + r58185;
        double r58187 = sqrt(r58186);
        double r58188 = r58182 / r58187;
        double r58189 = a;
        double r58190 = r58189 * r58179;
        double r58191 = b;
        double r58192 = r58191 * r58184;
        double r58193 = r58190 + r58192;
        double r58194 = r58193 / r58187;
        double r58195 = r58188 * r58194;
        double r58196 = r58185 + r58183;
        double r58197 = sqrt(r58196);
        double r58198 = r58189 / r58197;
        double r58199 = r58181 ? r58195 : r58198;
        return r58199;
}

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 r58200, r58201, r58202, r58203, r58204, r58205, r58206, r58207, r58208, r58209, r58210;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r58200);
        mpfr_init(r58201);
        mpfr_init(r58202);
        mpfr_init(r58203);
        mpfr_init(r58204);
        mpfr_init(r58205);
        mpfr_init(r58206);
        mpfr_init(r58207);
        mpfr_init(r58208);
        mpfr_init(r58209);
        mpfr_init(r58210);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r58200, a, MPFR_RNDN);
        mpfr_set_d(r58201, c, MPFR_RNDN);
        mpfr_mul(r58202, r58200, r58201, MPFR_RNDN);
        mpfr_set_d(r58203, b, MPFR_RNDN);
        mpfr_set_d(r58204, d, MPFR_RNDN);
        mpfr_mul(r58205, r58203, r58204, MPFR_RNDN);
        mpfr_add(r58206, r58202, r58205, MPFR_RNDN);
        mpfr_mul(r58207, r58201, r58201, MPFR_RNDN);
        mpfr_mul(r58208, r58204, r58204, MPFR_RNDN);
        mpfr_add(r58209, r58207, r58208, MPFR_RNDN);
        mpfr_div(r58210, r58206, r58209, MPFR_RNDN);
        return mpfr_get_d(r58210, MPFR_RNDN);
}

static mpfr_t r58211, r58212, r58213, r58214, r58215, r58216, r58217, r58218, r58219, r58220, r58221, r58222, r58223, r58224, r58225, r58226, r58227, r58228, r58229, r58230, r58231;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58211);
        mpfr_init_set_str(r58212, "3.215973189848367e+60", 10, MPFR_RNDN);
        mpfr_init(r58213);
        mpfr_init_set_str(r58214, "1", 10, MPFR_RNDN);
        mpfr_init(r58215);
        mpfr_init(r58216);
        mpfr_init(r58217);
        mpfr_init(r58218);
        mpfr_init(r58219);
        mpfr_init(r58220);
        mpfr_init(r58221);
        mpfr_init(r58222);
        mpfr_init(r58223);
        mpfr_init(r58224);
        mpfr_init(r58225);
        mpfr_init(r58226);
        mpfr_init(r58227);
        mpfr_init(r58228);
        mpfr_init(r58229);
        mpfr_init(r58230);
        mpfr_init(r58231);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r58211, c, MPFR_RNDN);
        ;
        mpfr_set_si(r58213, mpfr_cmp(r58211, r58212) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r58215, r58211, r58211, MPFR_RNDN);
        mpfr_set_d(r58216, d, MPFR_RNDN);
        mpfr_mul(r58217, r58216, r58216, MPFR_RNDN);
        mpfr_add(r58218, r58215, r58217, MPFR_RNDN);
        mpfr_sqrt(r58219, r58218, MPFR_RNDN);
        mpfr_div(r58220, r58214, r58219, MPFR_RNDN);
        mpfr_set_d(r58221, a, MPFR_RNDN);
        mpfr_mul(r58222, r58221, r58211, MPFR_RNDN);
        mpfr_set_d(r58223, b, MPFR_RNDN);
        mpfr_mul(r58224, r58223, r58216, MPFR_RNDN);
        mpfr_add(r58225, r58222, r58224, MPFR_RNDN);
        mpfr_div(r58226, r58225, r58219, MPFR_RNDN);
        mpfr_mul(r58227, r58220, r58226, MPFR_RNDN);
        mpfr_add(r58228, r58217, r58215, MPFR_RNDN);
        mpfr_sqrt(r58229, r58228, MPFR_RNDN);
        mpfr_div(r58230, r58221, r58229, MPFR_RNDN);
        if (mpfr_get_si(r58213, MPFR_RNDN)) { mpfr_set(r58231, r58227, MPFR_RNDN); } else { mpfr_set(r58231, r58230, MPFR_RNDN); };
        return mpfr_get_d(r58231, MPFR_RNDN);
}

static mpfr_t r58232, r58233, r58234, r58235, r58236, r58237, r58238, r58239, r58240, r58241, r58242, r58243, r58244, r58245, r58246, r58247, r58248, r58249, r58250, r58251, r58252;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58232);
        mpfr_init_set_str(r58233, "3.215973189848367e+60", 10, MPFR_RNDN);
        mpfr_init(r58234);
        mpfr_init_set_str(r58235, "1", 10, MPFR_RNDN);
        mpfr_init(r58236);
        mpfr_init(r58237);
        mpfr_init(r58238);
        mpfr_init(r58239);
        mpfr_init(r58240);
        mpfr_init(r58241);
        mpfr_init(r58242);
        mpfr_init(r58243);
        mpfr_init(r58244);
        mpfr_init(r58245);
        mpfr_init(r58246);
        mpfr_init(r58247);
        mpfr_init(r58248);
        mpfr_init(r58249);
        mpfr_init(r58250);
        mpfr_init(r58251);
        mpfr_init(r58252);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r58232, c, MPFR_RNDN);
        ;
        mpfr_set_si(r58234, mpfr_cmp(r58232, r58233) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r58236, r58232, r58232, MPFR_RNDN);
        mpfr_set_d(r58237, d, MPFR_RNDN);
        mpfr_mul(r58238, r58237, r58237, MPFR_RNDN);
        mpfr_add(r58239, r58236, r58238, MPFR_RNDN);
        mpfr_sqrt(r58240, r58239, MPFR_RNDN);
        mpfr_div(r58241, r58235, r58240, MPFR_RNDN);
        mpfr_set_d(r58242, a, MPFR_RNDN);
        mpfr_mul(r58243, r58242, r58232, MPFR_RNDN);
        mpfr_set_d(r58244, b, MPFR_RNDN);
        mpfr_mul(r58245, r58244, r58237, MPFR_RNDN);
        mpfr_add(r58246, r58243, r58245, MPFR_RNDN);
        mpfr_div(r58247, r58246, r58240, MPFR_RNDN);
        mpfr_mul(r58248, r58241, r58247, MPFR_RNDN);
        mpfr_add(r58249, r58238, r58236, MPFR_RNDN);
        mpfr_sqrt(r58250, r58249, MPFR_RNDN);
        mpfr_div(r58251, r58242, r58250, MPFR_RNDN);
        if (mpfr_get_si(r58234, MPFR_RNDN)) { mpfr_set(r58252, r58248, MPFR_RNDN); } else { mpfr_set(r58252, r58251, MPFR_RNDN); };
        return mpfr_get_d(r58252, MPFR_RNDN);
}

