#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "_multiplyComplex, imaginary part";

double f_if(float x_re, float x_im, float y_re, float y_im) {
        float r9685 = x_re;
        float r9686 = y_im;
        float r9687 = r9685 * r9686;
        float r9688 = x_im;
        float r9689 = y_re;
        float r9690 = r9688 * r9689;
        float r9691 = r9687 + r9690;
        return r9691;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r9692 = x_re;
        double r9693 = y_im;
        double r9694 = r9692 * r9693;
        double r9695 = x_im;
        double r9696 = y_re;
        double r9697 = r9695 * r9696;
        double r9698 = r9694 + r9697;
        return r9698;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r9699 = y_im;
        float r9700 = x_re;
        float r9701 = x_im;
        float r9702 = y_re;
        float r9703 = r9701 * r9702;
        float r9704 = fma(r9699, r9700, r9703);
        return r9704;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r9705 = y_im;
        double r9706 = x_re;
        double r9707 = x_im;
        double r9708 = y_re;
        double r9709 = r9707 * r9708;
        double r9710 = fma(r9705, r9706, r9709);
        return r9710;
}

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 r9711, r9712, r9713, r9714, r9715, r9716, r9717;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9711);
        mpfr_init(r9712);
        mpfr_init(r9713);
        mpfr_init(r9714);
        mpfr_init(r9715);
        mpfr_init(r9716);
        mpfr_init(r9717);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r9711, x_re, MPFR_RNDN);
        mpfr_set_d(r9712, y_im, MPFR_RNDN);
        mpfr_mul(r9713, r9711, r9712, MPFR_RNDN);
        mpfr_set_d(r9714, x_im, MPFR_RNDN);
        mpfr_set_d(r9715, y_re, MPFR_RNDN);
        mpfr_mul(r9716, r9714, r9715, MPFR_RNDN);
        mpfr_add(r9717, r9713, r9716, MPFR_RNDN);
        return mpfr_get_d(r9717, MPFR_RNDN);
}

static mpfr_t r9718, r9719, r9720, r9721, r9722, r9723;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9718);
        mpfr_init(r9719);
        mpfr_init(r9720);
        mpfr_init(r9721);
        mpfr_init(r9722);
        mpfr_init(r9723);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r9718, y_im, MPFR_RNDN);
        mpfr_set_d(r9719, x_re, MPFR_RNDN);
        mpfr_set_d(r9720, x_im, MPFR_RNDN);
        mpfr_set_d(r9721, y_re, MPFR_RNDN);
        mpfr_mul(r9722, r9720, r9721, MPFR_RNDN);
        mpfr_fma(r9723, r9718, r9719, r9722, MPFR_RNDN);
        return mpfr_get_d(r9723, MPFR_RNDN);
}

static mpfr_t r9724, r9725, r9726, r9727, r9728, r9729;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9724);
        mpfr_init(r9725);
        mpfr_init(r9726);
        mpfr_init(r9727);
        mpfr_init(r9728);
        mpfr_init(r9729);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r9724, y_im, MPFR_RNDN);
        mpfr_set_d(r9725, x_re, MPFR_RNDN);
        mpfr_set_d(r9726, x_im, MPFR_RNDN);
        mpfr_set_d(r9727, y_re, MPFR_RNDN);
        mpfr_mul(r9728, r9726, r9727, MPFR_RNDN);
        mpfr_fma(r9729, r9724, r9725, r9728, MPFR_RNDN);
        return mpfr_get_d(r9729, MPFR_RNDN);
}

