#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 r58090 = a;
        float r58091 = c;
        float r58092 = r58090 * r58091;
        float r58093 = b;
        float r58094 = d;
        float r58095 = r58093 * r58094;
        float r58096 = r58092 + r58095;
        float r58097 = r58091 * r58091;
        float r58098 = r58094 * r58094;
        float r58099 = r58097 + r58098;
        float r58100 = r58096 / r58099;
        return r58100;
}

double f_id(double a, double b, double c, double d) {
        double r58101 = a;
        double r58102 = c;
        double r58103 = r58101 * r58102;
        double r58104 = b;
        double r58105 = d;
        double r58106 = r58104 * r58105;
        double r58107 = r58103 + r58106;
        double r58108 = r58102 * r58102;
        double r58109 = r58105 * r58105;
        double r58110 = r58108 + r58109;
        double r58111 = r58107 / r58110;
        return r58111;
}


double f_of(float a, float b, float c, float d) {
        float r58112 = c;
        float r58113 = 3.194745667675474e+60;
        bool r58114 = r58112 <= r58113;
        float r58115 = 1;
        float r58116 = r58112 * r58112;
        float r58117 = d;
        float r58118 = r58117 * r58117;
        float r58119 = r58116 + r58118;
        float r58120 = sqrt(r58119);
        float r58121 = r58115 / r58120;
        float r58122 = a;
        float r58123 = r58122 * r58112;
        float r58124 = b;
        float r58125 = r58124 * r58117;
        float r58126 = r58123 + r58125;
        float r58127 = r58126 / r58120;
        float r58128 = r58121 * r58127;
        float r58129 = r58118 + r58116;
        float r58130 = sqrt(r58129);
        float r58131 = r58122 / r58130;
        float r58132 = r58114 ? r58128 : r58131;
        return r58132;
}

double f_od(double a, double b, double c, double d) {
        double r58133 = c;
        double r58134 = 3.194745667675474e+60;
        bool r58135 = r58133 <= r58134;
        double r58136 = 1;
        double r58137 = r58133 * r58133;
        double r58138 = d;
        double r58139 = r58138 * r58138;
        double r58140 = r58137 + r58139;
        double r58141 = sqrt(r58140);
        double r58142 = r58136 / r58141;
        double r58143 = a;
        double r58144 = r58143 * r58133;
        double r58145 = b;
        double r58146 = r58145 * r58138;
        double r58147 = r58144 + r58146;
        double r58148 = r58147 / r58141;
        double r58149 = r58142 * r58148;
        double r58150 = r58139 + r58137;
        double r58151 = sqrt(r58150);
        double r58152 = r58143 / r58151;
        double r58153 = r58135 ? r58149 : r58152;
        return r58153;
}

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 r58154, r58155, r58156, r58157, r58158, r58159, r58160, r58161, r58162, r58163, r58164;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r58154);
        mpfr_init(r58155);
        mpfr_init(r58156);
        mpfr_init(r58157);
        mpfr_init(r58158);
        mpfr_init(r58159);
        mpfr_init(r58160);
        mpfr_init(r58161);
        mpfr_init(r58162);
        mpfr_init(r58163);
        mpfr_init(r58164);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r58154, a, MPFR_RNDN);
        mpfr_set_d(r58155, c, MPFR_RNDN);
        mpfr_mul(r58156, r58154, r58155, MPFR_RNDN);
        mpfr_set_d(r58157, b, MPFR_RNDN);
        mpfr_set_d(r58158, d, MPFR_RNDN);
        mpfr_mul(r58159, r58157, r58158, MPFR_RNDN);
        mpfr_add(r58160, r58156, r58159, MPFR_RNDN);
        mpfr_mul(r58161, r58155, r58155, MPFR_RNDN);
        mpfr_mul(r58162, r58158, r58158, MPFR_RNDN);
        mpfr_add(r58163, r58161, r58162, MPFR_RNDN);
        mpfr_div(r58164, r58160, r58163, MPFR_RNDN);
        return mpfr_get_d(r58164, MPFR_RNDN);
}

