#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 r9909 = b;
        float r9910 = c;
        float r9911 = r9909 * r9910;
        float r9912 = a;
        float r9913 = d;
        float r9914 = r9912 * r9913;
        float r9915 = r9911 - r9914;
        float r9916 = r9910 * r9910;
        float r9917 = r9913 * r9913;
        float r9918 = r9916 + r9917;
        float r9919 = r9915 / r9918;
        return r9919;
}

double f_id(double a, double b, double c, double d) {
        double r9920 = b;
        double r9921 = c;
        double r9922 = r9920 * r9921;
        double r9923 = a;
        double r9924 = d;
        double r9925 = r9923 * r9924;
        double r9926 = r9922 - r9925;
        double r9927 = r9921 * r9921;
        double r9928 = r9924 * r9924;
        double r9929 = r9927 + r9928;
        double r9930 = r9926 / r9929;
        return r9930;
}


double f_of(float a, float b, float c, float d) {
        float r9931 = b;
        float r9932 = c;
        float r9933 = r9931 * r9932;
        float r9934 = a;
        float r9935 = d;
        float r9936 = r9934 * r9935;
        float r9937 = r9933 - r9936;
        float r9938 = r9932 * r9932;
        float r9939 = r9935 * r9935;
        float r9940 = r9938 + r9939;
        float r9941 = sqrt(r9940);
        float r9942 = r9937 / r9941;
        float r9943 = r9942 / r9941;
        return r9943;
}

double f_od(double a, double b, double c, double d) {
        double r9944 = b;
        double r9945 = c;
        double r9946 = r9944 * r9945;
        double r9947 = a;
        double r9948 = d;
        double r9949 = r9947 * r9948;
        double r9950 = r9946 - r9949;
        double r9951 = r9945 * r9945;
        double r9952 = r9948 * r9948;
        double r9953 = r9951 + r9952;
        double r9954 = sqrt(r9953);
        double r9955 = r9950 / r9954;
        double r9956 = r9955 / r9954;
        return r9956;
}

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 r9957, r9958, r9959, r9960, r9961, r9962, r9963, r9964, r9965, r9966, r9967;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9957);
        mpfr_init(r9958);
        mpfr_init(r9959);
        mpfr_init(r9960);
        mpfr_init(r9961);
        mpfr_init(r9962);
        mpfr_init(r9963);
        mpfr_init(r9964);
        mpfr_init(r9965);
        mpfr_init(r9966);
        mpfr_init(r9967);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r9957, b, MPFR_RNDN);
        mpfr_set_d(r9958, c, MPFR_RNDN);
        mpfr_mul(r9959, r9957, r9958, MPFR_RNDN);
        mpfr_set_d(r9960, a, MPFR_RNDN);
        mpfr_set_d(r9961, d, MPFR_RNDN);
        mpfr_mul(r9962, r9960, r9961, MPFR_RNDN);
        mpfr_sub(r9963, r9959, r9962, MPFR_RNDN);
        mpfr_mul(r9964, r9958, r9958, MPFR_RNDN);
        mpfr_mul(r9965, r9961, r9961, MPFR_RNDN);
        mpfr_add(r9966, r9964, r9965, MPFR_RNDN);
        mpfr_div(r9967, r9963, r9966, MPFR_RNDN);
        return mpfr_get_d(r9967, MPFR_RNDN);
}

static mpfr_t r9968, r9969, r9970, r9971, r9972, r9973, r9974, r9975, r9976, r9977, r9978, r9979, r9980;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9968);
        mpfr_init(r9969);
        mpfr_init(r9970);
        mpfr_init(r9971);
        mpfr_init(r9972);
        mpfr_init(r9973);
        mpfr_init(r9974);
        mpfr_init(r9975);
        mpfr_init(r9976);
        mpfr_init(r9977);
        mpfr_init(r9978);
        mpfr_init(r9979);
        mpfr_init(r9980);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r9968, b, MPFR_RNDN);
        mpfr_set_d(r9969, c, MPFR_RNDN);
        mpfr_mul(r9970, r9968, r9969, MPFR_RNDN);
        mpfr_set_d(r9971, a, MPFR_RNDN);
        mpfr_set_d(r9972, d, MPFR_RNDN);
        mpfr_mul(r9973, r9971, r9972, MPFR_RNDN);
        mpfr_sub(r9974, r9970, r9973, MPFR_RNDN);
        mpfr_mul(r9975, r9969, r9969, MPFR_RNDN);
        mpfr_mul(r9976, r9972, r9972, MPFR_RNDN);
        mpfr_add(r9977, r9975, r9976, MPFR_RNDN);
        mpfr_sqrt(r9978, r9977, MPFR_RNDN);
        mpfr_div(r9979, r9974, r9978, MPFR_RNDN);
        mpfr_div(r9980, r9979, r9978, MPFR_RNDN);
        return mpfr_get_d(r9980, MPFR_RNDN);
}

static mpfr_t r9981, r9982, r9983, r9984, r9985, r9986, r9987, r9988, r9989, r9990, r9991, r9992, r9993;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9981);
        mpfr_init(r9982);
        mpfr_init(r9983);
        mpfr_init(r9984);
        mpfr_init(r9985);
        mpfr_init(r9986);
        mpfr_init(r9987);
        mpfr_init(r9988);
        mpfr_init(r9989);
        mpfr_init(r9990);
        mpfr_init(r9991);
        mpfr_init(r9992);
        mpfr_init(r9993);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r9981, b, MPFR_RNDN);
        mpfr_set_d(r9982, c, MPFR_RNDN);
        mpfr_mul(r9983, r9981, r9982, MPFR_RNDN);
        mpfr_set_d(r9984, a, MPFR_RNDN);
        mpfr_set_d(r9985, d, MPFR_RNDN);
        mpfr_mul(r9986, r9984, r9985, MPFR_RNDN);
        mpfr_sub(r9987, r9983, r9986, MPFR_RNDN);
        mpfr_mul(r9988, r9982, r9982, MPFR_RNDN);
        mpfr_mul(r9989, r9985, r9985, MPFR_RNDN);
        mpfr_add(r9990, r9988, r9989, MPFR_RNDN);
        mpfr_sqrt(r9991, r9990, MPFR_RNDN);
        mpfr_div(r9992, r9987, r9991, MPFR_RNDN);
        mpfr_div(r9993, r9992, r9991, MPFR_RNDN);
        return mpfr_get_d(r9993, MPFR_RNDN);
}

