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

char *name = "math.square on complex, real part";

double f_if(float re, float im) {
        float r8698 = re;
        float r8699 = r8698 * r8698;
        float r8700 = im;
        float r8701 = r8700 * r8700;
        float r8702 = r8699 - r8701;
        return r8702;
}

double f_id(double re, double im) {
        double r8703 = re;
        double r8704 = r8703 * r8703;
        double r8705 = im;
        double r8706 = r8705 * r8705;
        double r8707 = r8704 - r8706;
        return r8707;
}


double f_of(float re, float im) {
        float r8708 = re;
        float r8709 = r8708 * r8708;
        float r8710 = im;
        float r8711 = r8710 * r8710;
        float r8712 = r8709 - r8711;
        return r8712;
}

double f_od(double re, double im) {
        double r8713 = re;
        double r8714 = r8713 * r8713;
        double r8715 = im;
        double r8716 = r8715 * r8715;
        double r8717 = r8714 - r8716;
        return r8717;
}

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 r8718, r8719, r8720, r8721, r8722;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8718);
        mpfr_init(r8719);
        mpfr_init(r8720);
        mpfr_init(r8721);
        mpfr_init(r8722);
}

double f_im(double re, double im) {
        mpfr_set_d(r8718, re, MPFR_RNDN);
        mpfr_mul(r8719, r8718, r8718, MPFR_RNDN);
        mpfr_set_d(r8720, im, MPFR_RNDN);
        mpfr_mul(r8721, r8720, r8720, MPFR_RNDN);
        mpfr_sub(r8722, r8719, r8721, MPFR_RNDN);
        return mpfr_get_d(r8722, MPFR_RNDN);
}

static mpfr_t r8723, r8724, r8725, r8726, r8727;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8723);
        mpfr_init(r8724);
        mpfr_init(r8725);
        mpfr_init(r8726);
        mpfr_init(r8727);
}

double f_fm(double re, double im) {
        mpfr_set_d(r8723, re, MPFR_RNDN);
        mpfr_mul(r8724, r8723, r8723, MPFR_RNDN);
        mpfr_set_d(r8725, im, MPFR_RNDN);
        mpfr_mul(r8726, r8725, r8725, MPFR_RNDN);
        mpfr_sub(r8727, r8724, r8726, MPFR_RNDN);
        return mpfr_get_d(r8727, MPFR_RNDN);
}

static mpfr_t r8728, r8729, r8730, r8731, r8732;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8728);
        mpfr_init(r8729);
        mpfr_init(r8730);
        mpfr_init(r8731);
        mpfr_init(r8732);
}

double f_dm(double re, double im) {
        mpfr_set_d(r8728, re, MPFR_RNDN);
        mpfr_mul(r8729, r8728, r8728, MPFR_RNDN);
        mpfr_set_d(r8730, im, MPFR_RNDN);
        mpfr_mul(r8731, r8730, r8730, MPFR_RNDN);
        mpfr_sub(r8732, r8729, r8731, MPFR_RNDN);
        return mpfr_get_d(r8732, MPFR_RNDN);
}

