#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 r27785 = a;
        float r27786 = r27785 * r27785;
        float r27787 = b;
        float r27788 = r27787 * r27787;
        float r27789 = r27786 + r27788;
        float r27790 = 2;
        float r27791 = pow(r27789, r27790);
        float r27792 = 4;
        float r27793 = r27792 * r27788;
        float r27794 = r27791 + r27793;
        float r27795 = 1;
        float r27796 = r27794 - r27795;
        return r27796;
}

double f_id(double a, double b) {
        double r27797 = a;
        double r27798 = r27797 * r27797;
        double r27799 = b;
        double r27800 = r27799 * r27799;
        double r27801 = r27798 + r27800;
        double r27802 = 2;
        double r27803 = pow(r27801, r27802);
        double r27804 = 4;
        double r27805 = r27804 * r27800;
        double r27806 = r27803 + r27805;
        double r27807 = 1;
        double r27808 = r27806 - r27807;
        return r27808;
}


double f_of(float a, float b) {
        float r27809 = a;
        float r27810 = r27809 * r27809;
        float r27811 = b;
        float r27812 = r27811 * r27811;
        float r27813 = r27810 + r27812;
        float r27814 = 2;
        float r27815 = pow(r27813, r27814);
        float r27816 = 4;
        float r27817 = r27816 * r27812;
        float r27818 = r27815 + r27817;
        float r27819 = 1;
        float r27820 = r27818 - r27819;
        return r27820;
}

double f_od(double a, double b) {
        double r27821 = a;
        double r27822 = r27821 * r27821;
        double r27823 = b;
        double r27824 = r27823 * r27823;
        double r27825 = r27822 + r27824;
        double r27826 = 2;
        double r27827 = pow(r27825, r27826);
        double r27828 = 4;
        double r27829 = r27828 * r27824;
        double r27830 = r27827 + r27829;
        double r27831 = 1;
        double r27832 = r27830 - r27831;
        return r27832;
}

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 r27833, r27834, r27835, r27836, r27837, r27838, r27839, r27840, r27841, r27842, r27843, r27844;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27833);
        mpfr_init(r27834);
        mpfr_init(r27835);
        mpfr_init(r27836);
        mpfr_init(r27837);
        mpfr_init_set_str(r27838, "2", 10, MPFR_RNDN);
        mpfr_init(r27839);
        mpfr_init_set_str(r27840, "4", 10, MPFR_RNDN);
        mpfr_init(r27841);
        mpfr_init(r27842);
        mpfr_init_set_str(r27843, "1", 10, MPFR_RNDN);
        mpfr_init(r27844);
}

double f_im(double a, double b) {
        mpfr_set_d(r27833, a, MPFR_RNDN);
        mpfr_mul(r27834, r27833, r27833, MPFR_RNDN);
        mpfr_set_d(r27835, b, MPFR_RNDN);
        mpfr_mul(r27836, r27835, r27835, MPFR_RNDN);
        mpfr_add(r27837, r27834, r27836, MPFR_RNDN);
        ;
        mpfr_pow(r27839, r27837, r27838, MPFR_RNDN);
        ;
        mpfr_mul(r27841, r27840, r27836, MPFR_RNDN);
        mpfr_add(r27842, r27839, r27841, MPFR_RNDN);
        ;
        mpfr_sub(r27844, r27842, r27843, MPFR_RNDN);
        return mpfr_get_d(r27844, MPFR_RNDN);
}

static mpfr_t r27845, r27846, r27847, r27848, r27849, r27850, r27851, r27852, r27853, r27854, r27855, r27856;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27845);
        mpfr_init(r27846);
        mpfr_init(r27847);
        mpfr_init(r27848);
        mpfr_init(r27849);
        mpfr_init_set_str(r27850, "2", 10, MPFR_RNDN);
        mpfr_init(r27851);
        mpfr_init_set_str(r27852, "4", 10, MPFR_RNDN);
        mpfr_init(r27853);
        mpfr_init(r27854);
        mpfr_init_set_str(r27855, "1", 10, MPFR_RNDN);
        mpfr_init(r27856);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27845, a, MPFR_RNDN);
        mpfr_mul(r27846, r27845, r27845, MPFR_RNDN);
        mpfr_set_d(r27847, b, MPFR_RNDN);
        mpfr_mul(r27848, r27847, r27847, MPFR_RNDN);
        mpfr_add(r27849, r27846, r27848, MPFR_RNDN);
        ;
        mpfr_pow(r27851, r27849, r27850, MPFR_RNDN);
        ;
        mpfr_mul(r27853, r27852, r27848, MPFR_RNDN);
        mpfr_add(r27854, r27851, r27853, MPFR_RNDN);
        ;
        mpfr_sub(r27856, r27854, r27855, MPFR_RNDN);
        return mpfr_get_d(r27856, MPFR_RNDN);
}

static mpfr_t r27857, r27858, r27859, r27860, r27861, r27862, r27863, r27864, r27865, r27866, r27867, r27868;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27857);
        mpfr_init(r27858);
        mpfr_init(r27859);
        mpfr_init(r27860);
        mpfr_init(r27861);
        mpfr_init_set_str(r27862, "2", 10, MPFR_RNDN);
        mpfr_init(r27863);
        mpfr_init_set_str(r27864, "4", 10, MPFR_RNDN);
        mpfr_init(r27865);
        mpfr_init(r27866);
        mpfr_init_set_str(r27867, "1", 10, MPFR_RNDN);
        mpfr_init(r27868);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27857, a, MPFR_RNDN);
        mpfr_mul(r27858, r27857, r27857, MPFR_RNDN);
        mpfr_set_d(r27859, b, MPFR_RNDN);
        mpfr_mul(r27860, r27859, r27859, MPFR_RNDN);
        mpfr_add(r27861, r27858, r27860, MPFR_RNDN);
        ;
        mpfr_pow(r27863, r27861, r27862, MPFR_RNDN);
        ;
        mpfr_mul(r27865, r27864, r27860, MPFR_RNDN);
        mpfr_add(r27866, r27863, r27865, MPFR_RNDN);
        ;
        mpfr_sub(r27868, r27866, r27867, MPFR_RNDN);
        return mpfr_get_d(r27868, MPFR_RNDN);
}

