#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "powComplex, real part";

double f_if(float x_re, float x_im, float y_re, float y_im) {
        float r19566 = x_re;
        float r19567 = r19566 * r19566;
        float r19568 = x_im;
        float r19569 = r19568 * r19568;
        float r19570 = r19567 + r19569;
        float r19571 = sqrt(r19570);
        float r19572 = log(r19571);
        float r19573 = y_re;
        float r19574 = r19572 * r19573;
        float r19575 = atan2(r19568, r19566);
        float r19576 = y_im;
        float r19577 = r19575 * r19576;
        float r19578 = r19574 - r19577;
        float r19579 = exp(r19578);
        float r19580 = r19572 * r19576;
        float r19581 = r19575 * r19573;
        float r19582 = r19580 + r19581;
        float r19583 = cos(r19582);
        float r19584 = r19579 * r19583;
        return r19584;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r19585 = x_re;
        double r19586 = r19585 * r19585;
        double r19587 = x_im;
        double r19588 = r19587 * r19587;
        double r19589 = r19586 + r19588;
        double r19590 = sqrt(r19589);
        double r19591 = log(r19590);
        double r19592 = y_re;
        double r19593 = r19591 * r19592;
        double r19594 = atan2(r19587, r19585);
        double r19595 = y_im;
        double r19596 = r19594 * r19595;
        double r19597 = r19593 - r19596;
        double r19598 = exp(r19597);
        double r19599 = r19591 * r19595;
        double r19600 = r19594 * r19592;
        double r19601 = r19599 + r19600;
        double r19602 = cos(r19601);
        double r19603 = r19598 * r19602;
        return r19603;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r19604 = x_im;
        float r19605 = -3.69707852118365e-309;
        bool r19606 = r19604 <= r19605;
        float r19607 = y_re;
        float r19608 = x_re;
        float r19609 = atan2(r19604, r19608);
        float r19610 = r19607 * r19609;
        float r19611 = y_im;
        float r19612 = -r19604;
        float r19613 = log(r19612);
        float r19614 = r19611 * r19613;
        float r19615 = r19610 + r19614;
        float r19616 = cos(r19615);
        float r19617 = exp(r19611);
        float r19618 = pow(r19617, r19609);
        float r19619 = r19604 * r19604;
        float r19620 = r19608 * r19608;
        float r19621 = r19619 + r19620;
        float r19622 = sqrt(r19621);
        float r19623 = pow(r19622, r19607);
        float r19624 = r19618 / r19623;
        float r19625 = r19616 / r19624;
        float r19626 = log(r19604);
        float r19627 = r19611 * r19626;
        float r19628 = r19609 * r19607;
        float r19629 = r19627 + r19628;
        float r19630 = cos(r19629);
        float r19631 = r19630 / r19624;
        float r19632 = r19606 ? r19625 : r19631;
        return r19632;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r19633 = x_im;
        double r19634 = -3.69707852118365e-309;
        bool r19635 = r19633 <= r19634;
        double r19636 = y_re;
        double r19637 = x_re;
        double r19638 = atan2(r19633, r19637);
        double r19639 = r19636 * r19638;
        double r19640 = y_im;
        double r19641 = -r19633;
        double r19642 = log(r19641);
        double r19643 = r19640 * r19642;
        double r19644 = r19639 + r19643;
        double r19645 = cos(r19644);
        double r19646 = exp(r19640);
        double r19647 = pow(r19646, r19638);
        double r19648 = r19633 * r19633;
        double r19649 = r19637 * r19637;
        double r19650 = r19648 + r19649;
        double r19651 = sqrt(r19650);
        double r19652 = pow(r19651, r19636);
        double r19653 = r19647 / r19652;
        double r19654 = r19645 / r19653;
        double r19655 = log(r19633);
        double r19656 = r19640 * r19655;
        double r19657 = r19638 * r19636;
        double r19658 = r19656 + r19657;
        double r19659 = cos(r19658);
        double r19660 = r19659 / r19653;
        double r19661 = r19635 ? r19654 : r19660;
        return r19661;
}

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 r19662, r19663, r19664, r19665, r19666, r19667, r19668, r19669, r19670, r19671, r19672, r19673, r19674, r19675, r19676, r19677, r19678, r19679, r19680;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r19662);
        mpfr_init(r19663);
        mpfr_init(r19664);
        mpfr_init(r19665);
        mpfr_init(r19666);
        mpfr_init(r19667);
        mpfr_init(r19668);
        mpfr_init(r19669);
        mpfr_init(r19670);
        mpfr_init(r19671);
        mpfr_init(r19672);
        mpfr_init(r19673);
        mpfr_init(r19674);
        mpfr_init(r19675);
        mpfr_init(r19676);
        mpfr_init(r19677);
        mpfr_init(r19678);
        mpfr_init(r19679);
        mpfr_init(r19680);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19662, x_re, MPFR_RNDN);
        mpfr_mul(r19663, r19662, r19662, MPFR_RNDN);
        mpfr_set_d(r19664, x_im, MPFR_RNDN);
        mpfr_mul(r19665, r19664, r19664, MPFR_RNDN);
        mpfr_add(r19666, r19663, r19665, MPFR_RNDN);
        mpfr_sqrt(r19667, r19666, MPFR_RNDN);
        mpfr_log(r19668, r19667, MPFR_RNDN);
        mpfr_set_d(r19669, y_re, MPFR_RNDN);
        mpfr_mul(r19670, r19668, r19669, MPFR_RNDN);
        mpfr_atan2(r19671, r19664, r19662, MPFR_RNDN);
        mpfr_set_d(r19672, y_im, MPFR_RNDN);
        mpfr_mul(r19673, r19671, r19672, MPFR_RNDN);
        mpfr_sub(r19674, r19670, r19673, MPFR_RNDN);
        mpfr_exp(r19675, r19674, MPFR_RNDN);
        mpfr_mul(r19676, r19668, r19672, MPFR_RNDN);
        mpfr_mul(r19677, r19671, r19669, MPFR_RNDN);
        mpfr_add(r19678, r19676, r19677, MPFR_RNDN);
        mpfr_cos(r19679, r19678, MPFR_RNDN);
        mpfr_mul(r19680, r19675, r19679, MPFR_RNDN);
        return mpfr_get_d(r19680, MPFR_RNDN);
}

