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

char *name = "_divideComplex, imaginary part";

double f_if(float x_re, float x_im, float y_re, float y_im) {
        float r9512 = x_im;
        float r9513 = y_re;
        float r9514 = r9512 * r9513;
        float r9515 = x_re;
        float r9516 = y_im;
        float r9517 = r9515 * r9516;
        float r9518 = r9514 - r9517;
        float r9519 = r9513 * r9513;
        float r9520 = r9516 * r9516;
        float r9521 = r9519 + r9520;
        float r9522 = r9518 / r9521;
        return r9522;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r9523 = x_im;
        double r9524 = y_re;
        double r9525 = r9523 * r9524;
        double r9526 = x_re;
        double r9527 = y_im;
        double r9528 = r9526 * r9527;
        double r9529 = r9525 - r9528;
        double r9530 = r9524 * r9524;
        double r9531 = r9527 * r9527;
        double r9532 = r9530 + r9531;
        double r9533 = r9529 / r9532;
        return r9533;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r9534 = x_im;
        float r9535 = y_re;
        float r9536 = r9534 * r9535;
        float r9537 = x_re;
        float r9538 = y_im;
        float r9539 = r9537 * r9538;
        float r9540 = r9536 - r9539;
        float r9541 = r9535 * r9535;
        float r9542 = r9538 * r9538;
        float r9543 = r9541 + r9542;
        float r9544 = sqrt(r9543);
        float r9545 = r9540 / r9544;
        float r9546 = r9545 / r9544;
        return r9546;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r9547 = x_im;
        double r9548 = y_re;
        double r9549 = r9547 * r9548;
        double r9550 = x_re;
        double r9551 = y_im;
        double r9552 = r9550 * r9551;
        double r9553 = r9549 - r9552;
        double r9554 = r9548 * r9548;
        double r9555 = r9551 * r9551;
        double r9556 = r9554 + r9555;
        double r9557 = sqrt(r9556);
        double r9558 = r9553 / r9557;
        double r9559 = r9558 / r9557;
        return r9559;
}

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 r9560, r9561, r9562, r9563, r9564, r9565, r9566, r9567, r9568, r9569, r9570;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9560);
        mpfr_init(r9561);
        mpfr_init(r9562);
        mpfr_init(r9563);
        mpfr_init(r9564);
        mpfr_init(r9565);
        mpfr_init(r9566);
        mpfr_init(r9567);
        mpfr_init(r9568);
        mpfr_init(r9569);
        mpfr_init(r9570);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r9560, x_im, MPFR_RNDN);
        mpfr_set_d(r9561, y_re, MPFR_RNDN);
        mpfr_mul(r9562, r9560, r9561, MPFR_RNDN);
        mpfr_set_d(r9563, x_re, MPFR_RNDN);
        mpfr_set_d(r9564, y_im, MPFR_RNDN);
        mpfr_mul(r9565, r9563, r9564, MPFR_RNDN);
        mpfr_sub(r9566, r9562, r9565, MPFR_RNDN);
        mpfr_mul(r9567, r9561, r9561, MPFR_RNDN);
        mpfr_mul(r9568, r9564, r9564, MPFR_RNDN);
        mpfr_add(r9569, r9567, r9568, MPFR_RNDN);
        mpfr_div(r9570, r9566, r9569, MPFR_RNDN);
        return mpfr_get_d(r9570, MPFR_RNDN);
}

static mpfr_t r9571, r9572, r9573, r9574, r9575, r9576, r9577, r9578, r9579, r9580, r9581, r9582, r9583;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9571);
        mpfr_init(r9572);
        mpfr_init(r9573);
        mpfr_init(r9574);
        mpfr_init(r9575);
        mpfr_init(r9576);
        mpfr_init(r9577);
        mpfr_init(r9578);
        mpfr_init(r9579);
        mpfr_init(r9580);
        mpfr_init(r9581);
        mpfr_init(r9582);
        mpfr_init(r9583);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r9571, x_im, MPFR_RNDN);
        mpfr_set_d(r9572, y_re, MPFR_RNDN);
        mpfr_mul(r9573, r9571, r9572, MPFR_RNDN);
        mpfr_set_d(r9574, x_re, MPFR_RNDN);
        mpfr_set_d(r9575, y_im, MPFR_RNDN);
        mpfr_mul(r9576, r9574, r9575, MPFR_RNDN);
        mpfr_sub(r9577, r9573, r9576, MPFR_RNDN);
        mpfr_mul(r9578, r9572, r9572, MPFR_RNDN);
        mpfr_mul(r9579, r9575, r9575, MPFR_RNDN);
        mpfr_add(r9580, r9578, r9579, MPFR_RNDN);
        mpfr_sqrt(r9581, r9580, MPFR_RNDN);
        mpfr_div(r9582, r9577, r9581, MPFR_RNDN);
        mpfr_div(r9583, r9582, r9581, MPFR_RNDN);
        return mpfr_get_d(r9583, MPFR_RNDN);
}

static mpfr_t r9584, r9585, r9586, r9587, r9588, r9589, r9590, r9591, r9592, r9593, r9594, r9595, r9596;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9584);
        mpfr_init(r9585);
        mpfr_init(r9586);
        mpfr_init(r9587);
        mpfr_init(r9588);
        mpfr_init(r9589);
        mpfr_init(r9590);
        mpfr_init(r9591);
        mpfr_init(r9592);
        mpfr_init(r9593);
        mpfr_init(r9594);
        mpfr_init(r9595);
        mpfr_init(r9596);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r9584, x_im, MPFR_RNDN);
        mpfr_set_d(r9585, y_re, MPFR_RNDN);
        mpfr_mul(r9586, r9584, r9585, MPFR_RNDN);
        mpfr_set_d(r9587, x_re, MPFR_RNDN);
        mpfr_set_d(r9588, y_im, MPFR_RNDN);
        mpfr_mul(r9589, r9587, r9588, MPFR_RNDN);
        mpfr_sub(r9590, r9586, r9589, MPFR_RNDN);
        mpfr_mul(r9591, r9585, r9585, MPFR_RNDN);
        mpfr_mul(r9592, r9588, r9588, MPFR_RNDN);
        mpfr_add(r9593, r9591, r9592, MPFR_RNDN);
        mpfr_sqrt(r9594, r9593, MPFR_RNDN);
        mpfr_div(r9595, r9590, r9594, MPFR_RNDN);
        mpfr_div(r9596, r9595, r9594, MPFR_RNDN);
        return mpfr_get_d(r9596, MPFR_RNDN);
}

