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

char *name = "Bouland and Aaronson, Equation (26)";

double f_if(float a, float b) {
        float r27676 = a;
        float r27677 = r27676 * r27676;
        float r27678 = b;
        float r27679 = r27678 * r27678;
        float r27680 = r27677 + r27679;
        float r27681 = 2;
        float r27682 = pow(r27680, r27681);
        float r27683 = 4;
        float r27684 = r27683 * r27679;
        float r27685 = r27682 + r27684;
        float r27686 = 1;
        float r27687 = r27685 - r27686;
        return r27687;
}

double f_id(double a, double b) {
        double r27688 = a;
        double r27689 = r27688 * r27688;
        double r27690 = b;
        double r27691 = r27690 * r27690;
        double r27692 = r27689 + r27691;
        double r27693 = 2;
        double r27694 = pow(r27692, r27693);
        double r27695 = 4;
        double r27696 = r27695 * r27691;
        double r27697 = r27694 + r27696;
        double r27698 = 1;
        double r27699 = r27697 - r27698;
        return r27699;
}


double f_of(float a, float b) {
        float r27700 = a;
        float r27701 = r27700 * r27700;
        float r27702 = b;
        float r27703 = r27702 * r27702;
        float r27704 = r27701 + r27703;
        float r27705 = 2;
        float r27706 = pow(r27704, r27705);
        float r27707 = 4;
        float r27708 = r27707 * r27703;
        float r27709 = r27706 + r27708;
        float r27710 = 1;
        float r27711 = r27709 - r27710;
        return r27711;
}

double f_od(double a, double b) {
        double r27712 = a;
        double r27713 = r27712 * r27712;
        double r27714 = b;
        double r27715 = r27714 * r27714;
        double r27716 = r27713 + r27715;
        double r27717 = 2;
        double r27718 = pow(r27716, r27717);
        double r27719 = 4;
        double r27720 = r27719 * r27715;
        double r27721 = r27718 + r27720;
        double r27722 = 1;
        double r27723 = r27721 - r27722;
        return r27723;
}

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 r27724, r27725, r27726, r27727, r27728, r27729, r27730, r27731, r27732, r27733, r27734, r27735;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27724);
        mpfr_init(r27725);
        mpfr_init(r27726);
        mpfr_init(r27727);
        mpfr_init(r27728);
        mpfr_init_set_str(r27729, "2", 10, MPFR_RNDN);
        mpfr_init(r27730);
        mpfr_init_set_str(r27731, "4", 10, MPFR_RNDN);
        mpfr_init(r27732);
        mpfr_init(r27733);
        mpfr_init_set_str(r27734, "1", 10, MPFR_RNDN);
        mpfr_init(r27735);
}

double f_im(double a, double b) {
        mpfr_set_d(r27724, a, MPFR_RNDN);
        mpfr_mul(r27725, r27724, r27724, MPFR_RNDN);
        mpfr_set_d(r27726, b, MPFR_RNDN);
        mpfr_mul(r27727, r27726, r27726, MPFR_RNDN);
        mpfr_add(r27728, r27725, r27727, MPFR_RNDN);
        ;
        mpfr_pow(r27730, r27728, r27729, MPFR_RNDN);
        ;
        mpfr_mul(r27732, r27731, r27727, MPFR_RNDN);
        mpfr_add(r27733, r27730, r27732, MPFR_RNDN);
        ;
        mpfr_sub(r27735, r27733, r27734, MPFR_RNDN);
        return mpfr_get_d(r27735, MPFR_RNDN);
}

static mpfr_t r27736, r27737, r27738, r27739, r27740, r27741, r27742, r27743, r27744, r27745, r27746, r27747;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27736);
        mpfr_init(r27737);
        mpfr_init(r27738);
        mpfr_init(r27739);
        mpfr_init(r27740);
        mpfr_init_set_str(r27741, "2", 10, MPFR_RNDN);
        mpfr_init(r27742);
        mpfr_init_set_str(r27743, "4", 10, MPFR_RNDN);
        mpfr_init(r27744);
        mpfr_init(r27745);
        mpfr_init_set_str(r27746, "1", 10, MPFR_RNDN);
        mpfr_init(r27747);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27736, a, MPFR_RNDN);
        mpfr_mul(r27737, r27736, r27736, MPFR_RNDN);
        mpfr_set_d(r27738, b, MPFR_RNDN);
        mpfr_mul(r27739, r27738, r27738, MPFR_RNDN);
        mpfr_add(r27740, r27737, r27739, MPFR_RNDN);
        ;
        mpfr_pow(r27742, r27740, r27741, MPFR_RNDN);
        ;
        mpfr_mul(r27744, r27743, r27739, MPFR_RNDN);
        mpfr_add(r27745, r27742, r27744, MPFR_RNDN);
        ;
        mpfr_sub(r27747, r27745, r27746, MPFR_RNDN);
        return mpfr_get_d(r27747, MPFR_RNDN);
}

static mpfr_t r27748, r27749, r27750, r27751, r27752, r27753, r27754, r27755, r27756, r27757, r27758, r27759;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27748);
        mpfr_init(r27749);
        mpfr_init(r27750);
        mpfr_init(r27751);
        mpfr_init(r27752);
        mpfr_init_set_str(r27753, "2", 10, MPFR_RNDN);
        mpfr_init(r27754);
        mpfr_init_set_str(r27755, "4", 10, MPFR_RNDN);
        mpfr_init(r27756);
        mpfr_init(r27757);
        mpfr_init_set_str(r27758, "1", 10, MPFR_RNDN);
        mpfr_init(r27759);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27748, a, MPFR_RNDN);
        mpfr_mul(r27749, r27748, r27748, MPFR_RNDN);
        mpfr_set_d(r27750, b, MPFR_RNDN);
        mpfr_mul(r27751, r27750, r27750, MPFR_RNDN);
        mpfr_add(r27752, r27749, r27751, MPFR_RNDN);
        ;
        mpfr_pow(r27754, r27752, r27753, MPFR_RNDN);
        ;
        mpfr_mul(r27756, r27755, r27751, MPFR_RNDN);
        mpfr_add(r27757, r27754, r27756, MPFR_RNDN);
        ;
        mpfr_sub(r27759, r27757, r27758, MPFR_RNDN);
        return mpfr_get_d(r27759, MPFR_RNDN);
}

