#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 r56799 = a;
        float r56800 = c;
        float r56801 = r56799 * r56800;
        float r56802 = b;
        float r56803 = d;
        float r56804 = r56802 * r56803;
        float r56805 = r56801 + r56804;
        float r56806 = r56800 * r56800;
        float r56807 = r56803 * r56803;
        float r56808 = r56806 + r56807;
        float r56809 = r56805 / r56808;
        return r56809;
}

double f_id(double a, double b, double c, double d) {
        double r56810 = a;
        double r56811 = c;
        double r56812 = r56810 * r56811;
        double r56813 = b;
        double r56814 = d;
        double r56815 = r56813 * r56814;
        double r56816 = r56812 + r56815;
        double r56817 = r56811 * r56811;
        double r56818 = r56814 * r56814;
        double r56819 = r56817 + r56818;
        double r56820 = r56816 / r56819;
        return r56820;
}


double f_of(float a, float b, float c, float d) {
        float r56821 = c;
        float r56822 = 3.194745667675474e+60;
        bool r56823 = r56821 <= r56822;
        float r56824 = 1;
        float r56825 = r56821 * r56821;
        float r56826 = d;
        float r56827 = r56826 * r56826;
        float r56828 = r56825 + r56827;
        float r56829 = sqrt(r56828);
        float r56830 = r56824 / r56829;
        float r56831 = a;
        float r56832 = r56831 * r56821;
        float r56833 = b;
        float r56834 = r56833 * r56826;
        float r56835 = r56832 + r56834;
        float r56836 = r56835 / r56829;
        float r56837 = r56830 * r56836;
        float r56838 = r56827 + r56825;
        float r56839 = sqrt(r56838);
        float r56840 = r56831 / r56839;
        float r56841 = r56823 ? r56837 : r56840;
        return r56841;
}

double f_od(double a, double b, double c, double d) {
        double r56842 = c;
        double r56843 = 3.194745667675474e+60;
        bool r56844 = r56842 <= r56843;
        double r56845 = 1;
        double r56846 = r56842 * r56842;
        double r56847 = d;
        double r56848 = r56847 * r56847;
        double r56849 = r56846 + r56848;
        double r56850 = sqrt(r56849);
        double r56851 = r56845 / r56850;
        double r56852 = a;
        double r56853 = r56852 * r56842;
        double r56854 = b;
        double r56855 = r56854 * r56847;
        double r56856 = r56853 + r56855;
        double r56857 = r56856 / r56850;
        double r56858 = r56851 * r56857;
        double r56859 = r56848 + r56846;
        double r56860 = sqrt(r56859);
        double r56861 = r56852 / r56860;
        double r56862 = r56844 ? r56858 : r56861;
        return r56862;
}

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 r56863, r56864, r56865, r56866, r56867, r56868, r56869, r56870, r56871, r56872, r56873;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56863);
        mpfr_init(r56864);
        mpfr_init(r56865);
        mpfr_init(r56866);
        mpfr_init(r56867);
        mpfr_init(r56868);
        mpfr_init(r56869);
        mpfr_init(r56870);
        mpfr_init(r56871);
        mpfr_init(r56872);
        mpfr_init(r56873);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r56863, a, MPFR_RNDN);
        mpfr_set_d(r56864, c, MPFR_RNDN);
        mpfr_mul(r56865, r56863, r56864, MPFR_RNDN);
        mpfr_set_d(r56866, b, MPFR_RNDN);
        mpfr_set_d(r56867, d, MPFR_RNDN);
        mpfr_mul(r56868, r56866, r56867, MPFR_RNDN);
        mpfr_add(r56869, r56865, r56868, MPFR_RNDN);
        mpfr_mul(r56870, r56864, r56864, MPFR_RNDN);
        mpfr_mul(r56871, r56867, r56867, MPFR_RNDN);
        mpfr_add(r56872, r56870, r56871, MPFR_RNDN);
        mpfr_div(r56873, r56869, r56872, MPFR_RNDN);
        return mpfr_get_d(r56873, MPFR_RNDN);
}

