#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 r16281700 = a;
        float r16281701 = c;
        float r16281702 = r16281700 * r16281701;
        float r16281703 = b;
        float r16281704 = d;
        float r16281705 = r16281703 * r16281704;
        float r16281706 = r16281702 + r16281705;
        float r16281707 = r16281701 * r16281701;
        float r16281708 = r16281704 * r16281704;
        float r16281709 = r16281707 + r16281708;
        float r16281710 = r16281706 / r16281709;
        return r16281710;
}

double f_id(double a, double b, double c, double d) {
        double r16281711 = a;
        double r16281712 = c;
        double r16281713 = r16281711 * r16281712;
        double r16281714 = b;
        double r16281715 = d;
        double r16281716 = r16281714 * r16281715;
        double r16281717 = r16281713 + r16281716;
        double r16281718 = r16281712 * r16281712;
        double r16281719 = r16281715 * r16281715;
        double r16281720 = r16281718 + r16281719;
        double r16281721 = r16281717 / r16281720;
        return r16281721;
}


double f_of(float a, float b, float c, float d) {
        float r16281722 = a;
        float r16281723 = c;
        float r16281724 = r16281722 * r16281723;
        float r16281725 = b;
        float r16281726 = d;
        float r16281727 = r16281725 * r16281726;
        float r16281728 = r16281724 + r16281727;
        float r16281729 = r16281723 * r16281723;
        float r16281730 = r16281726 * r16281726;
        float r16281731 = r16281729 + r16281730;
        float r16281732 = sqrt(r16281731);
        float r16281733 = r16281728 / r16281732;
        float r16281734 = r16281733 / r16281732;
        return r16281734;
}

double f_od(double a, double b, double c, double d) {
        double r16281735 = a;
        double r16281736 = c;
        double r16281737 = r16281735 * r16281736;
        double r16281738 = b;
        double r16281739 = d;
        double r16281740 = r16281738 * r16281739;
        double r16281741 = r16281737 + r16281740;
        double r16281742 = r16281736 * r16281736;
        double r16281743 = r16281739 * r16281739;
        double r16281744 = r16281742 + r16281743;
        double r16281745 = sqrt(r16281744);
        double r16281746 = r16281741 / r16281745;
        double r16281747 = r16281746 / r16281745;
        return r16281747;
}

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 r16281748, r16281749, r16281750, r16281751, r16281752, r16281753, r16281754, r16281755, r16281756, r16281757, r16281758;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r16281748);
        mpfr_init(r16281749);
        mpfr_init(r16281750);
        mpfr_init(r16281751);
        mpfr_init(r16281752);
        mpfr_init(r16281753);
        mpfr_init(r16281754);
        mpfr_init(r16281755);
        mpfr_init(r16281756);
        mpfr_init(r16281757);
        mpfr_init(r16281758);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r16281748, a, MPFR_RNDN);
        mpfr_set_d(r16281749, c, MPFR_RNDN);
        mpfr_mul(r16281750, r16281748, r16281749, MPFR_RNDN);
        mpfr_set_d(r16281751, b, MPFR_RNDN);
        mpfr_set_d(r16281752, d, MPFR_RNDN);
        mpfr_mul(r16281753, r16281751, r16281752, MPFR_RNDN);
        mpfr_add(r16281754, r16281750, r16281753, MPFR_RNDN);
        mpfr_mul(r16281755, r16281749, r16281749, MPFR_RNDN);
        mpfr_mul(r16281756, r16281752, r16281752, MPFR_RNDN);
        mpfr_add(r16281757, r16281755, r16281756, MPFR_RNDN);
        mpfr_div(r16281758, r16281754, r16281757, MPFR_RNDN);
        return mpfr_get_d(r16281758, MPFR_RNDN);
}

static mpfr_t r16281759, r16281760, r16281761, r16281762, r16281763, r16281764, r16281765, r16281766, r16281767, r16281768, r16281769, r16281770, r16281771;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r16281759);
        mpfr_init(r16281760);
        mpfr_init(r16281761);
        mpfr_init(r16281762);
        mpfr_init(r16281763);
        mpfr_init(r16281764);
        mpfr_init(r16281765);
        mpfr_init(r16281766);
        mpfr_init(r16281767);
        mpfr_init(r16281768);
        mpfr_init(r16281769);
        mpfr_init(r16281770);
        mpfr_init(r16281771);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r16281759, a, MPFR_RNDN);
        mpfr_set_d(r16281760, c, MPFR_RNDN);
        mpfr_mul(r16281761, r16281759, r16281760, MPFR_RNDN);
        mpfr_set_d(r16281762, b, MPFR_RNDN);
        mpfr_set_d(r16281763, d, MPFR_RNDN);
        mpfr_mul(r16281764, r16281762, r16281763, MPFR_RNDN);
        mpfr_add(r16281765, r16281761, r16281764, MPFR_RNDN);
        mpfr_mul(r16281766, r16281760, r16281760, MPFR_RNDN);
        mpfr_mul(r16281767, r16281763, r16281763, MPFR_RNDN);
        mpfr_add(r16281768, r16281766, r16281767, MPFR_RNDN);
        mpfr_sqrt(r16281769, r16281768, MPFR_RNDN);
        mpfr_div(r16281770, r16281765, r16281769, MPFR_RNDN);
        mpfr_div(r16281771, r16281770, r16281769, MPFR_RNDN);
        return mpfr_get_d(r16281771, MPFR_RNDN);
}

static mpfr_t r16281772, r16281773, r16281774, r16281775, r16281776, r16281777, r16281778, r16281779, r16281780, r16281781, r16281782, r16281783, r16281784;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r16281772);
        mpfr_init(r16281773);
        mpfr_init(r16281774);
        mpfr_init(r16281775);
        mpfr_init(r16281776);
        mpfr_init(r16281777);
        mpfr_init(r16281778);
        mpfr_init(r16281779);
        mpfr_init(r16281780);
        mpfr_init(r16281781);
        mpfr_init(r16281782);
        mpfr_init(r16281783);
        mpfr_init(r16281784);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r16281772, a, MPFR_RNDN);
        mpfr_set_d(r16281773, c, MPFR_RNDN);
        mpfr_mul(r16281774, r16281772, r16281773, MPFR_RNDN);
        mpfr_set_d(r16281775, b, MPFR_RNDN);
        mpfr_set_d(r16281776, d, MPFR_RNDN);
        mpfr_mul(r16281777, r16281775, r16281776, MPFR_RNDN);
        mpfr_add(r16281778, r16281774, r16281777, MPFR_RNDN);
        mpfr_mul(r16281779, r16281773, r16281773, MPFR_RNDN);
        mpfr_mul(r16281780, r16281776, r16281776, MPFR_RNDN);
        mpfr_add(r16281781, r16281779, r16281780, MPFR_RNDN);
        mpfr_sqrt(r16281782, r16281781, MPFR_RNDN);
        mpfr_div(r16281783, r16281778, r16281782, MPFR_RNDN);
        mpfr_div(r16281784, r16281783, r16281782, MPFR_RNDN);
        return mpfr_get_d(r16281784, MPFR_RNDN);
}

