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

char *name = "math.abs on complex";

double f_if(float re, float im) {
        float r8587 = re;
        float r8588 = r8587 * r8587;
        float r8589 = im;
        float r8590 = r8589 * r8589;
        float r8591 = r8588 + r8590;
        float r8592 = sqrt(r8591);
        return r8592;
}

double f_id(double re, double im) {
        double r8593 = re;
        double r8594 = r8593 * r8593;
        double r8595 = im;
        double r8596 = r8595 * r8595;
        double r8597 = r8594 + r8596;
        double r8598 = sqrt(r8597);
        return r8598;
}


double f_of(float re, float im) {
        float r8599 = re;
        float r8600 = im;
        float r8601 = hypot(r8599, r8600);
        return r8601;
}

double f_od(double re, double im) {
        double r8602 = re;
        double r8603 = im;
        double r8604 = hypot(r8602, r8603);
        return r8604;
}

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 r8605, r8606, r8607, r8608, r8609, r8610;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r8605);
        mpfr_init(r8606);
        mpfr_init(r8607);
        mpfr_init(r8608);
        mpfr_init(r8609);
        mpfr_init(r8610);
}

double f_im(double re, double im) {
        mpfr_set_d(r8605, re, MPFR_RNDN);
        mpfr_mul(r8606, r8605, r8605, MPFR_RNDN);
        mpfr_set_d(r8607, im, MPFR_RNDN);
        mpfr_mul(r8608, r8607, r8607, MPFR_RNDN);
        mpfr_add(r8609, r8606, r8608, MPFR_RNDN);
        mpfr_sqrt(r8610, r8609, MPFR_RNDN);
        return mpfr_get_d(r8610, MPFR_RNDN);
}

static mpfr_t r8611, r8612, r8613;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r8611);
        mpfr_init(r8612);
        mpfr_init(r8613);
}

double f_fm(double re, double im) {
        mpfr_set_d(r8611, re, MPFR_RNDN);
        mpfr_set_d(r8612, im, MPFR_RNDN);
        mpfr_hypot(r8613, r8611, r8612, MPFR_RNDN);
        return mpfr_get_d(r8613, MPFR_RNDN);
}

static mpfr_t r8614, r8615, r8616;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r8614);
        mpfr_init(r8615);
        mpfr_init(r8616);
}

double f_dm(double re, double im) {
        mpfr_set_d(r8614, re, MPFR_RNDN);
        mpfr_set_d(r8615, im, MPFR_RNDN);
        mpfr_hypot(r8616, r8614, r8615, MPFR_RNDN);
        return mpfr_get_d(r8616, MPFR_RNDN);
}

