#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 r57944 = a;
        float r57945 = c;
        float r57946 = r57944 * r57945;
        float r57947 = b;
        float r57948 = d;
        float r57949 = r57947 * r57948;
        float r57950 = r57946 + r57949;
        float r57951 = r57945 * r57945;
        float r57952 = r57948 * r57948;
        float r57953 = r57951 + r57952;
        float r57954 = r57950 / r57953;
        return r57954;
}

double f_id(double a, double b, double c, double d) {
        double r57955 = a;
        double r57956 = c;
        double r57957 = r57955 * r57956;
        double r57958 = b;
        double r57959 = d;
        double r57960 = r57958 * r57959;
        double r57961 = r57957 + r57960;
        double r57962 = r57956 * r57956;
        double r57963 = r57959 * r57959;
        double r57964 = r57962 + r57963;
        double r57965 = r57961 / r57964;
        return r57965;
}


double f_of(float a, float b, float c, float d) {
        float r57966 = c;
        float r57967 = 3.215973189848367e+60;
        bool r57968 = r57966 <= r57967;
        float r57969 = 1;
        float r57970 = r57966 * r57966;
        float r57971 = d;
        float r57972 = r57971 * r57971;
        float r57973 = r57970 + r57972;
        float r57974 = sqrt(r57973);
        float r57975 = r57969 / r57974;
        float r57976 = a;
        float r57977 = r57976 * r57966;
        float r57978 = b;
        float r57979 = r57978 * r57971;
        float r57980 = r57977 + r57979;
        float r57981 = r57980 / r57974;
        float r57982 = r57975 * r57981;
        float r57983 = r57972 + r57970;
        float r57984 = sqrt(r57983);
        float r57985 = r57976 / r57984;
        float r57986 = r57968 ? r57982 : r57985;
        return r57986;
}

double f_od(double a, double b, double c, double d) {
        double r57987 = c;
        double r57988 = 3.215973189848367e+60;
        bool r57989 = r57987 <= r57988;
        double r57990 = 1;
        double r57991 = r57987 * r57987;
        double r57992 = d;
        double r57993 = r57992 * r57992;
        double r57994 = r57991 + r57993;
        double r57995 = sqrt(r57994);
        double r57996 = r57990 / r57995;
        double r57997 = a;
        double r57998 = r57997 * r57987;
        double r57999 = b;
        double r58000 = r57999 * r57992;
        double r58001 = r57998 + r58000;
        double r58002 = r58001 / r57995;
        double r58003 = r57996 * r58002;
        double r58004 = r57993 + r57991;
        double r58005 = sqrt(r58004);
        double r58006 = r57997 / r58005;
        double r58007 = r57989 ? r58003 : r58006;
        return r58007;
}

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 r58008, r58009, r58010, r58011, r58012, r58013, r58014, r58015, r58016, r58017, r58018;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r58008);
        mpfr_init(r58009);
        mpfr_init(r58010);
        mpfr_init(r58011);
        mpfr_init(r58012);
        mpfr_init(r58013);
        mpfr_init(r58014);
        mpfr_init(r58015);
        mpfr_init(r58016);
        mpfr_init(r58017);
        mpfr_init(r58018);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r58008, a, MPFR_RNDN);
        mpfr_set_d(r58009, c, MPFR_RNDN);
        mpfr_mul(r58010, r58008, r58009, MPFR_RNDN);
        mpfr_set_d(r58011, b, MPFR_RNDN);
        mpfr_set_d(r58012, d, MPFR_RNDN);
        mpfr_mul(r58013, r58011, r58012, MPFR_RNDN);
        mpfr_add(r58014, r58010, r58013, MPFR_RNDN);
        mpfr_mul(r58015, r58009, r58009, MPFR_RNDN);
        mpfr_mul(r58016, r58012, r58012, MPFR_RNDN);
        mpfr_add(r58017, r58015, r58016, MPFR_RNDN);
        mpfr_div(r58018, r58014, r58017, MPFR_RNDN);
        return mpfr_get_d(r58018, MPFR_RNDN);
}

