#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 r9794 = b;
        float r9795 = c;
        float r9796 = r9794 * r9795;
        float r9797 = a;
        float r9798 = d;
        float r9799 = r9797 * r9798;
        float r9800 = r9796 - r9799;
        float r9801 = r9795 * r9795;
        float r9802 = r9798 * r9798;
        float r9803 = r9801 + r9802;
        float r9804 = r9800 / r9803;
        return r9804;
}

double f_id(double a, double b, double c, double d) {
        double r9805 = b;
        double r9806 = c;
        double r9807 = r9805 * r9806;
        double r9808 = a;
        double r9809 = d;
        double r9810 = r9808 * r9809;
        double r9811 = r9807 - r9810;
        double r9812 = r9806 * r9806;
        double r9813 = r9809 * r9809;
        double r9814 = r9812 + r9813;
        double r9815 = r9811 / r9814;
        return r9815;
}


double f_of(float a, float b, float c, float d) {
        float r9816 = c;
        float r9817 = -1.721423773241346e+118f;
        bool r9818 = r9816 <= r9817;
        float r9819 = b;
        float r9820 = -r9819;
        float r9821 = d;
        float r9822 = hypot(r9821, r9816);
        float r9823 = r9820 / r9822;
        float r9824 = 1.9517103108854082e+135f;
        bool r9825 = r9816 <= r9824;
        float r9826 = r9819 * r9816;
        float r9827 = a;
        float r9828 = r9821 * r9827;
        float r9829 = r9826 - r9828;
        float r9830 = r9829 / r9822;
        float r9831 = r9830 / r9822;
        float r9832 = r9819 / r9822;
        float r9833 = r9825 ? r9831 : r9832;
        float r9834 = r9818 ? r9823 : r9833;
        return r9834;
}

double f_od(double a, double b, double c, double d) {
        double r9835 = c;
        double r9836 = -1.721423773241346e+118;
        bool r9837 = r9835 <= r9836;
        double r9838 = b;
        double r9839 = -r9838;
        double r9840 = d;
        double r9841 = hypot(r9840, r9835);
        double r9842 = r9839 / r9841;
        double r9843 = 1.9517103108854082e+135;
        bool r9844 = r9835 <= r9843;
        double r9845 = r9838 * r9835;
        double r9846 = a;
        double r9847 = r9840 * r9846;
        double r9848 = r9845 - r9847;
        double r9849 = r9848 / r9841;
        double r9850 = r9849 / r9841;
        double r9851 = r9838 / r9841;
        double r9852 = r9844 ? r9850 : r9851;
        double r9853 = r9837 ? r9842 : r9852;
        return r9853;
}

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 r9854, r9855, r9856, r9857, r9858, r9859, r9860, r9861, r9862, r9863, r9864;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9854);
        mpfr_init(r9855);
        mpfr_init(r9856);
        mpfr_init(r9857);
        mpfr_init(r9858);
        mpfr_init(r9859);
        mpfr_init(r9860);
        mpfr_init(r9861);
        mpfr_init(r9862);
        mpfr_init(r9863);
        mpfr_init(r9864);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r9854, b, MPFR_RNDN);
        mpfr_set_d(r9855, c, MPFR_RNDN);
        mpfr_mul(r9856, r9854, r9855, MPFR_RNDN);
        mpfr_set_d(r9857, a, MPFR_RNDN);
        mpfr_set_d(r9858, d, MPFR_RNDN);
        mpfr_mul(r9859, r9857, r9858, MPFR_RNDN);
        mpfr_sub(r9860, r9856, r9859, MPFR_RNDN);
        mpfr_mul(r9861, r9855, r9855, MPFR_RNDN);
        mpfr_mul(r9862, r9858, r9858, MPFR_RNDN);
        mpfr_add(r9863, r9861, r9862, MPFR_RNDN);
        mpfr_div(r9864, r9860, r9863, MPFR_RNDN);
        return mpfr_get_d(r9864, MPFR_RNDN);
}

