#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 r27764 = a;
        float r27765 = r27764 * r27764;
        float r27766 = b;
        float r27767 = r27766 * r27766;
        float r27768 = r27765 + r27767;
        float r27769 = 2;
        float r27770 = pow(r27768, r27769);
        float r27771 = 4;
        float r27772 = r27771 * r27767;
        float r27773 = r27770 + r27772;
        float r27774 = 1;
        float r27775 = r27773 - r27774;
        return r27775;
}

double f_id(double a, double b) {
        double r27776 = a;
        double r27777 = r27776 * r27776;
        double r27778 = b;
        double r27779 = r27778 * r27778;
        double r27780 = r27777 + r27779;
        double r27781 = 2;
        double r27782 = pow(r27780, r27781);
        double r27783 = 4;
        double r27784 = r27783 * r27779;
        double r27785 = r27782 + r27784;
        double r27786 = 1;
        double r27787 = r27785 - r27786;
        return r27787;
}


double f_of(float a, float b) {
        float r27788 = a;
        float r27789 = r27788 * r27788;
        float r27790 = b;
        float r27791 = r27790 * r27790;
        float r27792 = r27789 + r27791;
        float r27793 = 2;
        float r27794 = pow(r27792, r27793);
        float r27795 = 4;
        float r27796 = r27795 * r27791;
        float r27797 = r27794 + r27796;
        float r27798 = 1;
        float r27799 = r27797 - r27798;
        return r27799;
}

double f_od(double a, double b) {
        double r27800 = a;
        double r27801 = r27800 * r27800;
        double r27802 = b;
        double r27803 = r27802 * r27802;
        double r27804 = r27801 + r27803;
        double r27805 = 2;
        double r27806 = pow(r27804, r27805);
        double r27807 = 4;
        double r27808 = r27807 * r27803;
        double r27809 = r27806 + r27808;
        double r27810 = 1;
        double r27811 = r27809 - r27810;
        return r27811;
}

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 r27812, r27813, r27814, r27815, r27816, r27817, r27818, r27819, r27820, r27821, r27822, r27823;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27812);
        mpfr_init(r27813);
        mpfr_init(r27814);
        mpfr_init(r27815);
        mpfr_init(r27816);
        mpfr_init_set_str(r27817, "2", 10, MPFR_RNDN);
        mpfr_init(r27818);
        mpfr_init_set_str(r27819, "4", 10, MPFR_RNDN);
        mpfr_init(r27820);
        mpfr_init(r27821);
        mpfr_init_set_str(r27822, "1", 10, MPFR_RNDN);
        mpfr_init(r27823);
}

double f_im(double a, double b) {
        mpfr_set_d(r27812, a, MPFR_RNDN);
        mpfr_mul(r27813, r27812, r27812, MPFR_RNDN);
        mpfr_set_d(r27814, b, MPFR_RNDN);
        mpfr_mul(r27815, r27814, r27814, MPFR_RNDN);
        mpfr_add(r27816, r27813, r27815, MPFR_RNDN);
        ;
        mpfr_pow(r27818, r27816, r27817, MPFR_RNDN);
        ;
        mpfr_mul(r27820, r27819, r27815, MPFR_RNDN);
        mpfr_add(r27821, r27818, r27820, MPFR_RNDN);
        ;
        mpfr_sub(r27823, r27821, r27822, MPFR_RNDN);
        return mpfr_get_d(r27823, MPFR_RNDN);
}

static mpfr_t r27824, r27825, r27826, r27827, r27828, r27829, r27830, r27831, r27832, r27833, r27834, r27835;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27824);
        mpfr_init(r27825);
        mpfr_init(r27826);
        mpfr_init(r27827);
        mpfr_init(r27828);
        mpfr_init_set_str(r27829, "2", 10, MPFR_RNDN);
        mpfr_init(r27830);
        mpfr_init_set_str(r27831, "4", 10, MPFR_RNDN);
        mpfr_init(r27832);
        mpfr_init(r27833);
        mpfr_init_set_str(r27834, "1", 10, MPFR_RNDN);
        mpfr_init(r27835);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27824, a, MPFR_RNDN);
        mpfr_mul(r27825, r27824, r27824, MPFR_RNDN);
        mpfr_set_d(r27826, b, MPFR_RNDN);
        mpfr_mul(r27827, r27826, r27826, MPFR_RNDN);
        mpfr_add(r27828, r27825, r27827, MPFR_RNDN);
        ;
        mpfr_pow(r27830, r27828, r27829, MPFR_RNDN);
        ;
        mpfr_mul(r27832, r27831, r27827, MPFR_RNDN);
        mpfr_add(r27833, r27830, r27832, MPFR_RNDN);
        ;
        mpfr_sub(r27835, r27833, r27834, MPFR_RNDN);
        return mpfr_get_d(r27835, MPFR_RNDN);
}

static mpfr_t r27836, r27837, r27838, r27839, r27840, r27841, r27842, r27843, r27844, r27845, r27846, r27847;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27836);
        mpfr_init(r27837);
        mpfr_init(r27838);
        mpfr_init(r27839);
        mpfr_init(r27840);
        mpfr_init_set_str(r27841, "2", 10, MPFR_RNDN);
        mpfr_init(r27842);
        mpfr_init_set_str(r27843, "4", 10, MPFR_RNDN);
        mpfr_init(r27844);
        mpfr_init(r27845);
        mpfr_init_set_str(r27846, "1", 10, MPFR_RNDN);
        mpfr_init(r27847);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27836, a, MPFR_RNDN);
        mpfr_mul(r27837, r27836, r27836, MPFR_RNDN);
        mpfr_set_d(r27838, b, MPFR_RNDN);
        mpfr_mul(r27839, r27838, r27838, MPFR_RNDN);
        mpfr_add(r27840, r27837, r27839, MPFR_RNDN);
        ;
        mpfr_pow(r27842, r27840, r27841, MPFR_RNDN);
        ;
        mpfr_mul(r27844, r27843, r27839, MPFR_RNDN);
        mpfr_add(r27845, r27842, r27844, MPFR_RNDN);
        ;
        mpfr_sub(r27847, r27845, r27846, MPFR_RNDN);
        return mpfr_get_d(r27847, MPFR_RNDN);
}

