#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 r10831 = b;
        float r10832 = c;
        float r10833 = r10831 * r10832;
        float r10834 = a;
        float r10835 = d;
        float r10836 = r10834 * r10835;
        float r10837 = r10833 - r10836;
        float r10838 = r10832 * r10832;
        float r10839 = r10835 * r10835;
        float r10840 = r10838 + r10839;
        float r10841 = r10837 / r10840;
        return r10841;
}

double f_id(double a, double b, double c, double d) {
        double r10842 = b;
        double r10843 = c;
        double r10844 = r10842 * r10843;
        double r10845 = a;
        double r10846 = d;
        double r10847 = r10845 * r10846;
        double r10848 = r10844 - r10847;
        double r10849 = r10843 * r10843;
        double r10850 = r10846 * r10846;
        double r10851 = r10849 + r10850;
        double r10852 = r10848 / r10851;
        return r10852;
}


double f_of(float a, float b, float c, float d) {
        float r10853 = c;
        float r10854 = r10853 * r10853;
        float r10855 = d;
        float r10856 = r10855 * r10855;
        float r10857 = r10854 + r10856;
        float r10858 = b;
        float r10859 = r10858 * r10853;
        float r10860 = a;
        float r10861 = r10860 * r10855;
        float r10862 = r10859 - r10861;
        float r10863 = r10857 / r10862;
        float r10864 = -1.6490966697360884e-293;
        bool r10865 = r10863 <= r10864;
        float r10866 = 1;
        float r10867 = r10866 / r10863;
        float r10868 = 5.28628895379133e-310;
        bool r10869 = r10863 <= r10868;
        float r10870 = -r10858;
        float r10871 = r10856 + r10854;
        float r10872 = sqrt(r10871);
        float r10873 = r10870 / r10872;
        float r10874 = r10862 / r10857;
        float r10875 = r10869 ? r10873 : r10874;
        float r10876 = r10865 ? r10867 : r10875;
        return r10876;
}

double f_od(double a, double b, double c, double d) {
        double r10877 = c;
        double r10878 = r10877 * r10877;
        double r10879 = d;
        double r10880 = r10879 * r10879;
        double r10881 = r10878 + r10880;
        double r10882 = b;
        double r10883 = r10882 * r10877;
        double r10884 = a;
        double r10885 = r10884 * r10879;
        double r10886 = r10883 - r10885;
        double r10887 = r10881 / r10886;
        double r10888 = -1.6490966697360884e-293;
        bool r10889 = r10887 <= r10888;
        double r10890 = 1;
        double r10891 = r10890 / r10887;
        double r10892 = 5.28628895379133e-310;
        bool r10893 = r10887 <= r10892;
        double r10894 = -r10882;
        double r10895 = r10880 + r10878;
        double r10896 = sqrt(r10895);
        double r10897 = r10894 / r10896;
        double r10898 = r10886 / r10881;
        double r10899 = r10893 ? r10897 : r10898;
        double r10900 = r10889 ? r10891 : r10899;
        return r10900;
}

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 r10901, r10902, r10903, r10904, r10905, r10906, r10907, r10908, r10909, r10910, r10911;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10901);
        mpfr_init(r10902);
        mpfr_init(r10903);
        mpfr_init(r10904);
        mpfr_init(r10905);
        mpfr_init(r10906);
        mpfr_init(r10907);
        mpfr_init(r10908);
        mpfr_init(r10909);
        mpfr_init(r10910);
        mpfr_init(r10911);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r10901, b, MPFR_RNDN);
        mpfr_set_d(r10902, c, MPFR_RNDN);
        mpfr_mul(r10903, r10901, r10902, MPFR_RNDN);
        mpfr_set_d(r10904, a, MPFR_RNDN);
        mpfr_set_d(r10905, d, MPFR_RNDN);
        mpfr_mul(r10906, r10904, r10905, MPFR_RNDN);
        mpfr_sub(r10907, r10903, r10906, MPFR_RNDN);
        mpfr_mul(r10908, r10902, r10902, MPFR_RNDN);
        mpfr_mul(r10909, r10905, r10905, MPFR_RNDN);
        mpfr_add(r10910, r10908, r10909, MPFR_RNDN);
        mpfr_div(r10911, r10907, r10910, MPFR_RNDN);
        return mpfr_get_d(r10911, MPFR_RNDN);
}

