#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 r57618 = a;
        float r57619 = c;
        float r57620 = r57618 * r57619;
        float r57621 = b;
        float r57622 = d;
        float r57623 = r57621 * r57622;
        float r57624 = r57620 + r57623;
        float r57625 = r57619 * r57619;
        float r57626 = r57622 * r57622;
        float r57627 = r57625 + r57626;
        float r57628 = r57624 / r57627;
        return r57628;
}

double f_id(double a, double b, double c, double d) {
        double r57629 = a;
        double r57630 = c;
        double r57631 = r57629 * r57630;
        double r57632 = b;
        double r57633 = d;
        double r57634 = r57632 * r57633;
        double r57635 = r57631 + r57634;
        double r57636 = r57630 * r57630;
        double r57637 = r57633 * r57633;
        double r57638 = r57636 + r57637;
        double r57639 = r57635 / r57638;
        return r57639;
}


double f_of(float a, float b, float c, float d) {
        float r57640 = a;
        float r57641 = c;
        float r57642 = r57640 * r57641;
        float r57643 = b;
        float r57644 = d;
        float r57645 = r57643 * r57644;
        float r57646 = r57642 + r57645;
        float r57647 = r57641 * r57641;
        float r57648 = r57644 * r57644;
        float r57649 = r57647 + r57648;
        float r57650 = r57646 / r57649;
        return r57650;
}

double f_od(double a, double b, double c, double d) {
        double r57651 = a;
        double r57652 = c;
        double r57653 = r57651 * r57652;
        double r57654 = b;
        double r57655 = d;
        double r57656 = r57654 * r57655;
        double r57657 = r57653 + r57656;
        double r57658 = r57652 * r57652;
        double r57659 = r57655 * r57655;
        double r57660 = r57658 + r57659;
        double r57661 = r57657 / r57660;
        return r57661;
}

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 r57662, r57663, r57664, r57665, r57666, r57667, r57668, r57669, r57670, r57671, r57672;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r57662);
        mpfr_init(r57663);
        mpfr_init(r57664);
        mpfr_init(r57665);
        mpfr_init(r57666);
        mpfr_init(r57667);
        mpfr_init(r57668);
        mpfr_init(r57669);
        mpfr_init(r57670);
        mpfr_init(r57671);
        mpfr_init(r57672);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r57662, a, MPFR_RNDN);
        mpfr_set_d(r57663, c, MPFR_RNDN);
        mpfr_mul(r57664, r57662, r57663, MPFR_RNDN);
        mpfr_set_d(r57665, b, MPFR_RNDN);
        mpfr_set_d(r57666, d, MPFR_RNDN);
        mpfr_mul(r57667, r57665, r57666, MPFR_RNDN);
        mpfr_add(r57668, r57664, r57667, MPFR_RNDN);
        mpfr_sqr(r57669, r57663, MPFR_RNDN);
        mpfr_sqr(r57670, r57666, MPFR_RNDN);
        mpfr_add(r57671, r57669, r57670, MPFR_RNDN);
        mpfr_div(r57672, r57668, r57671, MPFR_RNDN);
        return mpfr_get_d(r57672, MPFR_RNDN);
}

static mpfr_t r57673, r57674, r57675, r57676, r57677, r57678, r57679, r57680, r57681, r57682, r57683;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r57673);
        mpfr_init(r57674);
        mpfr_init(r57675);
        mpfr_init(r57676);
        mpfr_init(r57677);
        mpfr_init(r57678);
        mpfr_init(r57679);
        mpfr_init(r57680);
        mpfr_init(r57681);
        mpfr_init(r57682);
        mpfr_init(r57683);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r57673, a, MPFR_RNDN);
        mpfr_set_d(r57674, c, MPFR_RNDN);
        mpfr_mul(r57675, r57673, r57674, MPFR_RNDN);
        mpfr_set_d(r57676, b, MPFR_RNDN);
        mpfr_set_d(r57677, d, MPFR_RNDN);
        mpfr_mul(r57678, r57676, r57677, MPFR_RNDN);
        mpfr_add(r57679, r57675, r57678, MPFR_RNDN);
        mpfr_sqr(r57680, r57674, MPFR_RNDN);
        mpfr_sqr(r57681, r57677, MPFR_RNDN);
        mpfr_add(r57682, r57680, r57681, MPFR_RNDN);
        mpfr_div(r57683, r57679, r57682, MPFR_RNDN);
        return mpfr_get_d(r57683, MPFR_RNDN);
}

static mpfr_t r57684, r57685, r57686, r57687, r57688, r57689, r57690, r57691, r57692, r57693, r57694;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r57684);
        mpfr_init(r57685);
        mpfr_init(r57686);
        mpfr_init(r57687);
        mpfr_init(r57688);
        mpfr_init(r57689);
        mpfr_init(r57690);
        mpfr_init(r57691);
        mpfr_init(r57692);
        mpfr_init(r57693);
        mpfr_init(r57694);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r57684, a, MPFR_RNDN);
        mpfr_set_d(r57685, c, MPFR_RNDN);
        mpfr_mul(r57686, r57684, r57685, MPFR_RNDN);
        mpfr_set_d(r57687, b, MPFR_RNDN);
        mpfr_set_d(r57688, d, MPFR_RNDN);
        mpfr_mul(r57689, r57687, r57688, MPFR_RNDN);
        mpfr_add(r57690, r57686, r57689, MPFR_RNDN);
        mpfr_sqr(r57691, r57685, MPFR_RNDN);
        mpfr_sqr(r57692, r57688, MPFR_RNDN);
        mpfr_add(r57693, r57691, r57692, MPFR_RNDN);
        mpfr_div(r57694, r57690, r57693, MPFR_RNDN);
        return mpfr_get_d(r57694, MPFR_RNDN);
}

