#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 r57988 = a;
        float r57989 = c;
        float r57990 = r57988 * r57989;
        float r57991 = b;
        float r57992 = d;
        float r57993 = r57991 * r57992;
        float r57994 = r57990 + r57993;
        float r57995 = r57989 * r57989;
        float r57996 = r57992 * r57992;
        float r57997 = r57995 + r57996;
        float r57998 = r57994 / r57997;
        return r57998;
}

double f_id(double a, double b, double c, double d) {
        double r57999 = a;
        double r58000 = c;
        double r58001 = r57999 * r58000;
        double r58002 = b;
        double r58003 = d;
        double r58004 = r58002 * r58003;
        double r58005 = r58001 + r58004;
        double r58006 = r58000 * r58000;
        double r58007 = r58003 * r58003;
        double r58008 = r58006 + r58007;
        double r58009 = r58005 / r58008;
        return r58009;
}


double f_of(float a, float b, float c, float d) {
        float r58010 = c;
        float r58011 = 3.194745667675474e+60;
        bool r58012 = r58010 <= r58011;
        float r58013 = 1;
        float r58014 = r58010 * r58010;
        float r58015 = d;
        float r58016 = r58015 * r58015;
        float r58017 = r58014 + r58016;
        float r58018 = sqrt(r58017);
        float r58019 = r58013 / r58018;
        float r58020 = a;
        float r58021 = r58020 * r58010;
        float r58022 = b;
        float r58023 = r58022 * r58015;
        float r58024 = r58021 + r58023;
        float r58025 = r58024 / r58018;
        float r58026 = r58019 * r58025;
        float r58027 = r58016 + r58014;
        float r58028 = sqrt(r58027);
        float r58029 = r58020 / r58028;
        float r58030 = r58012 ? r58026 : r58029;
        return r58030;
}

double f_od(double a, double b, double c, double d) {
        double r58031 = c;
        double r58032 = 3.194745667675474e+60;
        bool r58033 = r58031 <= r58032;
        double r58034 = 1;
        double r58035 = r58031 * r58031;
        double r58036 = d;
        double r58037 = r58036 * r58036;
        double r58038 = r58035 + r58037;
        double r58039 = sqrt(r58038);
        double r58040 = r58034 / r58039;
        double r58041 = a;
        double r58042 = r58041 * r58031;
        double r58043 = b;
        double r58044 = r58043 * r58036;
        double r58045 = r58042 + r58044;
        double r58046 = r58045 / r58039;
        double r58047 = r58040 * r58046;
        double r58048 = r58037 + r58035;
        double r58049 = sqrt(r58048);
        double r58050 = r58041 / r58049;
        double r58051 = r58033 ? r58047 : r58050;
        return r58051;
}

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 r58052, r58053, r58054, r58055, r58056, r58057, r58058, r58059, r58060, r58061, r58062;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r58052);
        mpfr_init(r58053);
        mpfr_init(r58054);
        mpfr_init(r58055);
        mpfr_init(r58056);
        mpfr_init(r58057);
        mpfr_init(r58058);
        mpfr_init(r58059);
        mpfr_init(r58060);
        mpfr_init(r58061);
        mpfr_init(r58062);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r58052, a, MPFR_RNDN);
        mpfr_set_d(r58053, c, MPFR_RNDN);
        mpfr_mul(r58054, r58052, r58053, MPFR_RNDN);
        mpfr_set_d(r58055, b, MPFR_RNDN);
        mpfr_set_d(r58056, d, MPFR_RNDN);
        mpfr_mul(r58057, r58055, r58056, MPFR_RNDN);
        mpfr_add(r58058, r58054, r58057, MPFR_RNDN);
        mpfr_mul(r58059, r58053, r58053, MPFR_RNDN);
        mpfr_mul(r58060, r58056, r58056, MPFR_RNDN);
        mpfr_add(r58061, r58059, r58060, MPFR_RNDN);
        mpfr_div(r58062, r58058, r58061, MPFR_RNDN);
        return mpfr_get_d(r58062, MPFR_RNDN);
}