static mpfr_t r58165, r58166, r58167, r58168, r58169, r58170, r58171, r58172, r58173, r58174, r58175, r58176, r58177, r58178, r58179, r58180, r58181, r58182, r58183, r58184, r58185;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58165);
        mpfr_init_set_str(r58166, "3.194745667675474e+60", 10, MPFR_RNDN);
        mpfr_init(r58167);
        mpfr_init_set_str(r58168, "1", 10, MPFR_RNDN);
        mpfr_init(r58169);
        mpfr_init(r58170);
        mpfr_init(r58171);
        mpfr_init(r58172);
        mpfr_init(r58173);
        mpfr_init(r58174);
        mpfr_init(r58175);
        mpfr_init(r58176);
        mpfr_init(r58177);
        mpfr_init(r58178);
        mpfr_init(r58179);
        mpfr_init(r58180);
        mpfr_init(r58181);
        mpfr_init(r58182);
        mpfr_init(r58183);
        mpfr_init(r58184);
        mpfr_init(r58185);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r58165, c, MPFR_RNDN);
        ;
        mpfr_set_si(r58167, mpfr_cmp(r58165, r58166) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r58169, r58165, r58165, MPFR_RNDN);
        mpfr_set_d(r58170, d, MPFR_RNDN);
        mpfr_mul(r58171, r58170, r58170, MPFR_RNDN);
        mpfr_add(r58172, r58169, r58171, MPFR_RNDN);
        mpfr_sqrt(r58173, r58172, MPFR_RNDN);
        mpfr_div(r58174, r58168, r58173, MPFR_RNDN);
        mpfr_set_d(r58175, a, MPFR_RNDN);
        mpfr_mul(r58176, r58175, r58165, MPFR_RNDN);
        mpfr_set_d(r58177, b, MPFR_RNDN);
        mpfr_mul(r58178, r58177, r58170, MPFR_RNDN);
        mpfr_add(r58179, r58176, r58178, MPFR_RNDN);
        mpfr_div(r58180, r58179, r58173, MPFR_RNDN);
        mpfr_mul(r58181, r58174, r58180, MPFR_RNDN);
        mpfr_add(r58182, r58171, r58169, MPFR_RNDN);
        mpfr_sqrt(r58183, r58182, MPFR_RNDN);
        mpfr_div(r58184, r58175, r58183, MPFR_RNDN);
        if (mpfr_get_si(r58167, MPFR_RNDN)) { mpfr_set(r58185, r58181, MPFR_RNDN); } else { mpfr_set(r58185, r58184, MPFR_RNDN); };
        return mpfr_get_d(r58185, MPFR_RNDN);
}

static mpfr_t r58186, r58187, r58188, r58189, r58190, r58191, r58192, r58193, r58194, r58195, r58196, r58197, r58198, r58199, r58200, r58201, r58202, r58203, r58204, r58205, r58206;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58186);
        mpfr_init_set_str(r58187, "3.194745667675474e+60", 10, MPFR_RNDN);
        mpfr_init(r58188);
        mpfr_init_set_str(r58189, "1", 10, MPFR_RNDN);
        mpfr_init(r58190);
        mpfr_init(r58191);
        mpfr_init(r58192);
        mpfr_init(r58193);
        mpfr_init(r58194);
        mpfr_init(r58195);
        mpfr_init(r58196);
        mpfr_init(r58197);
        mpfr_init(r58198);
        mpfr_init(r58199);
        mpfr_init(r58200);
        mpfr_init(r58201);
        mpfr_init(r58202);
        mpfr_init(r58203);
        mpfr_init(r58204);
        mpfr_init(r58205);
        mpfr_init(r58206);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r58186, c, MPFR_RNDN);
        ;
        mpfr_set_si(r58188, mpfr_cmp(r58186, r58187) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r58190, r58186, r58186, MPFR_RNDN);
        mpfr_set_d(r58191, d, MPFR_RNDN);
        mpfr_mul(r58192, r58191, r58191, MPFR_RNDN);
        mpfr_add(r58193, r58190, r58192, MPFR_RNDN);
        mpfr_sqrt(r58194, r58193, MPFR_RNDN);
        mpfr_div(r58195, r58189, r58194, MPFR_RNDN);
        mpfr_set_d(r58196, a, MPFR_RNDN);
        mpfr_mul(r58197, r58196, r58186, MPFR_RNDN);
        mpfr_set_d(r58198, b, MPFR_RNDN);
        mpfr_mul(r58199, r58198, r58191, MPFR_RNDN);
        mpfr_add(r58200, r58197, r58199, MPFR_RNDN);
        mpfr_div(r58201, r58200, r58194, MPFR_RNDN);
        mpfr_mul(r58202, r58195, r58201, MPFR_RNDN);
        mpfr_add(r58203, r58192, r58190, MPFR_RNDN);
        mpfr_sqrt(r58204, r58203, MPFR_RNDN);
        mpfr_div(r58205, r58196, r58204, MPFR_RNDN);
        if (mpfr_get_si(r58188, MPFR_RNDN)) { mpfr_set(r58206, r58202, MPFR_RNDN); } else { mpfr_set(r58206, r58205, MPFR_RNDN); };
        return mpfr_get_d(r58206, MPFR_RNDN);
}

