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

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

double f_if(float a, float b, float c, float d) {
        float r23132 = b;
        float r23133 = c;
        float r23134 = r23132 * r23133;
        float r23135 = a;
        float r23136 = d;
        float r23137 = r23135 * r23136;
        float r23138 = r23134 - r23137;
        float r23139 = r23133 * r23133;
        float r23140 = r23136 * r23136;
        float r23141 = r23139 + r23140;
        float r23142 = r23138 / r23141;
        return r23142;
}

double f_id(double a, double b, double c, double d) {
        double r23143 = b;
        double r23144 = c;
        double r23145 = r23143 * r23144;
        double r23146 = a;
        double r23147 = d;
        double r23148 = r23146 * r23147;
        double r23149 = r23145 - r23148;
        double r23150 = r23144 * r23144;
        double r23151 = r23147 * r23147;
        double r23152 = r23150 + r23151;
        double r23153 = r23149 / r23152;
        return r23153;
}


double f_of(float a, float b, float c, float d) {
        float r23154 = c;
        float r23155 = -2.093413384433155e+95;
        bool r23156 = r23154 <= r23155;
        float r23157 = b;
        float r23158 = d;
        float r23159 = r23158 / r23154;
        float r23160 = a;
        float r23161 = r23159 * r23160;
        float r23162 = r23157 - r23161;
        float r23163 = hypot(r23154, r23158);
        float r23164 = -r23163;
        float r23165 = r23162 / r23164;
        float r23166 = 3.177326670755292e+115;
        bool r23167 = r23154 <= r23166;
        float r23168 = 1;
        float r23169 = r23168 / r23163;
        float r23170 = r23154 * r23157;
        float r23171 = r23160 * r23158;
        float r23172 = r23170 - r23171;
        float r23173 = r23172 / r23163;
        float r23174 = r23169 * r23173;
        float r23175 = +inf.0;
        bool r23176 = r23154 <= r23175;
        float r23177 = r23160 / r23154;
        float r23178 = r23177 * r23158;
        float r23179 = r23157 - r23178;
        float r23180 = r23179 / r23163;
        float r23181 = r23176 ? r23180 : r23180;
        float r23182 = r23167 ? r23174 : r23181;
        float r23183 = r23156 ? r23165 : r23182;
        return r23183;
}

double f_od(double a, double b, double c, double d) {
        double r23184 = c;
        double r23185 = -2.093413384433155e+95;
        bool r23186 = r23184 <= r23185;
        double r23187 = b;
        double r23188 = d;
        double r23189 = r23188 / r23184;
        double r23190 = a;
        double r23191 = r23189 * r23190;
        double r23192 = r23187 - r23191;
        double r23193 = hypot(r23184, r23188);
        double r23194 = -r23193;
        double r23195 = r23192 / r23194;
        double r23196 = 3.177326670755292e+115;
        bool r23197 = r23184 <= r23196;
        double r23198 = 1;
        double r23199 = r23198 / r23193;
        double r23200 = r23184 * r23187;
        double r23201 = r23190 * r23188;
        double r23202 = r23200 - r23201;
        double r23203 = r23202 / r23193;
        double r23204 = r23199 * r23203;
        double r23205 = +inf.0;
        bool r23206 = r23184 <= r23205;
        double r23207 = r23190 / r23184;
        double r23208 = r23207 * r23188;
        double r23209 = r23187 - r23208;
        double r23210 = r23209 / r23193;
        double r23211 = r23206 ? r23210 : r23210;
        double r23212 = r23197 ? r23204 : r23211;
        double r23213 = r23186 ? r23195 : r23212;
        return r23213;
}

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 r23214, r23215, r23216, r23217, r23218, r23219, r23220, r23221, r23222, r23223, r23224;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r23214);
        mpfr_init(r23215);
        mpfr_init(r23216);
        mpfr_init(r23217);
        mpfr_init(r23218);
        mpfr_init(r23219);
        mpfr_init(r23220);
        mpfr_init(r23221);
        mpfr_init(r23222);
        mpfr_init(r23223);
        mpfr_init(r23224);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r23214, b, MPFR_RNDN);
        mpfr_set_d(r23215, c, MPFR_RNDN);
        mpfr_mul(r23216, r23214, r23215, MPFR_RNDN);
        mpfr_set_d(r23217, a, MPFR_RNDN);
        mpfr_set_d(r23218, d, MPFR_RNDN);
        mpfr_mul(r23219, r23217, r23218, MPFR_RNDN);
        mpfr_sub(r23220, r23216, r23219, MPFR_RNDN);
        mpfr_mul(r23221, r23215, r23215, MPFR_RNDN);
        mpfr_mul(r23222, r23218, r23218, MPFR_RNDN);
        mpfr_add(r23223, r23221, r23222, MPFR_RNDN);
        mpfr_div(r23224, r23220, r23223, MPFR_RNDN);
        return mpfr_get_d(r23224, MPFR_RNDN);
}