static mpfr_t r58063, r58064, r58065, r58066, r58067, r58068, r58069, r58070, r58071, r58072, r58073, r58074, r58075, r58076, r58077, r58078, r58079, r58080, r58081, r58082, r58083;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58063);
        mpfr_init_set_str(r58064, "3.194745667675474e+60", 10, MPFR_RNDN);
        mpfr_init(r58065);
        mpfr_init_set_str(r58066, "1", 10, MPFR_RNDN);
        mpfr_init(r58067);
        mpfr_init(r58068);
        mpfr_init(r58069);
        mpfr_init(r58070);
        mpfr_init(r58071);
        mpfr_init(r58072);
        mpfr_init(r58073);
        mpfr_init(r58074);
        mpfr_init(r58075);
        mpfr_init(r58076);
        mpfr_init(r58077);
        mpfr_init(r58078);
        mpfr_init(r58079);
        mpfr_init(r58080);
        mpfr_init(r58081);
        mpfr_init(r58082);
        mpfr_init(r58083);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r58063, c, MPFR_RNDN);
        ;
        mpfr_set_si(r58065, mpfr_cmp(r58063, r58064) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r58067, r58063, r58063, MPFR_RNDN);
        mpfr_set_d(r58068, d, MPFR_RNDN);
        mpfr_mul(r58069, r58068, r58068, MPFR_RNDN);
        mpfr_add(r58070, r58067, r58069, MPFR_RNDN);
        mpfr_sqrt(r58071, r58070, MPFR_RNDN);
        mpfr_div(r58072, r58066, r58071, MPFR_RNDN);
        mpfr_set_d(r58073, a, MPFR_RNDN);
        mpfr_mul(r58074, r58073, r58063, MPFR_RNDN);
        mpfr_set_d(r58075, b, MPFR_RNDN);
        mpfr_mul(r58076, r58075, r58068, MPFR_RNDN);
        mpfr_add(r58077, r58074, r58076, MPFR_RNDN);
        mpfr_div(r58078, r58077, r58071, MPFR_RNDN);
        mpfr_mul(r58079, r58072, r58078, MPFR_RNDN);
        mpfr_add(r58080, r58069, r58067, MPFR_RNDN);
        mpfr_sqrt(r58081, r58080, MPFR_RNDN);
        mpfr_div(r58082, r58073, r58081, MPFR_RNDN);
        if (mpfr_get_si(r58065, MPFR_RNDN)) { mpfr_set(r58083, r58079, MPFR_RNDN); } else { mpfr_set(r58083, r58082, MPFR_RNDN); };
        return mpfr_get_d(r58083, MPFR_RNDN);
}

static mpfr_t r58084, r58085, r58086, r58087, r58088, r58089, r58090, r58091, r58092, r58093, r58094, r58095, r58096, r58097, r58098, r58099, r58100, r58101, r58102, r58103, r58104;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58084);
        mpfr_init_set_str(r58085, "3.194745667675474e+60", 10, MPFR_RNDN);
        mpfr_init(r58086);
        mpfr_init_set_str(r58087, "1", 10, MPFR_RNDN);
        mpfr_init(r58088);
        mpfr_init(r58089);
        mpfr_init(r58090);
        mpfr_init(r58091);
        mpfr_init(r58092);
        mpfr_init(r58093);
        mpfr_init(r58094);
        mpfr_init(r58095);
        mpfr_init(r58096);
        mpfr_init(r58097);
        mpfr_init(r58098);
        mpfr_init(r58099);
        mpfr_init(r58100);
        mpfr_init(r58101);
        mpfr_init(r58102);
        mpfr_init(r58103);
        mpfr_init(r58104);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r58084, c, MPFR_RNDN);
        ;
        mpfr_set_si(r58086, mpfr_cmp(r58084, r58085) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r58088, r58084, r58084, MPFR_RNDN);
        mpfr_set_d(r58089, d, MPFR_RNDN);
        mpfr_mul(r58090, r58089, r58089, MPFR_RNDN);
        mpfr_add(r58091, r58088, r58090, MPFR_RNDN);
        mpfr_sqrt(r58092, r58091, MPFR_RNDN);
        mpfr_div(r58093, r58087, r58092, MPFR_RNDN);
        mpfr_set_d(r58094, a, MPFR_RNDN);
        mpfr_mul(r58095, r58094, r58084, MPFR_RNDN);
        mpfr_set_d(r58096, b, MPFR_RNDN);
        mpfr_mul(r58097, r58096, r58089, MPFR_RNDN);
        mpfr_add(r58098, r58095, r58097, MPFR_RNDN);
        mpfr_div(r58099, r58098, r58092, MPFR_RNDN);
        mpfr_mul(r58100, r58093, r58099, MPFR_RNDN);
        mpfr_add(r58101, r58090, r58088, MPFR_RNDN);
        mpfr_sqrt(r58102, r58101, MPFR_RNDN);
        mpfr_div(r58103, r58094, r58102, MPFR_RNDN);
        if (mpfr_get_si(r58086, MPFR_RNDN)) { mpfr_set(r58104, r58100, MPFR_RNDN); } else { mpfr_set(r58104, r58103, MPFR_RNDN); };
        return mpfr_get_d(r58104, MPFR_RNDN);
}

