#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 r20554 = x_re;
        float r20555 = r20554 * r20554;
        float r20556 = x_im;
        float r20557 = r20556 * r20556;
        float r20558 = r20555 + r20557;
        float r20559 = sqrt(r20558);
        float r20560 = log(r20559);
        float r20561 = y_re;
        float r20562 = r20560 * r20561;
        float r20563 = atan2(r20556, r20554);
        float r20564 = y_im;
        float r20565 = r20563 * r20564;
        float r20566 = r20562 - r20565;
        float r20567 = exp(r20566);
        float r20568 = r20560 * r20564;
        float r20569 = r20563 * r20561;
        float r20570 = r20568 + r20569;
        float r20571 = cos(r20570);
        float r20572 = r20567 * r20571;
        return r20572;
}

double f_id(double x_re, double x_im, double y_re, double y_im) {
        double r20573 = x_re;
        double r20574 = r20573 * r20573;
        double r20575 = x_im;
        double r20576 = r20575 * r20575;
        double r20577 = r20574 + r20576;
        double r20578 = sqrt(r20577);
        double r20579 = log(r20578);
        double r20580 = y_re;
        double r20581 = r20579 * r20580;
        double r20582 = atan2(r20575, r20573);
        double r20583 = y_im;
        double r20584 = r20582 * r20583;
        double r20585 = r20581 - r20584;
        double r20586 = exp(r20585);
        double r20587 = r20579 * r20583;
        double r20588 = r20582 * r20580;
        double r20589 = r20587 + r20588;
        double r20590 = cos(r20589);
        double r20591 = r20586 * r20590;
        return r20591;
}


double f_of(float x_re, float x_im, float y_re, float y_im) {
        float r20592 = x_im;
        float r20593 = x_re;
        float r20594 = hypot(r20592, r20593);
        float r20595 = log(r20594);
        float r20596 = y_im;
        float r20597 = atan2(r20592, r20593);
        float r20598 = y_re;
        float r20599 = r20597 * r20598;
        float r20600 = fma(r20595, r20596, r20599);
        float r20601 = cos(r20600);
        float r20602 = r20596 * r20597;
        float r20603 = r20595 * r20598;
        float r20604 = r20602 - r20603;
        float r20605 = exp(r20604);
        float r20606 = r20601 / r20605;
        return r20606;
}

double f_od(double x_re, double x_im, double y_re, double y_im) {
        double r20607 = x_im;
        double r20608 = x_re;
        double r20609 = hypot(r20607, r20608);
        double r20610 = log(r20609);
        double r20611 = y_im;
        double r20612 = atan2(r20607, r20608);
        double r20613 = y_re;
        double r20614 = r20612 * r20613;
        double r20615 = fma(r20610, r20611, r20614);
        double r20616 = cos(r20615);
        double r20617 = r20611 * r20612;
        double r20618 = r20610 * r20613;
        double r20619 = r20617 - r20618;
        double r20620 = exp(r20619);
        double r20621 = r20616 / r20620;
        return r20621;
}

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 r20622, r20623, r20624, r20625, r20626, r20627, r20628, r20629, r20630, r20631, r20632, r20633, r20634, r20635, r20636, r20637, r20638, r20639, r20640;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20622);
        mpfr_init(r20623);
        mpfr_init(r20624);
        mpfr_init(r20625);
        mpfr_init(r20626);
        mpfr_init(r20627);
        mpfr_init(r20628);
        mpfr_init(r20629);
        mpfr_init(r20630);
        mpfr_init(r20631);
        mpfr_init(r20632);
        mpfr_init(r20633);
        mpfr_init(r20634);
        mpfr_init(r20635);
        mpfr_init(r20636);
        mpfr_init(r20637);
        mpfr_init(r20638);
        mpfr_init(r20639);
        mpfr_init(r20640);
}