static mpfr_t r56874, r56875, r56876, r56877, r56878, r56879, r56880, r56881, r56882, r56883, r56884, r56885, r56886, r56887, r56888, r56889, r56890, r56891, r56892, r56893, r56894;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56874);
        mpfr_init_set_str(r56875, "3.194745667675474e+60", 10, MPFR_RNDN);
        mpfr_init(r56876);
        mpfr_init_set_str(r56877, "1", 10, MPFR_RNDN);
        mpfr_init(r56878);
        mpfr_init(r56879);
        mpfr_init(r56880);
        mpfr_init(r56881);
        mpfr_init(r56882);
        mpfr_init(r56883);
        mpfr_init(r56884);
        mpfr_init(r56885);
        mpfr_init(r56886);
        mpfr_init(r56887);
        mpfr_init(r56888);
        mpfr_init(r56889);
        mpfr_init(r56890);
        mpfr_init(r56891);
        mpfr_init(r56892);
        mpfr_init(r56893);
        mpfr_init(r56894);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r56874, c, MPFR_RNDN);
        ;
        mpfr_set_si(r56876, mpfr_cmp(r56874, r56875) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r56878, r56874, r56874, MPFR_RNDN);
        mpfr_set_d(r56879, d, MPFR_RNDN);
        mpfr_mul(r56880, r56879, r56879, MPFR_RNDN);
        mpfr_add(r56881, r56878, r56880, MPFR_RNDN);
        mpfr_sqrt(r56882, r56881, MPFR_RNDN);
        mpfr_div(r56883, r56877, r56882, MPFR_RNDN);
        mpfr_set_d(r56884, a, MPFR_RNDN);
        mpfr_mul(r56885, r56884, r56874, MPFR_RNDN);
        mpfr_set_d(r56886, b, MPFR_RNDN);
        mpfr_mul(r56887, r56886, r56879, MPFR_RNDN);
        mpfr_add(r56888, r56885, r56887, MPFR_RNDN);
        mpfr_div(r56889, r56888, r56882, MPFR_RNDN);
        mpfr_mul(r56890, r56883, r56889, MPFR_RNDN);
        mpfr_add(r56891, r56880, r56878, MPFR_RNDN);
        mpfr_sqrt(r56892, r56891, MPFR_RNDN);
        mpfr_div(r56893, r56884, r56892, MPFR_RNDN);
        if (mpfr_get_si(r56876, MPFR_RNDN)) { mpfr_set(r56894, r56890, MPFR_RNDN); } else { mpfr_set(r56894, r56893, MPFR_RNDN); };
        return mpfr_get_d(r56894, MPFR_RNDN);
}

static mpfr_t r56895, r56896, r56897, r56898, r56899, r56900, r56901, r56902, r56903, r56904, r56905, r56906, r56907, r56908, r56909, r56910, r56911, r56912, r56913, r56914, r56915;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56895);
        mpfr_init_set_str(r56896, "3.194745667675474e+60", 10, MPFR_RNDN);
        mpfr_init(r56897);
        mpfr_init_set_str(r56898, "1", 10, MPFR_RNDN);
        mpfr_init(r56899);
        mpfr_init(r56900);
        mpfr_init(r56901);
        mpfr_init(r56902);
        mpfr_init(r56903);
        mpfr_init(r56904);
        mpfr_init(r56905);
        mpfr_init(r56906);
        mpfr_init(r56907);
        mpfr_init(r56908);
        mpfr_init(r56909);
        mpfr_init(r56910);
        mpfr_init(r56911);
        mpfr_init(r56912);
        mpfr_init(r56913);
        mpfr_init(r56914);
        mpfr_init(r56915);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r56895, c, MPFR_RNDN);
        ;
        mpfr_set_si(r56897, mpfr_cmp(r56895, r56896) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r56899, r56895, r56895, MPFR_RNDN);
        mpfr_set_d(r56900, d, MPFR_RNDN);
        mpfr_mul(r56901, r56900, r56900, MPFR_RNDN);
        mpfr_add(r56902, r56899, r56901, MPFR_RNDN);
        mpfr_sqrt(r56903, r56902, MPFR_RNDN);
        mpfr_div(r56904, r56898, r56903, MPFR_RNDN);
        mpfr_set_d(r56905, a, MPFR_RNDN);
        mpfr_mul(r56906, r56905, r56895, MPFR_RNDN);
        mpfr_set_d(r56907, b, MPFR_RNDN);
        mpfr_mul(r56908, r56907, r56900, MPFR_RNDN);
        mpfr_add(r56909, r56906, r56908, MPFR_RNDN);
        mpfr_div(r56910, r56909, r56903, MPFR_RNDN);
        mpfr_mul(r56911, r56904, r56910, MPFR_RNDN);
        mpfr_add(r56912, r56901, r56899, MPFR_RNDN);
        mpfr_sqrt(r56913, r56912, MPFR_RNDN);
        mpfr_div(r56914, r56905, r56913, MPFR_RNDN);
        if (mpfr_get_si(r56897, MPFR_RNDN)) { mpfr_set(r56915, r56911, MPFR_RNDN); } else { mpfr_set(r56915, r56914, MPFR_RNDN); };
        return mpfr_get_d(r56915, MPFR_RNDN);
}