static mpfr_t r23225, r23226, r23227, r23228, r23229, r23230, r23231, r23232, r23233, r23234, r23235, r23236, r23237, r23238, r23239, r23240, r23241, r23242, r23243, r23244, r23245, r23246, r23247, r23248, r23249, r23250, r23251, r23252, r23253, r23254;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r23225);
        mpfr_init_set_str(r23226, "-2.093413384433155e+95", 10, MPFR_RNDN);
        mpfr_init(r23227);
        mpfr_init(r23228);
        mpfr_init(r23229);
        mpfr_init(r23230);
        mpfr_init(r23231);
        mpfr_init(r23232);
        mpfr_init(r23233);
        mpfr_init(r23234);
        mpfr_init(r23235);
        mpfr_init(r23236);
        mpfr_init_set_str(r23237, "3.177326670755292e+115", 10, MPFR_RNDN);
        mpfr_init(r23238);
        mpfr_init_set_str(r23239, "1", 10, MPFR_RNDN);
        mpfr_init(r23240);
        mpfr_init(r23241);
        mpfr_init(r23242);
        mpfr_init(r23243);
        mpfr_init(r23244);
        mpfr_init(r23245);
        mpfr_init_set_str(r23246, "+inf.0", 10, MPFR_RNDN);
        mpfr_init(r23247);
        mpfr_init(r23248);
        mpfr_init(r23249);
        mpfr_init(r23250);
        mpfr_init(r23251);
        mpfr_init(r23252);
        mpfr_init(r23253);
        mpfr_init(r23254);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r23225, c, MPFR_RNDN);
        ;
        mpfr_set_si(r23227, mpfr_cmp(r23225, r23226) <= 0, MPFR_RNDN);
        mpfr_set_d(r23228, b, MPFR_RNDN);
        mpfr_set_d(r23229, d, MPFR_RNDN);
        mpfr_div(r23230, r23229, r23225, MPFR_RNDN);
        mpfr_set_d(r23231, a, MPFR_RNDN);
        mpfr_mul(r23232, r23230, r23231, MPFR_RNDN);
        mpfr_sub(r23233, r23228, r23232, MPFR_RNDN);
        mpfr_hypot(r23234, r23225, r23229, MPFR_RNDN);
        mpfr_neg(r23235, r23234, MPFR_RNDN);
        mpfr_div(r23236, r23233, r23235, MPFR_RNDN);
        ;
        mpfr_set_si(r23238, mpfr_cmp(r23225, r23237) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r23240, r23239, r23234, MPFR_RNDN);
        mpfr_mul(r23241, r23225, r23228, MPFR_RNDN);
        mpfr_mul(r23242, r23231, r23229, MPFR_RNDN);
        mpfr_sub(r23243, r23241, r23242, MPFR_RNDN);
        mpfr_div(r23244, r23243, r23234, MPFR_RNDN);
        mpfr_mul(r23245, r23240, r23244, MPFR_RNDN);
        ;
        mpfr_set_si(r23247, mpfr_cmp(r23225, r23246) <= 0, MPFR_RNDN);
        mpfr_div(r23248, r23231, r23225, MPFR_RNDN);
        mpfr_mul(r23249, r23248, r23229, MPFR_RNDN);
        mpfr_sub(r23250, r23228, r23249, MPFR_RNDN);
        mpfr_div(r23251, r23250, r23234, MPFR_RNDN);
        if (mpfr_get_si(r23247, MPFR_RNDN)) { mpfr_set(r23252, r23251, MPFR_RNDN); } else { mpfr_set(r23252, r23251, MPFR_RNDN); };
        if (mpfr_get_si(r23238, MPFR_RNDN)) { mpfr_set(r23253, r23245, MPFR_RNDN); } else { mpfr_set(r23253, r23252, MPFR_RNDN); };
        if (mpfr_get_si(r23227, MPFR_RNDN)) { mpfr_set(r23254, r23236, MPFR_RNDN); } else { mpfr_set(r23254, r23253, MPFR_RNDN); };
        return mpfr_get_d(r23254, MPFR_RNDN);
}