double f_im(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r20622, x_re, MPFR_RNDN);
        mpfr_mul(r20623, r20622, r20622, MPFR_RNDN);
        mpfr_set_d(r20624, x_im, MPFR_RNDN);
        mpfr_mul(r20625, r20624, r20624, MPFR_RNDN);
        mpfr_add(r20626, r20623, r20625, MPFR_RNDN);
        mpfr_sqrt(r20627, r20626, MPFR_RNDN);
        mpfr_log(r20628, r20627, MPFR_RNDN);
        mpfr_set_d(r20629, y_re, MPFR_RNDN);
        mpfr_mul(r20630, r20628, r20629, MPFR_RNDN);
        mpfr_atan2(r20631, r20624, r20622, MPFR_RNDN);
        mpfr_set_d(r20632, y_im, MPFR_RNDN);
        mpfr_mul(r20633, r20631, r20632, MPFR_RNDN);
        mpfr_sub(r20634, r20630, r20633, MPFR_RNDN);
        mpfr_exp(r20635, r20634, MPFR_RNDN);
        mpfr_mul(r20636, r20628, r20632, MPFR_RNDN);
        mpfr_mul(r20637, r20631, r20629, MPFR_RNDN);
        mpfr_add(r20638, r20636, r20637, MPFR_RNDN);
        mpfr_cos(r20639, r20638, MPFR_RNDN);
        mpfr_mul(r20640, r20635, r20639, MPFR_RNDN);
        return mpfr_get_d(r20640, MPFR_RNDN);
}

static mpfr_t r20641, r20642, r20643, r20644, r20645, r20646, r20647, r20648, r20649, r20650, r20651, r20652, r20653, r20654, r20655;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20641);
        mpfr_init(r20642);
        mpfr_init(r20643);
        mpfr_init(r20644);
        mpfr_init(r20645);
        mpfr_init(r20646);
        mpfr_init(r20647);
        mpfr_init(r20648);
        mpfr_init(r20649);
        mpfr_init(r20650);
        mpfr_init(r20651);
        mpfr_init(r20652);
        mpfr_init(r20653);
        mpfr_init(r20654);
        mpfr_init(r20655);
}

double f_fm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r20641, x_im, MPFR_RNDN);
        mpfr_set_d(r20642, x_re, MPFR_RNDN);
        mpfr_hypot(r20643, r20641, r20642, MPFR_RNDN);
        mpfr_log(r20644, r20643, MPFR_RNDN);
        mpfr_set_d(r20645, y_im, MPFR_RNDN);
        mpfr_atan2(r20646, r20641, r20642, MPFR_RNDN);
        mpfr_set_d(r20647, y_re, MPFR_RNDN);
        mpfr_mul(r20648, r20646, r20647, MPFR_RNDN);
        mpfr_fma(r20649, r20644, r20645, r20648, MPFR_RNDN);
        mpfr_cos(r20650, r20649, MPFR_RNDN);
        mpfr_mul(r20651, r20645, r20646, MPFR_RNDN);
        mpfr_mul(r20652, r20644, r20647, MPFR_RNDN);
        mpfr_sub(r20653, r20651, r20652, MPFR_RNDN);
        mpfr_exp(r20654, r20653, MPFR_RNDN);
        mpfr_div(r20655, r20650, r20654, MPFR_RNDN);
        return mpfr_get_d(r20655, MPFR_RNDN);
}

static mpfr_t r20656, r20657, r20658, r20659, r20660, r20661, r20662, r20663, r20664, r20665, r20666, r20667, r20668, r20669, r20670;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r20656);
        mpfr_init(r20657);
        mpfr_init(r20658);
        mpfr_init(r20659);
        mpfr_init(r20660);
        mpfr_init(r20661);
        mpfr_init(r20662);
        mpfr_init(r20663);
        mpfr_init(r20664);
        mpfr_init(r20665);
        mpfr_init(r20666);
        mpfr_init(r20667);
        mpfr_init(r20668);
        mpfr_init(r20669);
        mpfr_init(r20670);
}

double f_dm(double x_re, double x_im, double y_re, double y_im) {
        mpfr_set_d(r20656, x_im, MPFR_RNDN);
        mpfr_set_d(r20657, x_re, MPFR_RNDN);
        mpfr_hypot(r20658, r20656, r20657, MPFR_RNDN);
        mpfr_log(r20659, r20658, MPFR_RNDN);
        mpfr_set_d(r20660, y_im, MPFR_RNDN);
        mpfr_atan2(r20661, r20656, r20657, MPFR_RNDN);
        mpfr_set_d(r20662, y_re, MPFR_RNDN);
        mpfr_mul(r20663, r20661, r20662, MPFR_RNDN);
        mpfr_fma(r20664, r20659, r20660, r20663, MPFR_RNDN);
        mpfr_cos(r20665, r20664, MPFR_RNDN);
        mpfr_mul(r20666, r20660, r20661, MPFR_RNDN);
        mpfr_mul(r20667, r20659, r20662, MPFR_RNDN);
        mpfr_sub(r20668, r20666, r20667, MPFR_RNDN);
        mpfr_exp(r20669, r20668, MPFR_RNDN);
        mpfr_div(r20670, r20665, r20669, MPFR_RNDN);
        return mpfr_get_d(r20670, MPFR_RNDN);
}

