#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 r10274 = b;
        float r10275 = c;
        float r10276 = r10274 * r10275;
        float r10277 = a;
        float r10278 = d;
        float r10279 = r10277 * r10278;
        float r10280 = r10276 - r10279;
        float r10281 = r10275 * r10275;
        float r10282 = r10278 * r10278;
        float r10283 = r10281 + r10282;
        float r10284 = r10280 / r10283;
        return r10284;
}

double f_id(double a, double b, double c, double d) {
        double r10285 = b;
        double r10286 = c;
        double r10287 = r10285 * r10286;
        double r10288 = a;
        double r10289 = d;
        double r10290 = r10288 * r10289;
        double r10291 = r10287 - r10290;
        double r10292 = r10286 * r10286;
        double r10293 = r10289 * r10289;
        double r10294 = r10292 + r10293;
        double r10295 = r10291 / r10294;
        return r10295;
}


double f_of(float a, float b, float c, float d) {
        float r10296 = b;
        float r10297 = c;
        float r10298 = r10296 * r10297;
        float r10299 = a;
        float r10300 = d;
        float r10301 = r10299 * r10300;
        float r10302 = r10298 - r10301;
        float r10303 = r10297 * r10297;
        float r10304 = r10300 * r10300;
        float r10305 = r10303 + r10304;
        float r10306 = sqrt(r10305);
        float r10307 = r10302 / r10306;
        float r10308 = r10307 / r10306;
        return r10308;
}

double f_od(double a, double b, double c, double d) {
        double r10309 = b;
        double r10310 = c;
        double r10311 = r10309 * r10310;
        double r10312 = a;
        double r10313 = d;
        double r10314 = r10312 * r10313;
        double r10315 = r10311 - r10314;
        double r10316 = r10310 * r10310;
        double r10317 = r10313 * r10313;
        double r10318 = r10316 + r10317;
        double r10319 = sqrt(r10318);
        double r10320 = r10315 / r10319;
        double r10321 = r10320 / r10319;
        return r10321;
}

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 r10322, r10323, r10324, r10325, r10326, r10327, r10328, r10329, r10330, r10331, r10332;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10322);
        mpfr_init(r10323);
        mpfr_init(r10324);
        mpfr_init(r10325);
        mpfr_init(r10326);
        mpfr_init(r10327);
        mpfr_init(r10328);
        mpfr_init(r10329);
        mpfr_init(r10330);
        mpfr_init(r10331);
        mpfr_init(r10332);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r10322, b, MPFR_RNDN);
        mpfr_set_d(r10323, c, MPFR_RNDN);
        mpfr_mul(r10324, r10322, r10323, MPFR_RNDN);
        mpfr_set_d(r10325, a, MPFR_RNDN);
        mpfr_set_d(r10326, d, MPFR_RNDN);
        mpfr_mul(r10327, r10325, r10326, MPFR_RNDN);
        mpfr_sub(r10328, r10324, r10327, MPFR_RNDN);
        mpfr_mul(r10329, r10323, r10323, MPFR_RNDN);
        mpfr_mul(r10330, r10326, r10326, MPFR_RNDN);
        mpfr_add(r10331, r10329, r10330, MPFR_RNDN);
        mpfr_div(r10332, r10328, r10331, MPFR_RNDN);
        return mpfr_get_d(r10332, MPFR_RNDN);
}

static mpfr_t r10333, r10334, r10335, r10336, r10337, r10338, r10339, r10340, r10341, r10342, r10343, r10344, r10345;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10333);
        mpfr_init(r10334);
        mpfr_init(r10335);
        mpfr_init(r10336);
        mpfr_init(r10337);
        mpfr_init(r10338);
        mpfr_init(r10339);
        mpfr_init(r10340);
        mpfr_init(r10341);
        mpfr_init(r10342);
        mpfr_init(r10343);
        mpfr_init(r10344);
        mpfr_init(r10345);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r10333, b, MPFR_RNDN);
        mpfr_set_d(r10334, c, MPFR_RNDN);
        mpfr_mul(r10335, r10333, r10334, MPFR_RNDN);
        mpfr_set_d(r10336, a, MPFR_RNDN);
        mpfr_set_d(r10337, d, MPFR_RNDN);
        mpfr_mul(r10338, r10336, r10337, MPFR_RNDN);
        mpfr_sub(r10339, r10335, r10338, MPFR_RNDN);
        mpfr_mul(r10340, r10334, r10334, MPFR_RNDN);
        mpfr_mul(r10341, r10337, r10337, MPFR_RNDN);
        mpfr_add(r10342, r10340, r10341, MPFR_RNDN);
        mpfr_sqrt(r10343, r10342, MPFR_RNDN);
        mpfr_div(r10344, r10339, r10343, MPFR_RNDN);
        mpfr_div(r10345, r10344, r10343, MPFR_RNDN);
        return mpfr_get_d(r10345, MPFR_RNDN);
}

static mpfr_t r10346, r10347, r10348, r10349, r10350, r10351, r10352, r10353, r10354, r10355, r10356, r10357, r10358;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10346);
        mpfr_init(r10347);
        mpfr_init(r10348);
        mpfr_init(r10349);
        mpfr_init(r10350);
        mpfr_init(r10351);
        mpfr_init(r10352);
        mpfr_init(r10353);
        mpfr_init(r10354);
        mpfr_init(r10355);
        mpfr_init(r10356);
        mpfr_init(r10357);
        mpfr_init(r10358);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r10346, b, MPFR_RNDN);
        mpfr_set_d(r10347, c, MPFR_RNDN);
        mpfr_mul(r10348, r10346, r10347, MPFR_RNDN);
        mpfr_set_d(r10349, a, MPFR_RNDN);
        mpfr_set_d(r10350, d, MPFR_RNDN);
        mpfr_mul(r10351, r10349, r10350, MPFR_RNDN);
        mpfr_sub(r10352, r10348, r10351, MPFR_RNDN);
        mpfr_mul(r10353, r10347, r10347, MPFR_RNDN);
        mpfr_mul(r10354, r10350, r10350, MPFR_RNDN);
        mpfr_add(r10355, r10353, r10354, MPFR_RNDN);
        mpfr_sqrt(r10356, r10355, MPFR_RNDN);
        mpfr_div(r10357, r10352, r10356, MPFR_RNDN);
        mpfr_div(r10358, r10357, r10356, MPFR_RNDN);
        return mpfr_get_d(r10358, MPFR_RNDN);
}

