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

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


double f_of(float a, float b, float c, float d) {
        float r9818 = a;
        float r9819 = d;
        float r9820 = -r9819;
        float r9821 = c;
        float r9822 = hypot(r9821, r9819);
        float r9823 = r9820 / r9822;
        float r9824 = r9818 * r9823;
        float r9825 = b;
        float r9826 = 1.0f;
        float r9827 = r9826 / r9822;
        float r9828 = r9827 * r9821;
        float r9829 = r9825 * r9828;
        float r9830 = r9824 + r9829;
        float r9831 = r9830 / r9822;
        return r9831;
}

double f_od(double a, double b, double c, double d) {
        double r9832 = a;
        double r9833 = d;
        double r9834 = -r9833;
        double r9835 = c;
        double r9836 = hypot(r9835, r9833);
        double r9837 = r9834 / r9836;
        double r9838 = r9832 * r9837;
        double r9839 = b;
        double r9840 = 1.0;
        double r9841 = r9840 / r9836;
        double r9842 = r9841 * r9835;
        double r9843 = r9839 * r9842;
        double r9844 = r9838 + r9843;
        double r9845 = r9844 / r9836;
        return r9845;
}

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 r9846, r9847, r9848, r9849, r9850, r9851, r9852, r9853, r9854, r9855, r9856;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9846);
        mpfr_init(r9847);
        mpfr_init(r9848);
        mpfr_init(r9849);
        mpfr_init(r9850);
        mpfr_init(r9851);
        mpfr_init(r9852);
        mpfr_init(r9853);
        mpfr_init(r9854);
        mpfr_init(r9855);
        mpfr_init(r9856);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r9846, b, MPFR_RNDN);
        mpfr_set_d(r9847, c, MPFR_RNDN);
        mpfr_mul(r9848, r9846, r9847, MPFR_RNDN);
        mpfr_set_d(r9849, a, MPFR_RNDN);
        mpfr_set_d(r9850, d, MPFR_RNDN);
        mpfr_mul(r9851, r9849, r9850, MPFR_RNDN);
        mpfr_sub(r9852, r9848, r9851, MPFR_RNDN);
        mpfr_mul(r9853, r9847, r9847, MPFR_RNDN);
        mpfr_mul(r9854, r9850, r9850, MPFR_RNDN);
        mpfr_add(r9855, r9853, r9854, MPFR_RNDN);
        mpfr_div(r9856, r9852, r9855, MPFR_RNDN);
        return mpfr_get_d(r9856, MPFR_RNDN);
}

static mpfr_t r9857, r9858, r9859, r9860, r9861, r9862, r9863, r9864, r9865, r9866, r9867, r9868, r9869, r9870;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9857);
        mpfr_init(r9858);
        mpfr_init(r9859);
        mpfr_init(r9860);
        mpfr_init(r9861);
        mpfr_init(r9862);
        mpfr_init(r9863);
        mpfr_init(r9864);
        mpfr_init_set_str(r9865, "1", 10, MPFR_RNDN);
        mpfr_init(r9866);
        mpfr_init(r9867);
        mpfr_init(r9868);
        mpfr_init(r9869);
        mpfr_init(r9870);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r9857, a, MPFR_RNDN);
        mpfr_set_d(r9858, d, MPFR_RNDN);
        mpfr_neg(r9859, r9858, MPFR_RNDN);
        mpfr_set_d(r9860, c, MPFR_RNDN);
        mpfr_hypot(r9861, r9860, r9858, MPFR_RNDN);
        mpfr_div(r9862, r9859, r9861, MPFR_RNDN);
        mpfr_mul(r9863, r9857, r9862, MPFR_RNDN);
        mpfr_set_d(r9864, b, MPFR_RNDN);
        ;
        mpfr_div(r9866, r9865, r9861, MPFR_RNDN);
        mpfr_mul(r9867, r9866, r9860, MPFR_RNDN);
        mpfr_mul(r9868, r9864, r9867, MPFR_RNDN);
        mpfr_add(r9869, r9863, r9868, MPFR_RNDN);
        mpfr_div(r9870, r9869, r9861, MPFR_RNDN);
        return mpfr_get_d(r9870, MPFR_RNDN);
}

static mpfr_t r9871, r9872, r9873, r9874, r9875, r9876, r9877, r9878, r9879, r9880, r9881, r9882, r9883, r9884;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9871);
        mpfr_init(r9872);
        mpfr_init(r9873);
        mpfr_init(r9874);
        mpfr_init(r9875);
        mpfr_init(r9876);
        mpfr_init(r9877);
        mpfr_init(r9878);
        mpfr_init_set_str(r9879, "1", 10, MPFR_RNDN);
        mpfr_init(r9880);
        mpfr_init(r9881);
        mpfr_init(r9882);
        mpfr_init(r9883);
        mpfr_init(r9884);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r9871, a, MPFR_RNDN);
        mpfr_set_d(r9872, d, MPFR_RNDN);
        mpfr_neg(r9873, r9872, MPFR_RNDN);
        mpfr_set_d(r9874, c, MPFR_RNDN);
        mpfr_hypot(r9875, r9874, r9872, MPFR_RNDN);
        mpfr_div(r9876, r9873, r9875, MPFR_RNDN);
        mpfr_mul(r9877, r9871, r9876, MPFR_RNDN);
        mpfr_set_d(r9878, b, MPFR_RNDN);
        ;
        mpfr_div(r9880, r9879, r9875, MPFR_RNDN);
        mpfr_mul(r9881, r9880, r9874, MPFR_RNDN);
        mpfr_mul(r9882, r9878, r9881, MPFR_RNDN);
        mpfr_add(r9883, r9877, r9882, MPFR_RNDN);
        mpfr_div(r9884, r9883, r9875, MPFR_RNDN);
        return mpfr_get_d(r9884, MPFR_RNDN);
}

