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

char *name = "math.sqrt on complex, imaginary part, im greater than 0 branch";

double f_if(float re, float im) {
        float r8532 = 0.5;
        float r8533 = 2.0;
        float r8534 = re;
        float r8535 = r8534 * r8534;
        float r8536 = im;
        float r8537 = r8536 * r8536;
        float r8538 = r8535 - r8537;
        float r8539 = sqrt(r8538);
        float r8540 = r8539 + r8534;
        float r8541 = r8533 * r8540;
        float r8542 = sqrt(r8541);
        float r8543 = r8532 * r8542;
        return r8543;
}

double f_id(double re, double im) {
        double r8544 = 0.5;
        double r8545 = 2.0;
        double r8546 = re;
        double r8547 = r8546 * r8546;
        double r8548 = im;
        double r8549 = r8548 * r8548;
        double r8550 = r8547 - r8549;
        double r8551 = sqrt(r8550);
        double r8552 = r8551 + r8546;
        double r8553 = r8545 * r8552;
        double r8554 = sqrt(r8553);
        double r8555 = r8544 * r8554;
        return r8555;
}


double f_of(float re, float im) {
        float r8556 = 0.5;
        float r8557 = 2.0;
        float r8558 = re;
        float r8559 = im;
        float r8560 = r8558 + r8559;
        float r8561 = sqrt(r8560);
        float r8562 = sqrt(r8561);
        float r8563 = r8558 - r8559;
        float r8564 = sqrt(r8563);
        float r8565 = r8562 * r8564;
        float r8566 = r8562 * r8565;
        float r8567 = r8566 + r8558;
        float r8568 = r8557 * r8567;
        float r8569 = sqrt(r8568);
        float r8570 = r8556 * r8569;
        return r8570;
}

double f_od(double re, double im) {
        double r8571 = 0.5;
        double r8572 = 2.0;
        double r8573 = re;
        double r8574 = im;
        double r8575 = r8573 + r8574;
        double r8576 = sqrt(r8575);
        double r8577 = sqrt(r8576);
        double r8578 = r8573 - r8574;
        double r8579 = sqrt(r8578);
        double r8580 = r8577 * r8579;
        double r8581 = r8577 * r8580;
        double r8582 = r8581 + r8573;
        double r8583 = r8572 * r8582;
        double r8584 = sqrt(r8583);
        double r8585 = r8571 * r8584;
        return r8585;
}

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 r8586, r8587, r8588, r8589, r8590, r8591, r8592, r8593, r8594, r8595, r8596, r8597;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(4432);
        mpfr_init_set_str(r8586, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r8587, "2.0", 10, MPFR_RNDN);
        mpfr_init(r8588);
        mpfr_init(r8589);
        mpfr_init(r8590);
        mpfr_init(r8591);
        mpfr_init(r8592);
        mpfr_init(r8593);
        mpfr_init(r8594);
        mpfr_init(r8595);
        mpfr_init(r8596);
        mpfr_init(r8597);
}

double f_im(double re, double im) {
        ;
        ;
        mpfr_set_d(r8588, re, MPFR_RNDN);
        mpfr_mul(r8589, r8588, r8588, MPFR_RNDN);
        mpfr_set_d(r8590, im, MPFR_RNDN);
        mpfr_mul(r8591, r8590, r8590, MPFR_RNDN);
        mpfr_sub(r8592, r8589, r8591, MPFR_RNDN);
        mpfr_sqrt(r8593, r8592, MPFR_RNDN);
        mpfr_add(r8594, r8593, r8588, MPFR_RNDN);
        mpfr_mul(r8595, r8587, r8594, MPFR_RNDN);
        mpfr_sqrt(r8596, r8595, MPFR_RNDN);
        mpfr_mul(r8597, r8586, r8596, MPFR_RNDN);
        return mpfr_get_d(r8597, MPFR_RNDN);
}

static mpfr_t r8598, r8599, r8600, r8601, r8602, r8603, r8604, r8605, r8606, r8607, r8608, r8609, r8610, r8611, r8612;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(4432);
        mpfr_init_set_str(r8598, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r8599, "2.0", 10, MPFR_RNDN);
        mpfr_init(r8600);
        mpfr_init(r8601);
        mpfr_init(r8602);
        mpfr_init(r8603);
        mpfr_init(r8604);
        mpfr_init(r8605);
        mpfr_init(r8606);
        mpfr_init(r8607);
        mpfr_init(r8608);
        mpfr_init(r8609);
        mpfr_init(r8610);
        mpfr_init(r8611);
        mpfr_init(r8612);
}

double f_fm(double re, double im) {
        ;
        ;
        mpfr_set_d(r8600, re, MPFR_RNDN);
        mpfr_set_d(r8601, im, MPFR_RNDN);
        mpfr_add(r8602, r8600, r8601, MPFR_RNDN);
        mpfr_sqrt(r8603, r8602, MPFR_RNDN);
        mpfr_sqrt(r8604, r8603, MPFR_RNDN);
        mpfr_sub(r8605, r8600, r8601, MPFR_RNDN);
        mpfr_sqrt(r8606, r8605, MPFR_RNDN);
        mpfr_mul(r8607, r8604, r8606, MPFR_RNDN);
        mpfr_mul(r8608, r8604, r8607, MPFR_RNDN);
        mpfr_add(r8609, r8608, r8600, MPFR_RNDN);
        mpfr_mul(r8610, r8599, r8609, MPFR_RNDN);
        mpfr_sqrt(r8611, r8610, MPFR_RNDN);
        mpfr_mul(r8612, r8598, r8611, MPFR_RNDN);
        return mpfr_get_d(r8612, MPFR_RNDN);
}

static mpfr_t r8613, r8614, r8615, r8616, r8617, r8618, r8619, r8620, r8621, r8622, r8623, r8624, r8625, r8626, r8627;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(4432);
        mpfr_init_set_str(r8613, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r8614, "2.0", 10, MPFR_RNDN);
        mpfr_init(r8615);
        mpfr_init(r8616);
        mpfr_init(r8617);
        mpfr_init(r8618);
        mpfr_init(r8619);
        mpfr_init(r8620);
        mpfr_init(r8621);
        mpfr_init(r8622);
        mpfr_init(r8623);
        mpfr_init(r8624);
        mpfr_init(r8625);
        mpfr_init(r8626);
        mpfr_init(r8627);
}

double f_dm(double re, double im) {
        ;
        ;
        mpfr_set_d(r8615, re, MPFR_RNDN);
        mpfr_set_d(r8616, im, MPFR_RNDN);
        mpfr_add(r8617, r8615, r8616, MPFR_RNDN);
        mpfr_sqrt(r8618, r8617, MPFR_RNDN);
        mpfr_sqrt(r8619, r8618, MPFR_RNDN);
        mpfr_sub(r8620, r8615, r8616, MPFR_RNDN);
        mpfr_sqrt(r8621, r8620, MPFR_RNDN);
        mpfr_mul(r8622, r8619, r8621, MPFR_RNDN);
        mpfr_mul(r8623, r8619, r8622, MPFR_RNDN);
        mpfr_add(r8624, r8623, r8615, MPFR_RNDN);
        mpfr_mul(r8625, r8614, r8624, MPFR_RNDN);
        mpfr_sqrt(r8626, r8625, MPFR_RNDN);
        mpfr_mul(r8627, r8613, r8626, MPFR_RNDN);
        return mpfr_get_d(r8627, MPFR_RNDN);
}