static mpfr_t r23255, r23256, r23257, r23258, r23259, r23260, r23261, r23262, r23263, r23264, r23265, r23266, r23267, r23268, r23269, r23270, r23271, r23272, r23273, r23274, r23275, r23276, r23277, r23278, r23279, r23280, r23281, r23282, r23283, r23284;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r23255);
        mpfr_init_set_str(r23256, "-2.093413384433155e+95", 10, MPFR_RNDN);
        mpfr_init(r23257);
        mpfr_init(r23258);
        mpfr_init(r23259);
        mpfr_init(r23260);
        mpfr_init(r23261);
        mpfr_init(r23262);
        mpfr_init(r23263);
        mpfr_init(r23264);
        mpfr_init(r23265);
        mpfr_init(r23266);
        mpfr_init_set_str(r23267, "3.177326670755292e+115", 10, MPFR_RNDN);
        mpfr_init(r23268);
        mpfr_init_set_str(r23269, "1", 10, MPFR_RNDN);
        mpfr_init(r23270);
        mpfr_init(r23271);
        mpfr_init(r23272);
        mpfr_init(r23273);
        mpfr_init(r23274);
        mpfr_init(r23275);
        mpfr_init_set_str(r23276, "+inf.0", 10, MPFR_RNDN);
        mpfr_init(r23277);
        mpfr_init(r23278);
        mpfr_init(r23279);
        mpfr_init(r23280);
        mpfr_init(r23281);
        mpfr_init(r23282);
        mpfr_init(r23283);
        mpfr_init(r23284);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r23255, c, MPFR_RNDN);
        ;
        mpfr_set_si(r23257, mpfr_cmp(r23255, r23256) <= 0, MPFR_RNDN);
        mpfr_set_d(r23258, b, MPFR_RNDN);
        mpfr_set_d(r23259, d, MPFR_RNDN);
        mpfr_div(r23260, r23259, r23255, MPFR_RNDN);
        mpfr_set_d(r23261, a, MPFR_RNDN);
        mpfr_mul(r23262, r23260, r23261, MPFR_RNDN);
        mpfr_sub(r23263, r23258, r23262, MPFR_RNDN);
        mpfr_hypot(r23264, r23255, r23259, MPFR_RNDN);
        mpfr_neg(r23265, r23264, MPFR_RNDN);
        mpfr_div(r23266, r23263, r23265, MPFR_RNDN);
        ;
        mpfr_set_si(r23268, mpfr_cmp(r23255, r23267) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r23270, r23269, r23264, MPFR_RNDN);
        mpfr_mul(r23271, r23255, r23258, MPFR_RNDN);
        mpfr_mul(r23272, r23261, r23259, MPFR_RNDN);
        mpfr_sub(r23273, r23271, r23272, MPFR_RNDN);
        mpfr_div(r23274, r23273, r23264, MPFR_RNDN);
        mpfr_mul(r23275, r23270, r23274, MPFR_RNDN);
        ;
        mpfr_set_si(r23277, mpfr_cmp(r23255, r23276) <= 0, MPFR_RNDN);
        mpfr_div(r23278, r23261, r23255, MPFR_RNDN);
        mpfr_mul(r23279, r23278, r23259, MPFR_RNDN);
        mpfr_sub(r23280, r23258, r23279, MPFR_RNDN);
        mpfr_div(r23281, r23280, r23264, MPFR_RNDN);
        if (mpfr_get_si(r23277, MPFR_RNDN)) { mpfr_set(r23282, r23281, MPFR_RNDN); } else { mpfr_set(r23282, r23281, MPFR_RNDN); };
        if (mpfr_get_si(r23268, MPFR_RNDN)) { mpfr_set(r23283, r23275, MPFR_RNDN); } else { mpfr_set(r23283, r23282, MPFR_RNDN); };
        if (mpfr_get_si(r23257, MPFR_RNDN)) { mpfr_set(r23284, r23266, MPFR_RNDN); } else { mpfr_set(r23284, r23283, MPFR_RNDN); };
        return mpfr_get_d(r23284, MPFR_RNDN);
}