static mpfr_t r10912, r10913, r10914, r10915, r10916, r10917, r10918, r10919, r10920, r10921, r10922, r10923, r10924, r10925, r10926, r10927, r10928, r10929, r10930, r10931, r10932, r10933, r10934, r10935;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10912);
        mpfr_init(r10913);
        mpfr_init(r10914);
        mpfr_init(r10915);
        mpfr_init(r10916);
        mpfr_init(r10917);
        mpfr_init(r10918);
        mpfr_init(r10919);
        mpfr_init(r10920);
        mpfr_init(r10921);
        mpfr_init(r10922);
        mpfr_init_set_str(r10923, "-1.6490966697360884e-293", 10, MPFR_RNDN);
        mpfr_init(r10924);
        mpfr_init_set_str(r10925, "1", 10, MPFR_RNDN);
        mpfr_init(r10926);
        mpfr_init_set_str(r10927, "5.28628895379133e-310", 10, MPFR_RNDN);
        mpfr_init(r10928);
        mpfr_init(r10929);
        mpfr_init(r10930);
        mpfr_init(r10931);
        mpfr_init(r10932);
        mpfr_init(r10933);
        mpfr_init(r10934);
        mpfr_init(r10935);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r10912, c, MPFR_RNDN);
        mpfr_mul(r10913, r10912, r10912, MPFR_RNDN);
        mpfr_set_d(r10914, d, MPFR_RNDN);
        mpfr_mul(r10915, r10914, r10914, MPFR_RNDN);
        mpfr_add(r10916, r10913, r10915, MPFR_RNDN);
        mpfr_set_d(r10917, b, MPFR_RNDN);
        mpfr_mul(r10918, r10917, r10912, MPFR_RNDN);
        mpfr_set_d(r10919, a, MPFR_RNDN);
        mpfr_mul(r10920, r10919, r10914, MPFR_RNDN);
        mpfr_sub(r10921, r10918, r10920, MPFR_RNDN);
        mpfr_div(r10922, r10916, r10921, MPFR_RNDN);
        ;
        mpfr_set_si(r10924, mpfr_cmp(r10922, r10923) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r10926, r10925, r10922, MPFR_RNDN);
        ;
        mpfr_set_si(r10928, mpfr_cmp(r10922, r10927) <= 0, MPFR_RNDN);
        mpfr_neg(r10929, r10917, MPFR_RNDN);
        mpfr_add(r10930, r10915, r10913, MPFR_RNDN);
        mpfr_sqrt(r10931, r10930, MPFR_RNDN);
        mpfr_div(r10932, r10929, r10931, MPFR_RNDN);
        mpfr_div(r10933, r10921, r10916, MPFR_RNDN);
        if (mpfr_get_si(r10928, MPFR_RNDN)) { mpfr_set(r10934, r10932, MPFR_RNDN); } else { mpfr_set(r10934, r10933, MPFR_RNDN); };
        if (mpfr_get_si(r10924, MPFR_RNDN)) { mpfr_set(r10935, r10926, MPFR_RNDN); } else { mpfr_set(r10935, r10934, MPFR_RNDN); };
        return mpfr_get_d(r10935, MPFR_RNDN);
}

static mpfr_t r10936, r10937, r10938, r10939, r10940, r10941, r10942, r10943, r10944, r10945, r10946, r10947, r10948, r10949, r10950, r10951, r10952, r10953, r10954, r10955, r10956, r10957, r10958, r10959;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10936);
        mpfr_init(r10937);
        mpfr_init(r10938);
        mpfr_init(r10939);
        mpfr_init(r10940);
        mpfr_init(r10941);
        mpfr_init(r10942);
        mpfr_init(r10943);
        mpfr_init(r10944);
        mpfr_init(r10945);
        mpfr_init(r10946);
        mpfr_init_set_str(r10947, "-1.6490966697360884e-293", 10, MPFR_RNDN);
        mpfr_init(r10948);
        mpfr_init_set_str(r10949, "1", 10, MPFR_RNDN);
        mpfr_init(r10950);
        mpfr_init_set_str(r10951, "5.28628895379133e-310", 10, MPFR_RNDN);
        mpfr_init(r10952);
        mpfr_init(r10953);
        mpfr_init(r10954);
        mpfr_init(r10955);
        mpfr_init(r10956);
        mpfr_init(r10957);
        mpfr_init(r10958);
        mpfr_init(r10959);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r10936, c, MPFR_RNDN);
        mpfr_mul(r10937, r10936, r10936, MPFR_RNDN);
        mpfr_set_d(r10938, d, MPFR_RNDN);
        mpfr_mul(r10939, r10938, r10938, MPFR_RNDN);
        mpfr_add(r10940, r10937, r10939, MPFR_RNDN);
        mpfr_set_d(r10941, b, MPFR_RNDN);
        mpfr_mul(r10942, r10941, r10936, MPFR_RNDN);
        mpfr_set_d(r10943, a, MPFR_RNDN);
        mpfr_mul(r10944, r10943, r10938, MPFR_RNDN);
        mpfr_sub(r10945, r10942, r10944, MPFR_RNDN);
        mpfr_div(r10946, r10940, r10945, MPFR_RNDN);
        ;
        mpfr_set_si(r10948, mpfr_cmp(r10946, r10947) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r10950, r10949, r10946, MPFR_RNDN);
        ;
        mpfr_set_si(r10952, mpfr_cmp(r10946, r10951) <= 0, MPFR_RNDN);
        mpfr_neg(r10953, r10941, MPFR_RNDN);
        mpfr_add(r10954, r10939, r10937, MPFR_RNDN);
        mpfr_sqrt(r10955, r10954, MPFR_RNDN);
        mpfr_div(r10956, r10953, r10955, MPFR_RNDN);
        mpfr_div(r10957, r10945, r10940, MPFR_RNDN);
        if (mpfr_get_si(r10952, MPFR_RNDN)) { mpfr_set(r10958, r10956, MPFR_RNDN); } else { mpfr_set(r10958, r10957, MPFR_RNDN); };
        if (mpfr_get_si(r10948, MPFR_RNDN)) { mpfr_set(r10959, r10950, MPFR_RNDN); } else { mpfr_set(r10959, r10958, MPFR_RNDN); };
        return mpfr_get_d(r10959, MPFR_RNDN);
}

