#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 r8768 = 0.5;
        float r8769 = 2.0;
        float r8770 = re;
        float r8771 = r8770 * r8770;
        float r8772 = im;
        float r8773 = r8772 * r8772;
        float r8774 = r8771 - r8773;
        float r8775 = sqrt(r8774);
        float r8776 = r8775 + r8770;
        float r8777 = r8769 * r8776;
        float r8778 = sqrt(r8777);
        float r8779 = r8768 * r8778;
        return r8779;
}

double f_id(double re, double im) {
        double r8780 = 0.5;
        double r8781 = 2.0;
        double r8782 = re;
        double r8783 = r8782 * r8782;
        double r8784 = im;
        double r8785 = r8784 * r8784;
        double r8786 = r8783 - r8785;
        double r8787 = sqrt(r8786);
        double r8788 = r8787 + r8782;
        double r8789 = r8781 * r8788;
        double r8790 = sqrt(r8789);
        double r8791 = r8780 * r8790;
        return r8791;
}


double f_of(float re, float im) {
        float r8792 = 0.5;
        float r8793 = 2.0;
        float r8794 = re;
        float r8795 = im;
        float r8796 = r8794 + r8795;
        float r8797 = sqrt(r8796);
        float r8798 = r8794 - r8795;
        float r8799 = sqrt(r8798);
        float r8800 = r8797 * r8799;
        float r8801 = r8800 + r8794;
        float r8802 = r8793 * r8801;
        float r8803 = sqrt(r8802);
        float r8804 = r8792 * r8803;
        return r8804;
}

double f_od(double re, double im) {
        double r8805 = 0.5;
        double r8806 = 2.0;
        double r8807 = re;
        double r8808 = im;
        double r8809 = r8807 + r8808;
        double r8810 = sqrt(r8809);
        double r8811 = r8807 - r8808;
        double r8812 = sqrt(r8811);
        double r8813 = r8810 * r8812;
        double r8814 = r8813 + r8807;
        double r8815 = r8806 * r8814;
        double r8816 = sqrt(r8815);
        double r8817 = r8805 * r8816;
        return r8817;
}

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 r8818, r8819, r8820, r8821, r8822, r8823, r8824, r8825, r8826, r8827, r8828, r8829;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(4432);
        mpfr_init_set_str(r8818, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r8819, "2.0", 10, MPFR_RNDN);
        mpfr_init(r8820);
        mpfr_init(r8821);
        mpfr_init(r8822);
        mpfr_init(r8823);
        mpfr_init(r8824);
        mpfr_init(r8825);
        mpfr_init(r8826);
        mpfr_init(r8827);
        mpfr_init(r8828);
        mpfr_init(r8829);
}

double f_im(double re, double im) {
        ;
        ;
        mpfr_set_d(r8820, re, MPFR_RNDN);
        mpfr_mul(r8821, r8820, r8820, MPFR_RNDN);
        mpfr_set_d(r8822, im, MPFR_RNDN);
        mpfr_mul(r8823, r8822, r8822, MPFR_RNDN);
        mpfr_sub(r8824, r8821, r8823, MPFR_RNDN);
        mpfr_sqrt(r8825, r8824, MPFR_RNDN);
        mpfr_add(r8826, r8825, r8820, MPFR_RNDN);
        mpfr_mul(r8827, r8819, r8826, MPFR_RNDN);
        mpfr_sqrt(r8828, r8827, MPFR_RNDN);
        mpfr_mul(r8829, r8818, r8828, MPFR_RNDN);
        return mpfr_get_d(r8829, MPFR_RNDN);
}

static mpfr_t r8830, r8831, r8832, r8833, r8834, r8835, r8836, r8837, r8838, r8839, r8840, r8841, r8842;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(4432);
        mpfr_init_set_str(r8830, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r8831, "2.0", 10, MPFR_RNDN);
        mpfr_init(r8832);
        mpfr_init(r8833);
        mpfr_init(r8834);
        mpfr_init(r8835);
        mpfr_init(r8836);
        mpfr_init(r8837);
        mpfr_init(r8838);
        mpfr_init(r8839);
        mpfr_init(r8840);
        mpfr_init(r8841);
        mpfr_init(r8842);
}

double f_fm(double re, double im) {
        ;
        ;
        mpfr_set_d(r8832, re, MPFR_RNDN);
        mpfr_set_d(r8833, im, MPFR_RNDN);
        mpfr_add(r8834, r8832, r8833, MPFR_RNDN);
        mpfr_sqrt(r8835, r8834, MPFR_RNDN);
        mpfr_sub(r8836, r8832, r8833, MPFR_RNDN);
        mpfr_sqrt(r8837, r8836, MPFR_RNDN);
        mpfr_mul(r8838, r8835, r8837, MPFR_RNDN);
        mpfr_add(r8839, r8838, r8832, MPFR_RNDN);
        mpfr_mul(r8840, r8831, r8839, MPFR_RNDN);
        mpfr_sqrt(r8841, r8840, MPFR_RNDN);
        mpfr_mul(r8842, r8830, r8841, MPFR_RNDN);
        return mpfr_get_d(r8842, MPFR_RNDN);
}

static mpfr_t r8843, r8844, r8845, r8846, r8847, r8848, r8849, r8850, r8851, r8852, r8853, r8854, r8855;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(4432);
        mpfr_init_set_str(r8843, "0.5", 10, MPFR_RNDN);
        mpfr_init_set_str(r8844, "2.0", 10, MPFR_RNDN);
        mpfr_init(r8845);
        mpfr_init(r8846);
        mpfr_init(r8847);
        mpfr_init(r8848);
        mpfr_init(r8849);
        mpfr_init(r8850);
        mpfr_init(r8851);
        mpfr_init(r8852);
        mpfr_init(r8853);
        mpfr_init(r8854);
        mpfr_init(r8855);
}

double f_dm(double re, double im) {
        ;
        ;
        mpfr_set_d(r8845, re, MPFR_RNDN);
        mpfr_set_d(r8846, im, MPFR_RNDN);
        mpfr_add(r8847, r8845, r8846, MPFR_RNDN);
        mpfr_sqrt(r8848, r8847, MPFR_RNDN);
        mpfr_sub(r8849, r8845, r8846, MPFR_RNDN);
        mpfr_sqrt(r8850, r8849, MPFR_RNDN);
        mpfr_mul(r8851, r8848, r8850, MPFR_RNDN);
        mpfr_add(r8852, r8851, r8845, MPFR_RNDN);
        mpfr_mul(r8853, r8844, r8852, MPFR_RNDN);
        mpfr_sqrt(r8854, r8853, MPFR_RNDN);
        mpfr_mul(r8855, r8843, r8854, MPFR_RNDN);
        return mpfr_get_d(r8855, MPFR_RNDN);
}

