#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 r10010 = x_im;
        float r10011 = y_re;
        float r10012 = r10010 * r10011;
        float r10013 = x_re;
        float r10014 = y_im;
        float r10015 = r10013 * r10014;
        float r10016 = r10012 - r10015;
        float r10017 = r10011 * r10011;
        float r10018 = r10014 * r10014;
        float r10019 = r10017 + r10018;
        float r10020 = r10016 / r10019;
        return r10020;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r10021 = x_im;
        double r10022 = y_re;
        double r10023 = r10021 * r10022;
        double r10024 = x_re;
        double r10025 = y_im;
        double r10026 = r10024 * r10025;
        double r10027 = r10023 - r10026;
        double r10028 = r10022 * r10022;
        double r10029 = r10025 * r10025;
        double r10030 = r10028 + r10029;
        double r10031 = r10027 / r10030;
        return r10031;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r10032 = x_im;
        float r10033 = y_re;
        float r10034 = r10032 * r10033;
        float r10035 = x_re;
        float r10036 = y_im;
        float r10037 = r10035 * r10036;
        float r10038 = r10034 - r10037;
        float r10039 = r10033 * r10033;
        float r10040 = r10036 * r10036;
        float r10041 = r10039 + r10040;
        float r10042 = sqrt(r10041);
        float r10043 = r10038 / r10042;
        float r10044 = r10043 / r10042;
        return r10044;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r10045 = x_im;
        double r10046 = y_re;
        double r10047 = r10045 * r10046;
        double r10048 = x_re;
        double r10049 = y_im;
        double r10050 = r10048 * r10049;
        double r10051 = r10047 - r10050;
        double r10052 = r10046 * r10046;
        double r10053 = r10049 * r10049;
        double r10054 = r10052 + r10053;
        double r10055 = sqrt(r10054);
        double r10056 = r10051 / r10055;
        double r10057 = r10056 / r10055;
        return r10057;
}

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 r10058, r10059, r10060, r10061, r10062, r10063, r10064, r10065, r10066, r10067, r10068;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10058);
        mpfr_init(r10059);
        mpfr_init(r10060);
        mpfr_init(r10061);
        mpfr_init(r10062);
        mpfr_init(r10063);
        mpfr_init(r10064);
        mpfr_init(r10065);
        mpfr_init(r10066);
        mpfr_init(r10067);
        mpfr_init(r10068);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r10058, x_im, MPFR_RNDN);
        mpfr_set_d(r10059, y_re, MPFR_RNDN);
        mpfr_mul(r10060, r10058, r10059, MPFR_RNDN);
        mpfr_set_d(r10061, x_re, MPFR_RNDN);
        mpfr_set_d(r10062, y_im, MPFR_RNDN);
        mpfr_mul(r10063, r10061, r10062, MPFR_RNDN);
        mpfr_sub(r10064, r10060, r10063, MPFR_RNDN);
        mpfr_mul(r10065, r10059, r10059, MPFR_RNDN);
        mpfr_mul(r10066, r10062, r10062, MPFR_RNDN);
        mpfr_add(r10067, r10065, r10066, MPFR_RNDN);
        mpfr_div(r10068, r10064, r10067, MPFR_RNDN);
        return mpfr_get_d(r10068, MPFR_RNDN);
}

static mpfr_t r10069, r10070, r10071, r10072, r10073, r10074, r10075, r10076, r10077, r10078, r10079, r10080, r10081;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10069);
        mpfr_init(r10070);
        mpfr_init(r10071);
        mpfr_init(r10072);
        mpfr_init(r10073);
        mpfr_init(r10074);
        mpfr_init(r10075);
        mpfr_init(r10076);
        mpfr_init(r10077);
        mpfr_init(r10078);
        mpfr_init(r10079);
        mpfr_init(r10080);
        mpfr_init(r10081);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r10069, x_im, MPFR_RNDN);
        mpfr_set_d(r10070, y_re, MPFR_RNDN);
        mpfr_mul(r10071, r10069, r10070, MPFR_RNDN);
        mpfr_set_d(r10072, x_re, MPFR_RNDN);
        mpfr_set_d(r10073, y_im, MPFR_RNDN);
        mpfr_mul(r10074, r10072, r10073, MPFR_RNDN);
        mpfr_sub(r10075, r10071, r10074, MPFR_RNDN);
        mpfr_mul(r10076, r10070, r10070, MPFR_RNDN);
        mpfr_mul(r10077, r10073, r10073, MPFR_RNDN);
        mpfr_add(r10078, r10076, r10077, MPFR_RNDN);
        mpfr_sqrt(r10079, r10078, MPFR_RNDN);
        mpfr_div(r10080, r10075, r10079, MPFR_RNDN);
        mpfr_div(r10081, r10080, r10079, MPFR_RNDN);
        return mpfr_get_d(r10081, MPFR_RNDN);
}

static mpfr_t r10082, r10083, r10084, r10085, r10086, r10087, r10088, r10089, r10090, r10091, r10092, r10093, r10094;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10082);
        mpfr_init(r10083);
        mpfr_init(r10084);
        mpfr_init(r10085);
        mpfr_init(r10086);
        mpfr_init(r10087);
        mpfr_init(r10088);
        mpfr_init(r10089);
        mpfr_init(r10090);
        mpfr_init(r10091);
        mpfr_init(r10092);
        mpfr_init(r10093);
        mpfr_init(r10094);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r10082, x_im, MPFR_RNDN);
        mpfr_set_d(r10083, y_re, MPFR_RNDN);
        mpfr_mul(r10084, r10082, r10083, MPFR_RNDN);
        mpfr_set_d(r10085, x_re, MPFR_RNDN);
        mpfr_set_d(r10086, y_im, MPFR_RNDN);
        mpfr_mul(r10087, r10085, r10086, MPFR_RNDN);
        mpfr_sub(r10088, r10084, r10087, MPFR_RNDN);
        mpfr_mul(r10089, r10083, r10083, MPFR_RNDN);
        mpfr_mul(r10090, r10086, r10086, MPFR_RNDN);
        mpfr_add(r10091, r10089, r10090, MPFR_RNDN);
        mpfr_sqrt(r10092, r10091, MPFR_RNDN);
        mpfr_div(r10093, r10088, r10092, MPFR_RNDN);
        mpfr_div(r10094, r10093, r10092, MPFR_RNDN);
        return mpfr_get_d(r10094, MPFR_RNDN);
}