static mpfr_t r9865, r9866, r9867, r9868, r9869, r9870, r9871, r9872, r9873, r9874, r9875, r9876, r9877, r9878, r9879, r9880, r9881, r9882, r9883;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9865);
        mpfr_init_set_str(r9866, "-1.721423773241346e+118", 10, MPFR_RNDN);
        mpfr_init(r9867);
        mpfr_init(r9868);
        mpfr_init(r9869);
        mpfr_init(r9870);
        mpfr_init(r9871);
        mpfr_init(r9872);
        mpfr_init_set_str(r9873, "1.9517103108854082e+135", 10, MPFR_RNDN);
        mpfr_init(r9874);
        mpfr_init(r9875);
        mpfr_init(r9876);
        mpfr_init(r9877);
        mpfr_init(r9878);
        mpfr_init(r9879);
        mpfr_init(r9880);
        mpfr_init(r9881);
        mpfr_init(r9882);
        mpfr_init(r9883);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r9865, c, MPFR_RNDN);
        ;
        mpfr_set_si(r9867, mpfr_cmp(r9865, r9866) <= 0, MPFR_RNDN);
        mpfr_set_d(r9868, b, MPFR_RNDN);
        mpfr_neg(r9869, r9868, MPFR_RNDN);
        mpfr_set_d(r9870, d, MPFR_RNDN);
        mpfr_hypot(r9871, r9870, r9865, MPFR_RNDN);
        mpfr_div(r9872, r9869, r9871, MPFR_RNDN);
        ;
        mpfr_set_si(r9874, mpfr_cmp(r9865, r9873) <= 0, MPFR_RNDN);
        mpfr_mul(r9875, r9868, r9865, MPFR_RNDN);
        mpfr_set_d(r9876, a, MPFR_RNDN);
        mpfr_mul(r9877, r9870, r9876, MPFR_RNDN);
        mpfr_sub(r9878, r9875, r9877, MPFR_RNDN);
        mpfr_div(r9879, r9878, r9871, MPFR_RNDN);
        mpfr_div(r9880, r9879, r9871, MPFR_RNDN);
        mpfr_div(r9881, r9868, r9871, MPFR_RNDN);
        if (mpfr_get_si(r9874, MPFR_RNDN)) { mpfr_set(r9882, r9880, MPFR_RNDN); } else { mpfr_set(r9882, r9881, MPFR_RNDN); };
        if (mpfr_get_si(r9867, MPFR_RNDN)) { mpfr_set(r9883, r9872, MPFR_RNDN); } else { mpfr_set(r9883, r9882, MPFR_RNDN); };
        return mpfr_get_d(r9883, MPFR_RNDN);
}

static mpfr_t r9884, r9885, r9886, r9887, r9888, r9889, r9890, r9891, r9892, r9893, r9894, r9895, r9896, r9897, r9898, r9899, r9900, r9901, r9902;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9884);
        mpfr_init_set_str(r9885, "-1.721423773241346e+118", 10, MPFR_RNDN);
        mpfr_init(r9886);
        mpfr_init(r9887);
        mpfr_init(r9888);
        mpfr_init(r9889);
        mpfr_init(r9890);
        mpfr_init(r9891);
        mpfr_init_set_str(r9892, "1.9517103108854082e+135", 10, MPFR_RNDN);
        mpfr_init(r9893);
        mpfr_init(r9894);
        mpfr_init(r9895);
        mpfr_init(r9896);
        mpfr_init(r9897);
        mpfr_init(r9898);
        mpfr_init(r9899);
        mpfr_init(r9900);
        mpfr_init(r9901);
        mpfr_init(r9902);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r9884, c, MPFR_RNDN);
        ;
        mpfr_set_si(r9886, mpfr_cmp(r9884, r9885) <= 0, MPFR_RNDN);
        mpfr_set_d(r9887, b, MPFR_RNDN);
        mpfr_neg(r9888, r9887, MPFR_RNDN);
        mpfr_set_d(r9889, d, MPFR_RNDN);
        mpfr_hypot(r9890, r9889, r9884, MPFR_RNDN);
        mpfr_div(r9891, r9888, r9890, MPFR_RNDN);
        ;
        mpfr_set_si(r9893, mpfr_cmp(r9884, r9892) <= 0, MPFR_RNDN);
        mpfr_mul(r9894, r9887, r9884, MPFR_RNDN);
        mpfr_set_d(r9895, a, MPFR_RNDN);
        mpfr_mul(r9896, r9889, r9895, MPFR_RNDN);
        mpfr_sub(r9897, r9894, r9896, MPFR_RNDN);
        mpfr_div(r9898, r9897, r9890, MPFR_RNDN);
        mpfr_div(r9899, r9898, r9890, MPFR_RNDN);
        mpfr_div(r9900, r9887, r9890, MPFR_RNDN);
        if (mpfr_get_si(r9893, MPFR_RNDN)) { mpfr_set(r9901, r9899, MPFR_RNDN); } else { mpfr_set(r9901, r9900, MPFR_RNDN); };
        if (mpfr_get_si(r9886, MPFR_RNDN)) { mpfr_set(r9902, r9891, MPFR_RNDN); } else { mpfr_set(r9902, r9901, MPFR_RNDN); };
        return mpfr_get_d(r9902, MPFR_RNDN);
}

