#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 r56505399 = re;
        float r56505400 = r56505399 * r56505399;
        float r56505401 = im;
        float r56505402 = r56505401 * r56505401;
        float r56505403 = r56505400 - r56505402;
        return r56505403;
}

double f_id(double re, double im) {
        double r56505404 = re;
        double r56505405 = r56505404 * r56505404;
        double r56505406 = im;
        double r56505407 = r56505406 * r56505406;
        double r56505408 = r56505405 - r56505407;
        return r56505408;
}


double f_of(float re, float im) {
        float r56505409 = re;
        float r56505410 = r56505409 * r56505409;
        float r56505411 = im;
        float r56505412 = r56505411 * r56505411;
        float r56505413 = r56505410 - r56505412;
        return r56505413;
}

double f_od(double re, double im) {
        double r56505414 = re;
        double r56505415 = r56505414 * r56505414;
        double r56505416 = im;
        double r56505417 = r56505416 * r56505416;
        double r56505418 = r56505415 - r56505417;
        return r56505418;
}

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 r56505419, r56505420, r56505421, r56505422, r56505423;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56505419);
        mpfr_init(r56505420);
        mpfr_init(r56505421);
        mpfr_init(r56505422);
        mpfr_init(r56505423);
}

double f_im(double re, double im) {
        mpfr_set_d(r56505419, re, MPFR_RNDN);
        mpfr_mul(r56505420, r56505419, r56505419, MPFR_RNDN);
        mpfr_set_d(r56505421, im, MPFR_RNDN);
        mpfr_mul(r56505422, r56505421, r56505421, MPFR_RNDN);
        mpfr_sub(r56505423, r56505420, r56505422, MPFR_RNDN);
        return mpfr_get_d(r56505423, MPFR_RNDN);
}

static mpfr_t r56505424, r56505425, r56505426, r56505427, r56505428;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56505424);
        mpfr_init(r56505425);
        mpfr_init(r56505426);
        mpfr_init(r56505427);
        mpfr_init(r56505428);
}

double f_fm(double re, double im) {
        mpfr_set_d(r56505424, re, MPFR_RNDN);
        mpfr_mul(r56505425, r56505424, r56505424, MPFR_RNDN);
        mpfr_set_d(r56505426, im, MPFR_RNDN);
        mpfr_mul(r56505427, r56505426, r56505426, MPFR_RNDN);
        mpfr_sub(r56505428, r56505425, r56505427, MPFR_RNDN);
        return mpfr_get_d(r56505428, MPFR_RNDN);
}

static mpfr_t r56505429, r56505430, r56505431, r56505432, r56505433;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56505429);
        mpfr_init(r56505430);
        mpfr_init(r56505431);
        mpfr_init(r56505432);
        mpfr_init(r56505433);
}

double f_dm(double re, double im) {
        mpfr_set_d(r56505429, re, MPFR_RNDN);
        mpfr_mul(r56505430, r56505429, r56505429, MPFR_RNDN);
        mpfr_set_d(r56505431, im, MPFR_RNDN);
        mpfr_mul(r56505432, r56505431, r56505431, MPFR_RNDN);
        mpfr_sub(r56505433, r56505430, r56505432, MPFR_RNDN);
        return mpfr_get_d(r56505433, MPFR_RNDN);
}

