#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 r9054 = re;
        float r9055 = r9054 * r9054;
        float r9056 = im;
        float r9057 = r9056 * r9056;
        float r9058 = r9055 + r9057;
        float r9059 = sqrt(r9058);
        return r9059;
}

double f_id(double re, double im) {
        double r9060 = re;
        double r9061 = r9060 * r9060;
        double r9062 = im;
        double r9063 = r9062 * r9062;
        double r9064 = r9061 + r9063;
        double r9065 = sqrt(r9064);
        return r9065;
}


double f_of(float re, float im) {
        float r9066 = re;
        float r9067 = im;
        float r9068 = hypot(r9066, r9067);
        return r9068;
}

double f_od(double re, double im) {
        double r9069 = re;
        double r9070 = im;
        double r9071 = hypot(r9069, r9070);
        return r9071;
}

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 r9072, r9073, r9074, r9075, r9076, r9077;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r9072);
        mpfr_init(r9073);
        mpfr_init(r9074);
        mpfr_init(r9075);
        mpfr_init(r9076);
        mpfr_init(r9077);
}

double f_im(double re, double im) {
        mpfr_set_d(r9072, re, MPFR_RNDN);
        mpfr_mul(r9073, r9072, r9072, MPFR_RNDN);
        mpfr_set_d(r9074, im, MPFR_RNDN);
        mpfr_mul(r9075, r9074, r9074, MPFR_RNDN);
        mpfr_add(r9076, r9073, r9075, MPFR_RNDN);
        mpfr_sqrt(r9077, r9076, MPFR_RNDN);
        return mpfr_get_d(r9077, MPFR_RNDN);
}

static mpfr_t r9078, r9079, r9080;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r9078);
        mpfr_init(r9079);
        mpfr_init(r9080);
}

double f_fm(double re, double im) {
        mpfr_set_d(r9078, re, MPFR_RNDN);
        mpfr_set_d(r9079, im, MPFR_RNDN);
        mpfr_hypot(r9080, r9078, r9079, MPFR_RNDN);
        return mpfr_get_d(r9080, MPFR_RNDN);
}

static mpfr_t r9081, r9082, r9083;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r9081);
        mpfr_init(r9082);
        mpfr_init(r9083);
}

double f_dm(double re, double im) {
        mpfr_set_d(r9081, re, MPFR_RNDN);
        mpfr_set_d(r9082, im, MPFR_RNDN);
        mpfr_hypot(r9083, r9081, r9082, MPFR_RNDN);
        return mpfr_get_d(r9083, MPFR_RNDN);
}

