#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 r7865 = 0.5f;
        float r7866 = 2.0f;
        float r7867 = re;
        float r7868 = r7867 * r7867;
        float r7869 = im;
        float r7870 = r7869 * r7869;
        float r7871 = r7868 + r7870;
        float r7872 = sqrt(r7871);
        float r7873 = r7872 - r7867;
        float r7874 = r7866 * r7873;
        float r7875 = sqrt(r7874);
        float r7876 = r7865 * r7875;
        return r7876;
}

double f_id(double re, double im) {
        double r7877 = 0.5;
        double r7878 = 2.0;
        double r7879 = re;
        double r7880 = r7879 * r7879;
        double r7881 = im;
        double r7882 = r7881 * r7881;
        double r7883 = r7880 + r7882;
        double r7884 = sqrt(r7883);
        double r7885 = r7884 - r7879;
        double r7886 = r7878 * r7885;
        double r7887 = sqrt(r7886);
        double r7888 = r7877 * r7887;
        return r7888;
}


double f_of(float re, float im) {
        float r7889 = re;
        float r7890 = im;
        float r7891 = hypot(r7889, r7890);
        float r7892 = r7891 - r7889;
        float r7893 = 2.0f;
        float r7894 = r7892 * r7893;
        float r7895 = sqrt(r7894);
        float r7896 = 0.5f;
        float r7897 = r7895 * r7896;
        return r7897;
}

double f_od(double re, double im) {
        double r7898 = re;
        double r7899 = im;
        double r7900 = hypot(r7898, r7899);
        double r7901 = r7900 - r7898;
        double r7902 = 2.0;
        double r7903 = r7901 * r7902;
        double r7904 = sqrt(r7903);
        double r7905 = 0.5;
        double r7906 = r7904 * r7905;
        return r7906;
}

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 r7907, r7908, r7909, r7910, r7911, r7912, r7913, r7914, r7915, r7916, r7917, r7918;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3664);
        mpfr_init_set_str(r7907, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r7908, "2.0", 10, MPFR_RNDN);
        mpfr_init(r7909);
        mpfr_init(r7910);
        mpfr_init(r7911);
        mpfr_init(r7912);
        mpfr_init(r7913);
        mpfr_init(r7914);
        mpfr_init(r7915);
        mpfr_init(r7916);
        mpfr_init(r7917);
        mpfr_init(r7918);
}

double f_im(double re, double im) {
        ;
        ;
        mpfr_set_d(r7909, re, MPFR_RNDN);
        mpfr_mul(r7910, r7909, r7909, MPFR_RNDN);
        mpfr_set_d(r7911, im, MPFR_RNDN);
        mpfr_mul(r7912, r7911, r7911, MPFR_RNDN);
        mpfr_add(r7913, r7910, r7912, MPFR_RNDN);
        mpfr_sqrt(r7914, r7913, MPFR_RNDN);
        mpfr_sub(r7915, r7914, r7909, MPFR_RNDN);
        mpfr_mul(r7916, r7908, r7915, MPFR_RNDN);
        mpfr_sqrt(r7917, r7916, MPFR_RNDN);
        mpfr_mul(r7918, r7907, r7917, MPFR_RNDN);
        return mpfr_get_d(r7918, MPFR_RNDN);
}

static mpfr_t r7919, r7920, r7921, r7922, r7923, r7924, r7925, r7926, r7927;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3664);
        mpfr_init(r7919);
        mpfr_init(r7920);
        mpfr_init(r7921);
        mpfr_init(r7922);
        mpfr_init_set_str(r7923, "2.0", 10, MPFR_RNDN);
        mpfr_init(r7924);
        mpfr_init(r7925);
        mpfr_init_set_str(r7926, "0.5", 10, MPFR_RNDN);
        mpfr_init(r7927);
}

double f_fm(double re, double im) {
        mpfr_set_d(r7919, re, MPFR_RNDN);
        mpfr_set_d(r7920, im, MPFR_RNDN);
        mpfr_hypot(r7921, r7919, r7920, MPFR_RNDN);
        mpfr_sub(r7922, r7921, r7919, MPFR_RNDN);
        ;
        mpfr_mul(r7924, r7922, r7923, MPFR_RNDN);
        mpfr_sqrt(r7925, r7924, MPFR_RNDN);
        ;
        mpfr_mul(r7927, r7925, r7926, MPFR_RNDN);
        return mpfr_get_d(r7927, MPFR_RNDN);
}

static mpfr_t r7928, r7929, r7930, r7931, r7932, r7933, r7934, r7935, r7936;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3664);
        mpfr_init(r7928);
        mpfr_init(r7929);
        mpfr_init(r7930);
        mpfr_init(r7931);
        mpfr_init_set_str(r7932, "2.0", 10, MPFR_RNDN);
        mpfr_init(r7933);
        mpfr_init(r7934);
        mpfr_init_set_str(r7935, "0.5", 10, MPFR_RNDN);
        mpfr_init(r7936);
}

double f_dm(double re, double im) {
        mpfr_set_d(r7928, re, MPFR_RNDN);
        mpfr_set_d(r7929, im, MPFR_RNDN);
        mpfr_hypot(r7930, r7928, r7929, MPFR_RNDN);
        mpfr_sub(r7931, r7930, r7928, MPFR_RNDN);
        ;
        mpfr_mul(r7933, r7931, r7932, MPFR_RNDN);
        mpfr_sqrt(r7934, r7933, MPFR_RNDN);
        ;
        mpfr_mul(r7936, r7934, r7935, MPFR_RNDN);
        return mpfr_get_d(r7936, MPFR_RNDN);
}