static mpfr_t r19681, r19682, r19683, r19684, r19685, r19686, r19687, r19688, r19689, r19690, r19691, r19692, r19693, r19694, r19695, r19696, r19697, r19698, r19699, r19700, r19701, r19702, r19703, r19704, r19705, r19706, r19707, r19708, r19709;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r19681);
        mpfr_init_set_str(r19682, "-3.69707852118365e-309", 10, MPFR_RNDN);
        mpfr_init(r19683);
        mpfr_init(r19684);
        mpfr_init(r19685);
        mpfr_init(r19686);
        mpfr_init(r19687);
        mpfr_init(r19688);
        mpfr_init(r19689);
        mpfr_init(r19690);
        mpfr_init(r19691);
        mpfr_init(r19692);
        mpfr_init(r19693);
        mpfr_init(r19694);
        mpfr_init(r19695);
        mpfr_init(r19696);
        mpfr_init(r19697);
        mpfr_init(r19698);
        mpfr_init(r19699);
        mpfr_init(r19700);
        mpfr_init(r19701);
        mpfr_init(r19702);
        mpfr_init(r19703);
        mpfr_init(r19704);
        mpfr_init(r19705);
        mpfr_init(r19706);
        mpfr_init(r19707);
        mpfr_init(r19708);
        mpfr_init(r19709);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19681, x_im, MPFR_RNDN);
        ;
        mpfr_set_si(r19683, mpfr_cmp(r19681, r19682) <= 0, MPFR_RNDN);
        mpfr_set_d(r19684, y_re, MPFR_RNDN);
        mpfr_set_d(r19685, x_re, MPFR_RNDN);
        mpfr_atan2(r19686, r19681, r19685, MPFR_RNDN);
        mpfr_mul(r19687, r19684, r19686, MPFR_RNDN);
        mpfr_set_d(r19688, y_im, MPFR_RNDN);
        mpfr_neg(r19689, r19681, MPFR_RNDN);
        mpfr_log(r19690, r19689, MPFR_RNDN);
        mpfr_mul(r19691, r19688, r19690, MPFR_RNDN);
        mpfr_add(r19692, r19687, r19691, MPFR_RNDN);
        mpfr_cos(r19693, r19692, MPFR_RNDN);
        mpfr_exp(r19694, r19688, MPFR_RNDN);
        mpfr_pow(r19695, r19694, r19686, MPFR_RNDN);
        mpfr_mul(r19696, r19681, r19681, MPFR_RNDN);
        mpfr_mul(r19697, r19685, r19685, MPFR_RNDN);
        mpfr_add(r19698, r19696, r19697, MPFR_RNDN);
        mpfr_sqrt(r19699, r19698, MPFR_RNDN);
        mpfr_pow(r19700, r19699, r19684, MPFR_RNDN);
        mpfr_div(r19701, r19695, r19700, MPFR_RNDN);
        mpfr_div(r19702, r19693, r19701, MPFR_RNDN);
        mpfr_log(r19703, r19681, MPFR_RNDN);
        mpfr_mul(r19704, r19688, r19703, MPFR_RNDN);
        mpfr_mul(r19705, r19686, r19684, MPFR_RNDN);
        mpfr_add(r19706, r19704, r19705, MPFR_RNDN);
        mpfr_cos(r19707, r19706, MPFR_RNDN);
        mpfr_div(r19708, r19707, r19701, MPFR_RNDN);
        if (mpfr_get_si(r19683, MPFR_RNDN)) { mpfr_set(r19709, r19702, MPFR_RNDN); } else { mpfr_set(r19709, r19708, MPFR_RNDN); };
        return mpfr_get_d(r19709, MPFR_RNDN);
}

