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

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

double f_if(float re, float im) {
        float r7872 = re;
        float r7873 = im;
        float r7874 = r7872 * r7873;
        float r7875 = r7873 * r7872;
        float r7876 = r7874 + r7875;
        return r7876;
}

double f_id(double re, double im) {
        double r7877 = re;
        double r7878 = im;
        double r7879 = r7877 * r7878;
        double r7880 = r7878 * r7877;
        double r7881 = r7879 + r7880;
        return r7881;
}


double f_of(float re, float im) {
        float r7882 = re;
        float r7883 = im;
        float r7884 = r7883 + r7883;
        float r7885 = r7882 * r7884;
        return r7885;
}

double f_od(double re, double im) {
        double r7886 = re;
        double r7887 = im;
        double r7888 = r7887 + r7887;
        double r7889 = r7886 * r7888;
        return r7889;
}

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 r7890, r7891, r7892, r7893, r7894;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r7890);
        mpfr_init(r7891);
        mpfr_init(r7892);
        mpfr_init(r7893);
        mpfr_init(r7894);
}

double f_im(double re, double im) {
        mpfr_set_d(r7890, re, MPFR_RNDN);
        mpfr_set_d(r7891, im, MPFR_RNDN);
        mpfr_mul(r7892, r7890, r7891, MPFR_RNDN);
        mpfr_mul(r7893, r7891, r7890, MPFR_RNDN);
        mpfr_add(r7894, r7892, r7893, MPFR_RNDN);
        return mpfr_get_d(r7894, MPFR_RNDN);
}

static mpfr_t r7895, r7896, r7897, r7898;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r7895);
        mpfr_init(r7896);
        mpfr_init(r7897);
        mpfr_init(r7898);
}

double f_fm(double re, double im) {
        mpfr_set_d(r7895, re, MPFR_RNDN);
        mpfr_set_d(r7896, im, MPFR_RNDN);
        mpfr_add(r7897, r7896, r7896, MPFR_RNDN);
        mpfr_mul(r7898, r7895, r7897, MPFR_RNDN);
        return mpfr_get_d(r7898, MPFR_RNDN);
}

static mpfr_t r7899, r7900, r7901, r7902;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r7899);
        mpfr_init(r7900);
        mpfr_init(r7901);
        mpfr_init(r7902);
}

double f_dm(double re, double im) {
        mpfr_set_d(r7899, re, MPFR_RNDN);
        mpfr_set_d(r7900, im, MPFR_RNDN);
        mpfr_add(r7901, r7900, r7900, MPFR_RNDN);
        mpfr_mul(r7902, r7899, r7901, MPFR_RNDN);
        return mpfr_get_d(r7902, MPFR_RNDN);
}

