#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 r11785 = a;
        float r11786 = r11785 * r11785;
        float r11787 = b;
        float r11788 = r11787 * r11787;
        float r11789 = r11786 + r11788;
        float r11790 = 2;
        float r11791 = pow(r11789, r11790);
        float r11792 = 4;
        float r11793 = r11792 * r11788;
        float r11794 = r11791 + r11793;
        float r11795 = 1;
        float r11796 = r11794 - r11795;
        return r11796;
}

double f_id(double a, double b) {
        double r11797 = a;
        double r11798 = r11797 * r11797;
        double r11799 = b;
        double r11800 = r11799 * r11799;
        double r11801 = r11798 + r11800;
        double r11802 = 2;
        double r11803 = pow(r11801, r11802);
        double r11804 = 4;
        double r11805 = r11804 * r11800;
        double r11806 = r11803 + r11805;
        double r11807 = 1;
        double r11808 = r11806 - r11807;
        return r11808;
}


double f_of(float a, float b) {
        float r11809 = a;
        float r11810 = r11809 * r11809;
        float r11811 = b;
        float r11812 = r11811 * r11811;
        float r11813 = r11810 + r11812;
        float r11814 = 2;
        float r11815 = pow(r11813, r11814);
        float r11816 = 4;
        float r11817 = r11816 * r11812;
        float r11818 = r11815 + r11817;
        float r11819 = 1;
        float r11820 = r11818 - r11819;
        return r11820;
}

double f_od(double a, double b) {
        double r11821 = a;
        double r11822 = r11821 * r11821;
        double r11823 = b;
        double r11824 = r11823 * r11823;
        double r11825 = r11822 + r11824;
        double r11826 = 2;
        double r11827 = pow(r11825, r11826);
        double r11828 = 4;
        double r11829 = r11828 * r11824;
        double r11830 = r11827 + r11829;
        double r11831 = 1;
        double r11832 = r11830 - r11831;
        return r11832;
}

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 r11833, r11834, r11835, r11836, r11837, r11838, r11839, r11840, r11841, r11842, r11843, r11844;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11833);
        mpfr_init(r11834);
        mpfr_init(r11835);
        mpfr_init(r11836);
        mpfr_init(r11837);
        mpfr_init_set_str(r11838, "2", 10, MPFR_RNDN);
        mpfr_init(r11839);
        mpfr_init_set_str(r11840, "4", 10, MPFR_RNDN);
        mpfr_init(r11841);
        mpfr_init(r11842);
        mpfr_init_set_str(r11843, "1", 10, MPFR_RNDN);
        mpfr_init(r11844);
}

double f_im(double a, double b) {
        mpfr_set_d(r11833, a, MPFR_RNDN);
        mpfr_mul(r11834, r11833, r11833, MPFR_RNDN);
        mpfr_set_d(r11835, b, MPFR_RNDN);
        mpfr_mul(r11836, r11835, r11835, MPFR_RNDN);
        mpfr_add(r11837, r11834, r11836, MPFR_RNDN);
        ;
        mpfr_pow(r11839, r11837, r11838, MPFR_RNDN);
        ;
        mpfr_mul(r11841, r11840, r11836, MPFR_RNDN);
        mpfr_add(r11842, r11839, r11841, MPFR_RNDN);
        ;
        mpfr_sub(r11844, r11842, r11843, MPFR_RNDN);
        return mpfr_get_d(r11844, MPFR_RNDN);
}

static mpfr_t r11845, r11846, r11847, r11848, r11849, r11850, r11851, r11852, r11853, r11854, r11855, r11856;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11845);
        mpfr_init(r11846);
        mpfr_init(r11847);
        mpfr_init(r11848);
        mpfr_init(r11849);
        mpfr_init_set_str(r11850, "2", 10, MPFR_RNDN);
        mpfr_init(r11851);
        mpfr_init_set_str(r11852, "4", 10, MPFR_RNDN);
        mpfr_init(r11853);
        mpfr_init(r11854);
        mpfr_init_set_str(r11855, "1", 10, MPFR_RNDN);
        mpfr_init(r11856);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11845, a, MPFR_RNDN);
        mpfr_mul(r11846, r11845, r11845, MPFR_RNDN);
        mpfr_set_d(r11847, b, MPFR_RNDN);
        mpfr_mul(r11848, r11847, r11847, MPFR_RNDN);
        mpfr_add(r11849, r11846, r11848, MPFR_RNDN);
        ;
        mpfr_pow(r11851, r11849, r11850, MPFR_RNDN);
        ;
        mpfr_mul(r11853, r11852, r11848, MPFR_RNDN);
        mpfr_add(r11854, r11851, r11853, MPFR_RNDN);
        ;
        mpfr_sub(r11856, r11854, r11855, MPFR_RNDN);
        return mpfr_get_d(r11856, MPFR_RNDN);
}

static mpfr_t r11857, r11858, r11859, r11860, r11861, r11862, r11863, r11864, r11865, r11866, r11867, r11868;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11857);
        mpfr_init(r11858);
        mpfr_init(r11859);
        mpfr_init(r11860);
        mpfr_init(r11861);
        mpfr_init_set_str(r11862, "2", 10, MPFR_RNDN);
        mpfr_init(r11863);
        mpfr_init_set_str(r11864, "4", 10, MPFR_RNDN);
        mpfr_init(r11865);
        mpfr_init(r11866);
        mpfr_init_set_str(r11867, "1", 10, MPFR_RNDN);
        mpfr_init(r11868);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11857, a, MPFR_RNDN);
        mpfr_mul(r11858, r11857, r11857, MPFR_RNDN);
        mpfr_set_d(r11859, b, MPFR_RNDN);
        mpfr_mul(r11860, r11859, r11859, MPFR_RNDN);
        mpfr_add(r11861, r11858, r11860, MPFR_RNDN);
        ;
        mpfr_pow(r11863, r11861, r11862, MPFR_RNDN);
        ;
        mpfr_mul(r11865, r11864, r11860, MPFR_RNDN);
        mpfr_add(r11866, r11863, r11865, MPFR_RNDN);
        ;
        mpfr_sub(r11868, r11866, r11867, MPFR_RNDN);
        return mpfr_get_d(r11868, MPFR_RNDN);
}