static mpfr_t r58019, r58020, r58021, r58022, r58023, r58024, r58025, r58026, r58027, r58028, r58029, r58030, r58031, r58032, r58033, r58034, r58035, r58036, r58037, r58038, r58039;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58019);
        mpfr_init_set_str(r58020, "3.215973189848367e+60", 10, MPFR_RNDN);
        mpfr_init(r58021);
        mpfr_init_set_str(r58022, "1", 10, MPFR_RNDN);
        mpfr_init(r58023);
        mpfr_init(r58024);
        mpfr_init(r58025);
        mpfr_init(r58026);
        mpfr_init(r58027);
        mpfr_init(r58028);
        mpfr_init(r58029);
        mpfr_init(r58030);
        mpfr_init(r58031);
        mpfr_init(r58032);
        mpfr_init(r58033);
        mpfr_init(r58034);
        mpfr_init(r58035);
        mpfr_init(r58036);
        mpfr_init(r58037);
        mpfr_init(r58038);
        mpfr_init(r58039);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r58019, c, MPFR_RNDN);
        ;
        mpfr_set_si(r58021, mpfr_cmp(r58019, r58020) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r58023, r58019, r58019, MPFR_RNDN);
        mpfr_set_d(r58024, d, MPFR_RNDN);
        mpfr_mul(r58025, r58024, r58024, MPFR_RNDN);
        mpfr_add(r58026, r58023, r58025, MPFR_RNDN);
        mpfr_sqrt(r58027, r58026, MPFR_RNDN);
        mpfr_div(r58028, r58022, r58027, MPFR_RNDN);
        mpfr_set_d(r58029, a, MPFR_RNDN);
        mpfr_mul(r58030, r58029, r58019, MPFR_RNDN);
        mpfr_set_d(r58031, b, MPFR_RNDN);
        mpfr_mul(r58032, r58031, r58024, MPFR_RNDN);
        mpfr_add(r58033, r58030, r58032, MPFR_RNDN);
        mpfr_div(r58034, r58033, r58027, MPFR_RNDN);
        mpfr_mul(r58035, r58028, r58034, MPFR_RNDN);
        mpfr_add(r58036, r58025, r58023, MPFR_RNDN);
        mpfr_sqrt(r58037, r58036, MPFR_RNDN);
        mpfr_div(r58038, r58029, r58037, MPFR_RNDN);
        if (mpfr_get_si(r58021, MPFR_RNDN)) { mpfr_set(r58039, r58035, MPFR_RNDN); } else { mpfr_set(r58039, r58038, MPFR_RNDN); };
        return mpfr_get_d(r58039, MPFR_RNDN);
}

static mpfr_t r58040, r58041, r58042, r58043, r58044, r58045, r58046, r58047, r58048, r58049, r58050, r58051, r58052, r58053, r58054, r58055, r58056, r58057, r58058, r58059, r58060;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r58040);
        mpfr_init_set_str(r58041, "3.215973189848367e+60", 10, MPFR_RNDN);
        mpfr_init(r58042);
        mpfr_init_set_str(r58043, "1", 10, MPFR_RNDN);
        mpfr_init(r58044);
        mpfr_init(r58045);
        mpfr_init(r58046);
        mpfr_init(r58047);
        mpfr_init(r58048);
        mpfr_init(r58049);
        mpfr_init(r58050);
        mpfr_init(r58051);
        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);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r58040, c, MPFR_RNDN);
        ;
        mpfr_set_si(r58042, mpfr_cmp(r58040, r58041) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r58044, r58040, r58040, MPFR_RNDN);
        mpfr_set_d(r58045, d, MPFR_RNDN);
        mpfr_mul(r58046, r58045, r58045, MPFR_RNDN);
        mpfr_add(r58047, r58044, r58046, MPFR_RNDN);
        mpfr_sqrt(r58048, r58047, MPFR_RNDN);
        mpfr_div(r58049, r58043, r58048, MPFR_RNDN);
        mpfr_set_d(r58050, a, MPFR_RNDN);
        mpfr_mul(r58051, r58050, r58040, MPFR_RNDN);
        mpfr_set_d(r58052, b, MPFR_RNDN);
        mpfr_mul(r58053, r58052, r58045, MPFR_RNDN);
        mpfr_add(r58054, r58051, r58053, MPFR_RNDN);
        mpfr_div(r58055, r58054, r58048, MPFR_RNDN);
        mpfr_mul(r58056, r58049, r58055, MPFR_RNDN);
        mpfr_add(r58057, r58046, r58044, MPFR_RNDN);
        mpfr_sqrt(r58058, r58057, MPFR_RNDN);
        mpfr_div(r58059, r58050, r58058, MPFR_RNDN);
        if (mpfr_get_si(r58042, MPFR_RNDN)) { mpfr_set(r58060, r58056, MPFR_RNDN); } else { mpfr_set(r58060, r58059, MPFR_RNDN); };
        return mpfr_get_d(r58060, MPFR_RNDN);
}

