#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 r8240 = 0.5;
        float r8241 = 2.0;
        float r8242 = re;
        float r8243 = r8242 * r8242;
        float r8244 = im;
        float r8245 = r8244 * r8244;
        float r8246 = r8243 - r8245;
        float r8247 = sqrt(r8246);
        float r8248 = r8247 + r8242;
        float r8249 = r8241 * r8248;
        float r8250 = sqrt(r8249);
        float r8251 = r8240 * r8250;
        return r8251;
}

double f_id(double re, double im) {
        double r8252 = 0.5;
        double r8253 = 2.0;
        double r8254 = re;
        double r8255 = r8254 * r8254;
        double r8256 = im;
        double r8257 = r8256 * r8256;
        double r8258 = r8255 - r8257;
        double r8259 = sqrt(r8258);
        double r8260 = r8259 + r8254;
        double r8261 = r8253 * r8260;
        double r8262 = sqrt(r8261);
        double r8263 = r8252 * r8262;
        return r8263;
}


double f_of(float re, float im) {
        float r8264 = 0.5;
        float r8265 = 2.0;
        float r8266 = re;
        float r8267 = im;
        float r8268 = r8266 + r8267;
        float r8269 = sqrt(r8268);
        float r8270 = r8266 - r8267;
        float r8271 = sqrt(r8270);
        float r8272 = r8269 * r8271;
        float r8273 = r8272 + r8266;
        float r8274 = r8265 * r8273;
        float r8275 = sqrt(r8274);
        float r8276 = r8264 * r8275;
        return r8276;
}

double f_od(double re, double im) {
        double r8277 = 0.5;
        double r8278 = 2.0;
        double r8279 = re;
        double r8280 = im;
        double r8281 = r8279 + r8280;
        double r8282 = sqrt(r8281);
        double r8283 = r8279 - r8280;
        double r8284 = sqrt(r8283);
        double r8285 = r8282 * r8284;
        double r8286 = r8285 + r8279;
        double r8287 = r8278 * r8286;
        double r8288 = sqrt(r8287);
        double r8289 = r8277 * r8288;
        return r8289;
}

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 r8290, r8291, r8292, r8293, r8294, r8295, r8296, r8297, r8298, r8299, r8300, r8301;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(4432);
        mpfr_init_set_str(r8290, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r8291, "2.0", 10, MPFR_RNDN);
        mpfr_init(r8292);
        mpfr_init(r8293);
        mpfr_init(r8294);
        mpfr_init(r8295);
        mpfr_init(r8296);
        mpfr_init(r8297);
        mpfr_init(r8298);
        mpfr_init(r8299);
        mpfr_init(r8300);
        mpfr_init(r8301);
}

double f_im(double re, double im) {
        ;
        ;
        mpfr_set_d(r8292, re, MPFR_RNDN);
        mpfr_mul(r8293, r8292, r8292, MPFR_RNDN);
        mpfr_set_d(r8294, im, MPFR_RNDN);
        mpfr_mul(r8295, r8294, r8294, MPFR_RNDN);
        mpfr_sub(r8296, r8293, r8295, MPFR_RNDN);
        mpfr_sqrt(r8297, r8296, MPFR_RNDN);
        mpfr_add(r8298, r8297, r8292, MPFR_RNDN);
        mpfr_mul(r8299, r8291, r8298, MPFR_RNDN);
        mpfr_sqrt(r8300, r8299, MPFR_RNDN);
        mpfr_mul(r8301, r8290, r8300, MPFR_RNDN);
        return mpfr_get_d(r8301, MPFR_RNDN);
}

static mpfr_t r8302, r8303, r8304, r8305, r8306, r8307, r8308, r8309, r8310, r8311, r8312, r8313, r8314;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(4432);
        mpfr_init_set_str(r8302, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r8303, "2.0", 10, MPFR_RNDN);
        mpfr_init(r8304);
        mpfr_init(r8305);
        mpfr_init(r8306);
        mpfr_init(r8307);
        mpfr_init(r8308);
        mpfr_init(r8309);
        mpfr_init(r8310);
        mpfr_init(r8311);
        mpfr_init(r8312);
        mpfr_init(r8313);
        mpfr_init(r8314);
}

double f_fm(double re, double im) {
        ;
        ;
        mpfr_set_d(r8304, re, MPFR_RNDN);
        mpfr_set_d(r8305, im, MPFR_RNDN);
        mpfr_add(r8306, r8304, r8305, MPFR_RNDN);
        mpfr_sqrt(r8307, r8306, MPFR_RNDN);
        mpfr_sub(r8308, r8304, r8305, MPFR_RNDN);
        mpfr_sqrt(r8309, r8308, MPFR_RNDN);
        mpfr_mul(r8310, r8307, r8309, MPFR_RNDN);
        mpfr_add(r8311, r8310, r8304, MPFR_RNDN);
        mpfr_mul(r8312, r8303, r8311, MPFR_RNDN);
        mpfr_sqrt(r8313, r8312, MPFR_RNDN);
        mpfr_mul(r8314, r8302, r8313, MPFR_RNDN);
        return mpfr_get_d(r8314, MPFR_RNDN);
}

static mpfr_t r8315, r8316, r8317, r8318, r8319, r8320, r8321, r8322, r8323, r8324, r8325, r8326, r8327;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(4432);
        mpfr_init_set_str(r8315, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r8316, "2.0", 10, MPFR_RNDN);
        mpfr_init(r8317);
        mpfr_init(r8318);
        mpfr_init(r8319);
        mpfr_init(r8320);
        mpfr_init(r8321);
        mpfr_init(r8322);
        mpfr_init(r8323);
        mpfr_init(r8324);
        mpfr_init(r8325);
        mpfr_init(r8326);
        mpfr_init(r8327);
}

double f_dm(double re, double im) {
        ;
        ;
        mpfr_set_d(r8317, re, MPFR_RNDN);
        mpfr_set_d(r8318, im, MPFR_RNDN);
        mpfr_add(r8319, r8317, r8318, MPFR_RNDN);
        mpfr_sqrt(r8320, r8319, MPFR_RNDN);
        mpfr_sub(r8321, r8317, r8318, MPFR_RNDN);
        mpfr_sqrt(r8322, r8321, MPFR_RNDN);
        mpfr_mul(r8323, r8320, r8322, MPFR_RNDN);
        mpfr_add(r8324, r8323, r8317, MPFR_RNDN);
        mpfr_mul(r8325, r8316, r8324, MPFR_RNDN);
        mpfr_sqrt(r8326, r8325, MPFR_RNDN);
        mpfr_mul(r8327, r8315, r8326, MPFR_RNDN);
        return mpfr_get_d(r8327, MPFR_RNDN);
}

