#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 r8464 = 0.5;
        float r8465 = 2.0;
        float r8466 = re;
        float r8467 = r8466 * r8466;
        float r8468 = im;
        float r8469 = r8468 * r8468;
        float r8470 = r8467 - r8469;
        float r8471 = sqrt(r8470);
        float r8472 = r8471 + r8466;
        float r8473 = r8465 * r8472;
        float r8474 = sqrt(r8473);
        float r8475 = r8464 * r8474;
        return r8475;
}

double f_id(double re, double im) {
        double r8476 = 0.5;
        double r8477 = 2.0;
        double r8478 = re;
        double r8479 = r8478 * r8478;
        double r8480 = im;
        double r8481 = r8480 * r8480;
        double r8482 = r8479 - r8481;
        double r8483 = sqrt(r8482);
        double r8484 = r8483 + r8478;
        double r8485 = r8477 * r8484;
        double r8486 = sqrt(r8485);
        double r8487 = r8476 * r8486;
        return r8487;
}


double f_of(float re, float im) {
        float r8488 = 0.5;
        float r8489 = 2.0;
        float r8490 = re;
        float r8491 = im;
        float r8492 = r8490 + r8491;
        float r8493 = sqrt(r8492);
        float r8494 = r8490 - r8491;
        float r8495 = sqrt(r8494);
        float r8496 = r8493 * r8495;
        float r8497 = r8496 + r8490;
        float r8498 = r8489 * r8497;
        float r8499 = sqrt(r8498);
        float r8500 = r8488 * r8499;
        return r8500;
}

double f_od(double re, double im) {
        double r8501 = 0.5;
        double r8502 = 2.0;
        double r8503 = re;
        double r8504 = im;
        double r8505 = r8503 + r8504;
        double r8506 = sqrt(r8505);
        double r8507 = r8503 - r8504;
        double r8508 = sqrt(r8507);
        double r8509 = r8506 * r8508;
        double r8510 = r8509 + r8503;
        double r8511 = r8502 * r8510;
        double r8512 = sqrt(r8511);
        double r8513 = r8501 * r8512;
        return r8513;
}

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 r8514, r8515, r8516, r8517, r8518, r8519, r8520, r8521, r8522, r8523, r8524, r8525;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(4432);
        mpfr_init_set_str(r8514, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r8515, "2.0", 10, MPFR_RNDN);
        mpfr_init(r8516);
        mpfr_init(r8517);
        mpfr_init(r8518);
        mpfr_init(r8519);
        mpfr_init(r8520);
        mpfr_init(r8521);
        mpfr_init(r8522);
        mpfr_init(r8523);
        mpfr_init(r8524);
        mpfr_init(r8525);
}

double f_im(double re, double im) {
        ;
        ;
        mpfr_set_d(r8516, re, MPFR_RNDN);
        mpfr_mul(r8517, r8516, r8516, MPFR_RNDN);
        mpfr_set_d(r8518, im, MPFR_RNDN);
        mpfr_mul(r8519, r8518, r8518, MPFR_RNDN);
        mpfr_sub(r8520, r8517, r8519, MPFR_RNDN);
        mpfr_sqrt(r8521, r8520, MPFR_RNDN);
        mpfr_add(r8522, r8521, r8516, MPFR_RNDN);
        mpfr_mul(r8523, r8515, r8522, MPFR_RNDN);
        mpfr_sqrt(r8524, r8523, MPFR_RNDN);
        mpfr_mul(r8525, r8514, r8524, MPFR_RNDN);
        return mpfr_get_d(r8525, MPFR_RNDN);
}

static mpfr_t r8526, r8527, r8528, r8529, r8530, r8531, r8532, r8533, r8534, r8535, r8536, r8537, r8538;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(4432);
        mpfr_init_set_str(r8526, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r8527, "2.0", 10, MPFR_RNDN);
        mpfr_init(r8528);
        mpfr_init(r8529);
        mpfr_init(r8530);
        mpfr_init(r8531);
        mpfr_init(r8532);
        mpfr_init(r8533);
        mpfr_init(r8534);
        mpfr_init(r8535);
        mpfr_init(r8536);
        mpfr_init(r8537);
        mpfr_init(r8538);
}

double f_fm(double re, double im) {
        ;
        ;
        mpfr_set_d(r8528, re, MPFR_RNDN);
        mpfr_set_d(r8529, im, MPFR_RNDN);
        mpfr_add(r8530, r8528, r8529, MPFR_RNDN);
        mpfr_sqrt(r8531, r8530, MPFR_RNDN);
        mpfr_sub(r8532, r8528, r8529, MPFR_RNDN);
        mpfr_sqrt(r8533, r8532, MPFR_RNDN);
        mpfr_mul(r8534, r8531, r8533, MPFR_RNDN);
        mpfr_add(r8535, r8534, r8528, MPFR_RNDN);
        mpfr_mul(r8536, r8527, r8535, MPFR_RNDN);
        mpfr_sqrt(r8537, r8536, MPFR_RNDN);
        mpfr_mul(r8538, r8526, r8537, MPFR_RNDN);
        return mpfr_get_d(r8538, MPFR_RNDN);
}

static mpfr_t r8539, r8540, r8541, r8542, r8543, r8544, r8545, r8546, r8547, r8548, r8549, r8550, r8551;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(4432);
        mpfr_init_set_str(r8539, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r8540, "2.0", 10, MPFR_RNDN);
        mpfr_init(r8541);
        mpfr_init(r8542);
        mpfr_init(r8543);
        mpfr_init(r8544);
        mpfr_init(r8545);
        mpfr_init(r8546);
        mpfr_init(r8547);
        mpfr_init(r8548);
        mpfr_init(r8549);
        mpfr_init(r8550);
        mpfr_init(r8551);
}

double f_dm(double re, double im) {
        ;
        ;
        mpfr_set_d(r8541, re, MPFR_RNDN);
        mpfr_set_d(r8542, im, MPFR_RNDN);
        mpfr_add(r8543, r8541, r8542, MPFR_RNDN);
        mpfr_sqrt(r8544, r8543, MPFR_RNDN);
        mpfr_sub(r8545, r8541, r8542, MPFR_RNDN);
        mpfr_sqrt(r8546, r8545, MPFR_RNDN);
        mpfr_mul(r8547, r8544, r8546, MPFR_RNDN);
        mpfr_add(r8548, r8547, r8541, MPFR_RNDN);
        mpfr_mul(r8549, r8540, r8548, MPFR_RNDN);
        mpfr_sqrt(r8550, r8549, MPFR_RNDN);
        mpfr_mul(r8551, r8539, r8550, MPFR_RNDN);
        return mpfr_get_d(r8551, MPFR_RNDN);
}