static mpfr_t r19710, r19711, r19712, r19713, r19714, r19715, r19716, r19717, r19718, r19719, r19720, r19721, r19722, r19723, r19724, r19725, r19726, r19727, r19728, r19729, r19730, r19731, r19732, r19733, r19734, r19735, r19736, r19737, r19738;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r19710);
        mpfr_init_set_str(r19711, "-3.69707852118365e-309", 10, MPFR_RNDN);
        mpfr_init(r19712);
        mpfr_init(r19713);
        mpfr_init(r19714);
        mpfr_init(r19715);
        mpfr_init(r19716);
        mpfr_init(r19717);
        mpfr_init(r19718);
        mpfr_init(r19719);
        mpfr_init(r19720);
        mpfr_init(r19721);
        mpfr_init(r19722);
        mpfr_init(r19723);
        mpfr_init(r19724);
        mpfr_init(r19725);
        mpfr_init(r19726);
        mpfr_init(r19727);
        mpfr_init(r19728);
        mpfr_init(r19729);
        mpfr_init(r19730);
        mpfr_init(r19731);
        mpfr_init(r19732);
        mpfr_init(r19733);
        mpfr_init(r19734);
        mpfr_init(r19735);
        mpfr_init(r19736);
        mpfr_init(r19737);
        mpfr_init(r19738);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r19710, x_im, MPFR_RNDN);
        ;
        mpfr_set_si(r19712, mpfr_cmp(r19710, r19711) <= 0, MPFR_RNDN);
        mpfr_set_d(r19713, y_re, MPFR_RNDN);
        mpfr_set_d(r19714, x_re, MPFR_RNDN);
        mpfr_atan2(r19715, r19710, r19714, MPFR_RNDN);
        mpfr_mul(r19716, r19713, r19715, MPFR_RNDN);
        mpfr_set_d(r19717, y_im, MPFR_RNDN);
        mpfr_neg(r19718, r19710, MPFR_RNDN);
        mpfr_log(r19719, r19718, MPFR_RNDN);
        mpfr_mul(r19720, r19717, r19719, MPFR_RNDN);
        mpfr_add(r19721, r19716, r19720, MPFR_RNDN);
        mpfr_cos(r19722, r19721, MPFR_RNDN);
        mpfr_exp(r19723, r19717, MPFR_RNDN);
        mpfr_pow(r19724, r19723, r19715, MPFR_RNDN);
        mpfr_mul(r19725, r19710, r19710, MPFR_RNDN);
        mpfr_mul(r19726, r19714, r19714, MPFR_RNDN);
        mpfr_add(r19727, r19725, r19726, MPFR_RNDN);
        mpfr_sqrt(r19728, r19727, MPFR_RNDN);
        mpfr_pow(r19729, r19728, r19713, MPFR_RNDN);
        mpfr_div(r19730, r19724, r19729, MPFR_RNDN);
        mpfr_div(r19731, r19722, r19730, MPFR_RNDN);
        mpfr_log(r19732, r19710, MPFR_RNDN);
        mpfr_mul(r19733, r19717, r19732, MPFR_RNDN);
        mpfr_mul(r19734, r19715, r19713, MPFR_RNDN);
        mpfr_add(r19735, r19733, r19734, MPFR_RNDN);
        mpfr_cos(r19736, r19735, MPFR_RNDN);
        mpfr_div(r19737, r19736, r19730, MPFR_RNDN);
        if (mpfr_get_si(r19712, MPFR_RNDN)) { mpfr_set(r19738, r19731, MPFR_RNDN); } else { mpfr_set(r19738, r19737, MPFR_RNDN); };
        return mpfr_get_d(r19738, MPFR_RNDN);
}

