#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 r27944 = a;
        float r27945 = r27944 * r27944;
        float r27946 = b;
        float r27947 = r27946 * r27946;
        float r27948 = r27945 + r27947;
        float r27949 = 2;
        float r27950 = pow(r27948, r27949);
        float r27951 = 4;
        float r27952 = r27951 * r27947;
        float r27953 = r27950 + r27952;
        float r27954 = 1;
        float r27955 = r27953 - r27954;
        return r27955;
}

double f_id(double a, double b) {
        double r27956 = a;
        double r27957 = r27956 * r27956;
        double r27958 = b;
        double r27959 = r27958 * r27958;
        double r27960 = r27957 + r27959;
        double r27961 = 2;
        double r27962 = pow(r27960, r27961);
        double r27963 = 4;
        double r27964 = r27963 * r27959;
        double r27965 = r27962 + r27964;
        double r27966 = 1;
        double r27967 = r27965 - r27966;
        return r27967;
}


double f_of(float a, float b) {
        float r27968 = a;
        float r27969 = r27968 * r27968;
        float r27970 = b;
        float r27971 = r27970 * r27970;
        float r27972 = r27969 + r27971;
        float r27973 = 2;
        float r27974 = pow(r27972, r27973);
        float r27975 = 4;
        float r27976 = r27975 * r27971;
        float r27977 = r27974 + r27976;
        float r27978 = cbrt(r27977);
        float r27979 = r27978 * r27978;
        float r27980 = r27979 * r27978;
        float r27981 = 1;
        float r27982 = r27980 - r27981;
        return r27982;
}

double f_od(double a, double b) {
        double r27983 = a;
        double r27984 = r27983 * r27983;
        double r27985 = b;
        double r27986 = r27985 * r27985;
        double r27987 = r27984 + r27986;
        double r27988 = 2;
        double r27989 = pow(r27987, r27988);
        double r27990 = 4;
        double r27991 = r27990 * r27986;
        double r27992 = r27989 + r27991;
        double r27993 = cbrt(r27992);
        double r27994 = r27993 * r27993;
        double r27995 = r27994 * r27993;
        double r27996 = 1;
        double r27997 = r27995 - r27996;
        return r27997;
}

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 r27998, r27999, r28000, r28001, r28002, r28003, r28004, r28005, r28006, r28007, r28008, r28009;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27998);
        mpfr_init(r27999);
        mpfr_init(r28000);
        mpfr_init(r28001);
        mpfr_init(r28002);
        mpfr_init_set_str(r28003, "2", 10, MPFR_RNDN);
        mpfr_init(r28004);
        mpfr_init_set_str(r28005, "4", 10, MPFR_RNDN);
        mpfr_init(r28006);
        mpfr_init(r28007);
        mpfr_init_set_str(r28008, "1", 10, MPFR_RNDN);
        mpfr_init(r28009);
}

double f_im(double a, double b) {
        mpfr_set_d(r27998, a, MPFR_RNDN);
        mpfr_mul(r27999, r27998, r27998, MPFR_RNDN);
        mpfr_set_d(r28000, b, MPFR_RNDN);
        mpfr_mul(r28001, r28000, r28000, MPFR_RNDN);
        mpfr_add(r28002, r27999, r28001, MPFR_RNDN);
        ;
        mpfr_pow(r28004, r28002, r28003, MPFR_RNDN);
        ;
        mpfr_mul(r28006, r28005, r28001, MPFR_RNDN);
        mpfr_add(r28007, r28004, r28006, MPFR_RNDN);
        ;
        mpfr_sub(r28009, r28007, r28008, MPFR_RNDN);
        return mpfr_get_d(r28009, MPFR_RNDN);
}

static mpfr_t r28010, r28011, r28012, r28013, r28014, r28015, r28016, r28017, r28018, r28019, r28020, r28021, r28022, r28023, r28024;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r28010);
        mpfr_init(r28011);
        mpfr_init(r28012);
        mpfr_init(r28013);
        mpfr_init(r28014);
        mpfr_init_set_str(r28015, "2", 10, MPFR_RNDN);
        mpfr_init(r28016);
        mpfr_init_set_str(r28017, "4", 10, MPFR_RNDN);
        mpfr_init(r28018);
        mpfr_init(r28019);
        mpfr_init(r28020);
        mpfr_init(r28021);
        mpfr_init(r28022);
        mpfr_init_set_str(r28023, "1", 10, MPFR_RNDN);
        mpfr_init(r28024);
}

double f_fm(double a, double b) {
        mpfr_set_d(r28010, a, MPFR_RNDN);
        mpfr_mul(r28011, r28010, r28010, MPFR_RNDN);
        mpfr_set_d(r28012, b, MPFR_RNDN);
        mpfr_mul(r28013, r28012, r28012, MPFR_RNDN);
        mpfr_add(r28014, r28011, r28013, MPFR_RNDN);
        ;
        mpfr_pow(r28016, r28014, r28015, MPFR_RNDN);
        ;
        mpfr_mul(r28018, r28017, r28013, MPFR_RNDN);
        mpfr_add(r28019, r28016, r28018, MPFR_RNDN);
        mpfr_cbrt(r28020, r28019, MPFR_RNDN);
        mpfr_mul(r28021, r28020, r28020, MPFR_RNDN);
        mpfr_mul(r28022, r28021, r28020, MPFR_RNDN);
        ;
        mpfr_sub(r28024, r28022, r28023, MPFR_RNDN);
        return mpfr_get_d(r28024, MPFR_RNDN);
}

static mpfr_t r28025, r28026, r28027, r28028, r28029, r28030, r28031, r28032, r28033, r28034, r28035, r28036, r28037, r28038, r28039;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r28025);
        mpfr_init(r28026);
        mpfr_init(r28027);
        mpfr_init(r28028);
        mpfr_init(r28029);
        mpfr_init_set_str(r28030, "2", 10, MPFR_RNDN);
        mpfr_init(r28031);
        mpfr_init_set_str(r28032, "4", 10, MPFR_RNDN);
        mpfr_init(r28033);
        mpfr_init(r28034);
        mpfr_init(r28035);
        mpfr_init(r28036);
        mpfr_init(r28037);
        mpfr_init_set_str(r28038, "1", 10, MPFR_RNDN);
        mpfr_init(r28039);
}

double f_dm(double a, double b) {
        mpfr_set_d(r28025, a, MPFR_RNDN);
        mpfr_mul(r28026, r28025, r28025, MPFR_RNDN);
        mpfr_set_d(r28027, b, MPFR_RNDN);
        mpfr_mul(r28028, r28027, r28027, MPFR_RNDN);
        mpfr_add(r28029, r28026, r28028, MPFR_RNDN);
        ;
        mpfr_pow(r28031, r28029, r28030, MPFR_RNDN);
        ;
        mpfr_mul(r28033, r28032, r28028, MPFR_RNDN);
        mpfr_add(r28034, r28031, r28033, MPFR_RNDN);
        mpfr_cbrt(r28035, r28034, MPFR_RNDN);
        mpfr_mul(r28036, r28035, r28035, MPFR_RNDN);
        mpfr_mul(r28037, r28036, r28035, MPFR_RNDN);
        ;
        mpfr_sub(r28039, r28037, r28038, MPFR_RNDN);
        return mpfr_get_d(r28039, MPFR_RNDN);
}

