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

char *name = "Complex division, imag part";

double f_if(float a, float b, float c, float d) {
        float r10707 = b;
        float r10708 = c;
        float r10709 = r10707 * r10708;
        float r10710 = a;
        float r10711 = d;
        float r10712 = r10710 * r10711;
        float r10713 = r10709 - r10712;
        float r10714 = r10708 * r10708;
        float r10715 = r10711 * r10711;
        float r10716 = r10714 + r10715;
        float r10717 = r10713 / r10716;
        return r10717;
}

double f_id(double a, double b, double c, double d) {
        double r10718 = b;
        double r10719 = c;
        double r10720 = r10718 * r10719;
        double r10721 = a;
        double r10722 = d;
        double r10723 = r10721 * r10722;
        double r10724 = r10720 - r10723;
        double r10725 = r10719 * r10719;
        double r10726 = r10722 * r10722;
        double r10727 = r10725 + r10726;
        double r10728 = r10724 / r10727;
        return r10728;
}


double f_of(float a, float b, float c, float d) {
        float r10729 = b;
        float r10730 = c;
        float r10731 = r10730 * r10730;
        float r10732 = d;
        float r10733 = r10732 * r10732;
        float r10734 = r10731 + r10733;
        float r10735 = sqrt(r10734);
        float r10736 = r10729 / r10735;
        float r10737 = r10730 / r10735;
        float r10738 = r10736 * r10737;
        float r10739 = a;
        float r10740 = r10739 / r10735;
        float r10741 = r10732 / r10735;
        float r10742 = r10740 * r10741;
        float r10743 = r10738 - r10742;
        return r10743;
}

double f_od(double a, double b, double c, double d) {
        double r10744 = b;
        double r10745 = c;
        double r10746 = r10745 * r10745;
        double r10747 = d;
        double r10748 = r10747 * r10747;
        double r10749 = r10746 + r10748;
        double r10750 = sqrt(r10749);
        double r10751 = r10744 / r10750;
        double r10752 = r10745 / r10750;
        double r10753 = r10751 * r10752;
        double r10754 = a;
        double r10755 = r10754 / r10750;
        double r10756 = r10747 / r10750;
        double r10757 = r10755 * r10756;
        double r10758 = r10753 - r10757;
        return r10758;
}

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 r10759, r10760, r10761, r10762, r10763, r10764, r10765, r10766, r10767, r10768, r10769;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10759);
        mpfr_init(r10760);
        mpfr_init(r10761);
        mpfr_init(r10762);
        mpfr_init(r10763);
        mpfr_init(r10764);
        mpfr_init(r10765);
        mpfr_init(r10766);
        mpfr_init(r10767);
        mpfr_init(r10768);
        mpfr_init(r10769);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r10759, b, MPFR_RNDN);
        mpfr_set_d(r10760, c, MPFR_RNDN);
        mpfr_mul(r10761, r10759, r10760, MPFR_RNDN);
        mpfr_set_d(r10762, a, MPFR_RNDN);
        mpfr_set_d(r10763, d, MPFR_RNDN);
        mpfr_mul(r10764, r10762, r10763, MPFR_RNDN);
        mpfr_sub(r10765, r10761, r10764, MPFR_RNDN);
        mpfr_mul(r10766, r10760, r10760, MPFR_RNDN);
        mpfr_mul(r10767, r10763, r10763, MPFR_RNDN);
        mpfr_add(r10768, r10766, r10767, MPFR_RNDN);
        mpfr_div(r10769, r10765, r10768, MPFR_RNDN);
        return mpfr_get_d(r10769, MPFR_RNDN);
}

static mpfr_t r10770, r10771, r10772, r10773, r10774, r10775, r10776, r10777, r10778, r10779, r10780, r10781, r10782, r10783, r10784;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10770);
        mpfr_init(r10771);
        mpfr_init(r10772);
        mpfr_init(r10773);
        mpfr_init(r10774);
        mpfr_init(r10775);
        mpfr_init(r10776);
        mpfr_init(r10777);
        mpfr_init(r10778);
        mpfr_init(r10779);
        mpfr_init(r10780);
        mpfr_init(r10781);
        mpfr_init(r10782);
        mpfr_init(r10783);
        mpfr_init(r10784);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r10770, b, MPFR_RNDN);
        mpfr_set_d(r10771, c, MPFR_RNDN);
        mpfr_mul(r10772, r10771, r10771, MPFR_RNDN);
        mpfr_set_d(r10773, d, MPFR_RNDN);
        mpfr_mul(r10774, r10773, r10773, MPFR_RNDN);
        mpfr_add(r10775, r10772, r10774, MPFR_RNDN);
        mpfr_sqrt(r10776, r10775, MPFR_RNDN);
        mpfr_div(r10777, r10770, r10776, MPFR_RNDN);
        mpfr_div(r10778, r10771, r10776, MPFR_RNDN);
        mpfr_mul(r10779, r10777, r10778, MPFR_RNDN);
        mpfr_set_d(r10780, a, MPFR_RNDN);
        mpfr_div(r10781, r10780, r10776, MPFR_RNDN);
        mpfr_div(r10782, r10773, r10776, MPFR_RNDN);
        mpfr_mul(r10783, r10781, r10782, MPFR_RNDN);
        mpfr_sub(r10784, r10779, r10783, MPFR_RNDN);
        return mpfr_get_d(r10784, MPFR_RNDN);
}

static mpfr_t r10785, r10786, r10787, r10788, r10789, r10790, r10791, r10792, r10793, r10794, r10795, r10796, r10797, r10798, r10799;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10785);
        mpfr_init(r10786);
        mpfr_init(r10787);
        mpfr_init(r10788);
        mpfr_init(r10789);
        mpfr_init(r10790);
        mpfr_init(r10791);
        mpfr_init(r10792);
        mpfr_init(r10793);
        mpfr_init(r10794);
        mpfr_init(r10795);
        mpfr_init(r10796);
        mpfr_init(r10797);
        mpfr_init(r10798);
        mpfr_init(r10799);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r10785, b, MPFR_RNDN);
        mpfr_set_d(r10786, c, MPFR_RNDN);
        mpfr_mul(r10787, r10786, r10786, MPFR_RNDN);
        mpfr_set_d(r10788, d, MPFR_RNDN);
        mpfr_mul(r10789, r10788, r10788, MPFR_RNDN);
        mpfr_add(r10790, r10787, r10789, MPFR_RNDN);
        mpfr_sqrt(r10791, r10790, MPFR_RNDN);
        mpfr_div(r10792, r10785, r10791, MPFR_RNDN);
        mpfr_div(r10793, r10786, r10791, MPFR_RNDN);
        mpfr_mul(r10794, r10792, r10793, MPFR_RNDN);
        mpfr_set_d(r10795, a, MPFR_RNDN);
        mpfr_div(r10796, r10795, r10791, MPFR_RNDN);
        mpfr_div(r10797, r10788, r10791, MPFR_RNDN);
        mpfr_mul(r10798, r10796, r10797, MPFR_RNDN);
        mpfr_sub(r10799, r10794, r10798, MPFR_RNDN);
        return mpfr_get_d(r10799, MPFR_RNDN);
}

