#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 r28527 = 0.5;
        float r28528 = 2.0;
        float r28529 = re;
        float r28530 = r28529 * r28529;
        float r28531 = im;
        float r28532 = r28531 * r28531;
        float r28533 = r28530 + r28532;
        float r28534 = sqrt(r28533);
        float r28535 = r28534 + r28529;
        float r28536 = r28528 * r28535;
        float r28537 = sqrt(r28536);
        float r28538 = r28527 * r28537;
        return r28538;
}

double f_id(double re, double im) {
        double r28539 = 0.5;
        double r28540 = 2.0;
        double r28541 = re;
        double r28542 = r28541 * r28541;
        double r28543 = im;
        double r28544 = r28543 * r28543;
        double r28545 = r28542 + r28544;
        double r28546 = sqrt(r28545);
        double r28547 = r28546 + r28541;
        double r28548 = r28540 * r28547;
        double r28549 = sqrt(r28548);
        double r28550 = r28539 * r28549;
        return r28550;
}


double f_of(float re, float im) {
        float r28551 = 0.5;
        float r28552 = re;
        float r28553 = im;
        float r28554 = hypot(r28552, r28553);
        float r28555 = 2.0;
        float r28556 = r28552 * r28555;
        float r28557 = fma(r28554, r28555, r28556);
        float r28558 = sqrt(r28557);
        float r28559 = r28551 * r28558;
        return r28559;
}

double f_od(double re, double im) {
        double r28560 = 0.5;
        double r28561 = re;
        double r28562 = im;
        double r28563 = hypot(r28561, r28562);
        double r28564 = 2.0;
        double r28565 = r28561 * r28564;
        double r28566 = fma(r28563, r28564, r28565);
        double r28567 = sqrt(r28566);
        double r28568 = r28560 * r28567;
        return r28568;
}

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 r28569, r28570, r28571, r28572, r28573, r28574, r28575, r28576, r28577, r28578, r28579, r28580;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3664);
        mpfr_init_set_str(r28569, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r28570, "2.0", 10, MPFR_RNDN);
        mpfr_init(r28571);
        mpfr_init(r28572);
        mpfr_init(r28573);
        mpfr_init(r28574);
        mpfr_init(r28575);
        mpfr_init(r28576);
        mpfr_init(r28577);
        mpfr_init(r28578);
        mpfr_init(r28579);
        mpfr_init(r28580);
}

double f_im(double re, double im) {
        ;
        ;
        mpfr_set_d(r28571, re, MPFR_RNDN);
        mpfr_mul(r28572, r28571, r28571, MPFR_RNDN);
        mpfr_set_d(r28573, im, MPFR_RNDN);
        mpfr_mul(r28574, r28573, r28573, MPFR_RNDN);
        mpfr_add(r28575, r28572, r28574, MPFR_RNDN);
        mpfr_sqrt(r28576, r28575, MPFR_RNDN);
        mpfr_add(r28577, r28576, r28571, MPFR_RNDN);
        mpfr_mul(r28578, r28570, r28577, MPFR_RNDN);
        mpfr_sqrt(r28579, r28578, MPFR_RNDN);
        mpfr_mul(r28580, r28569, r28579, MPFR_RNDN);
        return mpfr_get_d(r28580, MPFR_RNDN);
}

static mpfr_t r28581, r28582, r28583, r28584, r28585, r28586, r28587, r28588, r28589;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3664);
        mpfr_init_set_str(r28581, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28582);
        mpfr_init(r28583);
        mpfr_init(r28584);
        mpfr_init_set_str(r28585, "2.0", 10, MPFR_RNDN);
        mpfr_init(r28586);
        mpfr_init(r28587);
        mpfr_init(r28588);
        mpfr_init(r28589);
}

double f_fm(double re, double im) {
        ;
        mpfr_set_d(r28582, re, MPFR_RNDN);
        mpfr_set_d(r28583, im, MPFR_RNDN);
        mpfr_hypot(r28584, r28582, r28583, MPFR_RNDN);
        ;
        mpfr_mul(r28586, r28582, r28585, MPFR_RNDN);
        mpfr_fma(r28587, r28584, r28585, r28586, MPFR_RNDN);
        mpfr_sqrt(r28588, r28587, MPFR_RNDN);
        mpfr_mul(r28589, r28581, r28588, MPFR_RNDN);
        return mpfr_get_d(r28589, MPFR_RNDN);
}

static mpfr_t r28590, r28591, r28592, r28593, r28594, r28595, r28596, r28597, r28598;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3664);
        mpfr_init_set_str(r28590, "0.5", 10, MPFR_RNDN);
        mpfr_init(r28591);
        mpfr_init(r28592);
        mpfr_init(r28593);
        mpfr_init_set_str(r28594, "2.0", 10, MPFR_RNDN);
        mpfr_init(r28595);
        mpfr_init(r28596);
        mpfr_init(r28597);
        mpfr_init(r28598);
}

double f_dm(double re, double im) {
        ;
        mpfr_set_d(r28591, re, MPFR_RNDN);
        mpfr_set_d(r28592, im, MPFR_RNDN);
        mpfr_hypot(r28593, r28591, r28592, MPFR_RNDN);
        ;
        mpfr_mul(r28595, r28591, r28594, MPFR_RNDN);
        mpfr_fma(r28596, r28593, r28594, r28595, MPFR_RNDN);
        mpfr_sqrt(r28597, r28596, MPFR_RNDN);
        mpfr_mul(r28598, r28590, r28597, MPFR_RNDN);
        return mpfr_get_d(r28598, MPFR_RNDN);
}

