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

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

double f_if(float re, float im) {
        float r18703 = 0.5f;
        float r18704 = 2.0f;
        float r18705 = re;
        float r18706 = r18705 * r18705;
        float r18707 = im;
        float r18708 = r18707 * r18707;
        float r18709 = r18706 + r18708;
        float r18710 = sqrt(r18709);
        float r18711 = r18710 + r18705;
        float r18712 = r18704 * r18711;
        float r18713 = sqrt(r18712);
        float r18714 = r18703 * r18713;
        return r18714;
}

double f_id(double re, double im) {
        double r18715 = 0.5;
        double r18716 = 2.0;
        double r18717 = re;
        double r18718 = r18717 * r18717;
        double r18719 = im;
        double r18720 = r18719 * r18719;
        double r18721 = r18718 + r18720;
        double r18722 = sqrt(r18721);
        double r18723 = r18722 + r18717;
        double r18724 = r18716 * r18723;
        double r18725 = sqrt(r18724);
        double r18726 = r18715 * r18725;
        return r18726;
}


double f_of(float re, float im) {
        float r18727 = 0.5f;
        float r18728 = re;
        float r18729 = im;
        float r18730 = hypot(r18728, r18729);
        float r18731 = 2.0f;
        float r18732 = r18731 * r18728;
        float r18733 = fma(r18730, r18731, r18732);
        float r18734 = sqrt(r18733);
        float r18735 = r18727 * r18734;
        return r18735;
}

double f_od(double re, double im) {
        double r18736 = 0.5;
        double r18737 = re;
        double r18738 = im;
        double r18739 = hypot(r18737, r18738);
        double r18740 = 2.0;
        double r18741 = r18740 * r18737;
        double r18742 = fma(r18739, r18740, r18741);
        double r18743 = sqrt(r18742);
        double r18744 = r18736 * r18743;
        return r18744;
}

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 r18745, r18746, r18747, r18748, r18749, r18750, r18751, r18752, r18753, r18754, r18755, r18756;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18745, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r18746, "2.0", 10, MPFR_RNDN);
        mpfr_init(r18747);
        mpfr_init(r18748);
        mpfr_init(r18749);
        mpfr_init(r18750);
        mpfr_init(r18751);
        mpfr_init(r18752);
        mpfr_init(r18753);
        mpfr_init(r18754);
        mpfr_init(r18755);
        mpfr_init(r18756);
}

double f_im(double re, double im) {
        ;
        ;
        mpfr_set_d(r18747, re, MPFR_RNDN);
        mpfr_mul(r18748, r18747, r18747, MPFR_RNDN);
        mpfr_set_d(r18749, im, MPFR_RNDN);
        mpfr_mul(r18750, r18749, r18749, MPFR_RNDN);
        mpfr_add(r18751, r18748, r18750, MPFR_RNDN);
        mpfr_sqrt(r18752, r18751, MPFR_RNDN);
        mpfr_add(r18753, r18752, r18747, MPFR_RNDN);
        mpfr_mul(r18754, r18746, r18753, MPFR_RNDN);
        mpfr_sqrt(r18755, r18754, MPFR_RNDN);
        mpfr_mul(r18756, r18745, r18755, MPFR_RNDN);
        return mpfr_get_d(r18756, MPFR_RNDN);
}

static mpfr_t r18757, r18758, r18759, r18760, r18761, r18762, r18763, r18764, r18765;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18757, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18758);
        mpfr_init(r18759);
        mpfr_init(r18760);
        mpfr_init_set_str(r18761, "2.0", 10, MPFR_RNDN);
        mpfr_init(r18762);
        mpfr_init(r18763);
        mpfr_init(r18764);
        mpfr_init(r18765);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r18758, re, MPFR_RNDN);
        mpfr_set_d(r18759, im, MPFR_RNDN);
        mpfr_hypot(r18760, r18758, r18759, MPFR_RNDN);
        ;
        mpfr_mul(r18762, r18761, r18758, MPFR_RNDN);
        mpfr_fma(r18763, r18760, r18761, r18762, MPFR_RNDN);
        mpfr_sqrt(r18764, r18763, MPFR_RNDN);
        mpfr_mul(r18765, r18757, r18764, MPFR_RNDN);
        return mpfr_get_d(r18765, MPFR_RNDN);
}

static mpfr_t r18766, r18767, r18768, r18769, r18770, r18771, r18772, r18773, r18774;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r18766, "0.5", 10, MPFR_RNDN);
        mpfr_init(r18767);
        mpfr_init(r18768);
        mpfr_init(r18769);
        mpfr_init_set_str(r18770, "2.0", 10, MPFR_RNDN);
        mpfr_init(r18771);
        mpfr_init(r18772);
        mpfr_init(r18773);
        mpfr_init(r18774);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r18767, re, MPFR_RNDN);
        mpfr_set_d(r18768, im, MPFR_RNDN);
        mpfr_hypot(r18769, r18767, r18768, MPFR_RNDN);
        ;
        mpfr_mul(r18771, r18770, r18767, MPFR_RNDN);
        mpfr_fma(r18772, r18769, r18770, r18771, MPFR_RNDN);
        mpfr_sqrt(r18773, r18772, MPFR_RNDN);
        mpfr_mul(r18774, r18766, r18773, MPFR_RNDN);
        return mpfr_get_d(r18774, MPFR_RNDN);
}

