#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 r56505465 = 0.5;
        float r56505466 = 2.0;
        float r56505467 = re;
        float r56505468 = r56505467 * r56505467;
        float r56505469 = im;
        float r56505470 = r56505469 * r56505469;
        float r56505471 = r56505468 - r56505470;
        float r56505472 = sqrt(r56505471);
        float r56505473 = r56505472 + r56505467;
        float r56505474 = r56505466 * r56505473;
        float r56505475 = sqrt(r56505474);
        float r56505476 = r56505465 * r56505475;
        return r56505476;
}

double f_id(double re, double im) {
        double r56505477 = 0.5;
        double r56505478 = 2.0;
        double r56505479 = re;
        double r56505480 = r56505479 * r56505479;
        double r56505481 = im;
        double r56505482 = r56505481 * r56505481;
        double r56505483 = r56505480 - r56505482;
        double r56505484 = sqrt(r56505483);
        double r56505485 = r56505484 + r56505479;
        double r56505486 = r56505478 * r56505485;
        double r56505487 = sqrt(r56505486);
        double r56505488 = r56505477 * r56505487;
        return r56505488;
}


double f_of(float re, float im) {
        float r56505489 = 0.5;
        float r56505490 = 2.0;
        float r56505491 = re;
        float r56505492 = im;
        float r56505493 = r56505491 + r56505492;
        float r56505494 = sqrt(r56505493);
        float r56505495 = r56505491 - r56505492;
        float r56505496 = sqrt(r56505495);
        float r56505497 = r56505494 * r56505496;
        float r56505498 = r56505497 + r56505491;
        float r56505499 = r56505490 * r56505498;
        float r56505500 = sqrt(r56505499);
        float r56505501 = r56505489 * r56505500;
        return r56505501;
}

double f_od(double re, double im) {
        double r56505502 = 0.5;
        double r56505503 = 2.0;
        double r56505504 = re;
        double r56505505 = im;
        double r56505506 = r56505504 + r56505505;
        double r56505507 = sqrt(r56505506);
        double r56505508 = r56505504 - r56505505;
        double r56505509 = sqrt(r56505508);
        double r56505510 = r56505507 * r56505509;
        double r56505511 = r56505510 + r56505504;
        double r56505512 = r56505503 * r56505511;
        double r56505513 = sqrt(r56505512);
        double r56505514 = r56505502 * r56505513;
        return r56505514;
}

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 r56505515, r56505516, r56505517, r56505518, r56505519, r56505520, r56505521, r56505522, r56505523, r56505524, r56505525, r56505526;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(4496);
        mpfr_init_set_str(r56505515, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r56505516, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56505517);
        mpfr_init(r56505518);
        mpfr_init(r56505519);
        mpfr_init(r56505520);
        mpfr_init(r56505521);
        mpfr_init(r56505522);
        mpfr_init(r56505523);
        mpfr_init(r56505524);
        mpfr_init(r56505525);
        mpfr_init(r56505526);
}

double f_im(double re, double im) {
        ;
        ;
        mpfr_set_d(r56505517, re, MPFR_RNDN);
        mpfr_mul(r56505518, r56505517, r56505517, MPFR_RNDN);
        mpfr_set_d(r56505519, im, MPFR_RNDN);
        mpfr_mul(r56505520, r56505519, r56505519, MPFR_RNDN);
        mpfr_sub(r56505521, r56505518, r56505520, MPFR_RNDN);
        mpfr_sqrt(r56505522, r56505521, MPFR_RNDN);
        mpfr_add(r56505523, r56505522, r56505517, MPFR_RNDN);
        mpfr_mul(r56505524, r56505516, r56505523, MPFR_RNDN);
        mpfr_sqrt(r56505525, r56505524, MPFR_RNDN);
        mpfr_mul(r56505526, r56505515, r56505525, MPFR_RNDN);
        return mpfr_get_d(r56505526, MPFR_RNDN);
}

static mpfr_t r56505527, r56505528, r56505529, r56505530, r56505531, r56505532, r56505533, r56505534, r56505535, r56505536, r56505537, r56505538, r56505539;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(4496);
        mpfr_init_set_str(r56505527, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r56505528, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56505529);
        mpfr_init(r56505530);
        mpfr_init(r56505531);
        mpfr_init(r56505532);
        mpfr_init(r56505533);
        mpfr_init(r56505534);
        mpfr_init(r56505535);
        mpfr_init(r56505536);
        mpfr_init(r56505537);
        mpfr_init(r56505538);
        mpfr_init(r56505539);
}

double f_fm(double re, double im) {
        ;
        ;
        mpfr_set_d(r56505529, re, MPFR_RNDN);
        mpfr_set_d(r56505530, im, MPFR_RNDN);
        mpfr_add(r56505531, r56505529, r56505530, MPFR_RNDN);
        mpfr_sqrt(r56505532, r56505531, MPFR_RNDN);
        mpfr_sub(r56505533, r56505529, r56505530, MPFR_RNDN);
        mpfr_sqrt(r56505534, r56505533, MPFR_RNDN);
        mpfr_mul(r56505535, r56505532, r56505534, MPFR_RNDN);
        mpfr_add(r56505536, r56505535, r56505529, MPFR_RNDN);
        mpfr_mul(r56505537, r56505528, r56505536, MPFR_RNDN);
        mpfr_sqrt(r56505538, r56505537, MPFR_RNDN);
        mpfr_mul(r56505539, r56505527, r56505538, MPFR_RNDN);
        return mpfr_get_d(r56505539, MPFR_RNDN);
}

static mpfr_t r56505540, r56505541, r56505542, r56505543, r56505544, r56505545, r56505546, r56505547, r56505548, r56505549, r56505550, r56505551, r56505552;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(4496);
        mpfr_init_set_str(r56505540, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r56505541, "2.0", 10, MPFR_RNDN);
        mpfr_init(r56505542);
        mpfr_init(r56505543);
        mpfr_init(r56505544);
        mpfr_init(r56505545);
        mpfr_init(r56505546);
        mpfr_init(r56505547);
        mpfr_init(r56505548);
        mpfr_init(r56505549);
        mpfr_init(r56505550);
        mpfr_init(r56505551);
        mpfr_init(r56505552);
}

double f_dm(double re, double im) {
        ;
        ;
        mpfr_set_d(r56505542, re, MPFR_RNDN);
        mpfr_set_d(r56505543, im, MPFR_RNDN);
        mpfr_add(r56505544, r56505542, r56505543, MPFR_RNDN);
        mpfr_sqrt(r56505545, r56505544, MPFR_RNDN);
        mpfr_sub(r56505546, r56505542, r56505543, MPFR_RNDN);
        mpfr_sqrt(r56505547, r56505546, MPFR_RNDN);
        mpfr_mul(r56505548, r56505545, r56505547, MPFR_RNDN);
        mpfr_add(r56505549, r56505548, r56505542, MPFR_RNDN);
        mpfr_mul(r56505550, r56505541, r56505549, MPFR_RNDN);
        mpfr_sqrt(r56505551, r56505550, MPFR_RNDN);
        mpfr_mul(r56505552, r56505540, r56505551, MPFR_RNDN);
        return mpfr_get_d(r56505552, MPFR_RNDN);
}

