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

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

double f_if(float a, float b) {
        float r26908 = a;
        float r26909 = r26908 * r26908;
        float r26910 = b;
        float r26911 = r26910 * r26910;
        float r26912 = r26909 + r26911;
        float r26913 = 2;
        float r26914 = pow(r26912, r26913);
        float r26915 = 4;
        float r26916 = 1;
        float r26917 = r26916 + r26908;
        float r26918 = r26909 * r26917;
        float r26919 = 3;
        float r26920 = r26919 * r26908;
        float r26921 = r26916 - r26920;
        float r26922 = r26911 * r26921;
        float r26923 = r26918 + r26922;
        float r26924 = r26915 * r26923;
        float r26925 = r26914 + r26924;
        float r26926 = r26925 - r26916;
        return r26926;
}

double f_id(double a, double b) {
        double r26927 = a;
        double r26928 = r26927 * r26927;
        double r26929 = b;
        double r26930 = r26929 * r26929;
        double r26931 = r26928 + r26930;
        double r26932 = 2;
        double r26933 = pow(r26931, r26932);
        double r26934 = 4;
        double r26935 = 1;
        double r26936 = r26935 + r26927;
        double r26937 = r26928 * r26936;
        double r26938 = 3;
        double r26939 = r26938 * r26927;
        double r26940 = r26935 - r26939;
        double r26941 = r26930 * r26940;
        double r26942 = r26937 + r26941;
        double r26943 = r26934 * r26942;
        double r26944 = r26933 + r26943;
        double r26945 = r26944 - r26935;
        return r26945;
}


double f_of(float a, float b) {
        float r26946 = a;
        float r26947 = r26946 * r26946;
        float r26948 = b;
        float r26949 = r26948 * r26948;
        float r26950 = r26947 + r26949;
        float r26951 = 2;
        float r26952 = pow(r26950, r26951);
        float r26953 = 4;
        float r26954 = 1;
        float r26955 = r26954 + r26946;
        float r26956 = r26947 * r26955;
        float r26957 = 3;
        float r26958 = r26957 * r26946;
        float r26959 = r26954 - r26958;
        float r26960 = r26949 * r26959;
        float r26961 = r26956 + r26960;
        float r26962 = r26953 * r26961;
        float r26963 = r26952 + r26962;
        float r26964 = sqrt(r26963);
        float r26965 = r26964 * r26964;
        float r26966 = r26965 - r26954;
        return r26966;
}

double f_od(double a, double b) {
        double r26967 = a;
        double r26968 = r26967 * r26967;
        double r26969 = b;
        double r26970 = r26969 * r26969;
        double r26971 = r26968 + r26970;
        double r26972 = 2;
        double r26973 = pow(r26971, r26972);
        double r26974 = 4;
        double r26975 = 1;
        double r26976 = r26975 + r26967;
        double r26977 = r26968 * r26976;
        double r26978 = 3;
        double r26979 = r26978 * r26967;
        double r26980 = r26975 - r26979;
        double r26981 = r26970 * r26980;
        double r26982 = r26977 + r26981;
        double r26983 = r26974 * r26982;
        double r26984 = r26973 + r26983;
        double r26985 = sqrt(r26984);
        double r26986 = r26985 * r26985;
        double r26987 = r26986 - r26975;
        return r26987;
}

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 r26988, r26989, r26990, r26991, r26992, r26993, r26994, r26995, r26996, r26997, r26998, r26999, r27000, r27001, r27002, r27003, r27004, r27005, r27006;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r26988);
        mpfr_init(r26989);
        mpfr_init(r26990);
        mpfr_init(r26991);
        mpfr_init(r26992);
        mpfr_init_set_str(r26993, "2", 10, MPFR_RNDN);
        mpfr_init(r26994);
        mpfr_init_set_str(r26995, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r26996, "1", 10, MPFR_RNDN);
        mpfr_init(r26997);
        mpfr_init(r26998);
        mpfr_init_set_str(r26999, "3", 10, MPFR_RNDN);
        mpfr_init(r27000);
        mpfr_init(r27001);
        mpfr_init(r27002);
        mpfr_init(r27003);
        mpfr_init(r27004);
        mpfr_init(r27005);
        mpfr_init(r27006);
}

double f_im(double a, double b) {
        mpfr_set_d(r26988, a, MPFR_RNDN);
        mpfr_mul(r26989, r26988, r26988, MPFR_RNDN);
        mpfr_set_d(r26990, b, MPFR_RNDN);
        mpfr_mul(r26991, r26990, r26990, MPFR_RNDN);
        mpfr_add(r26992, r26989, r26991, MPFR_RNDN);
        ;
        mpfr_pow(r26994, r26992, r26993, MPFR_RNDN);
        ;
        ;
        mpfr_add(r26997, r26996, r26988, MPFR_RNDN);
        mpfr_mul(r26998, r26989, r26997, MPFR_RNDN);
        ;
        mpfr_mul(r27000, r26999, r26988, MPFR_RNDN);
        mpfr_sub(r27001, r26996, r27000, MPFR_RNDN);
        mpfr_mul(r27002, r26991, r27001, MPFR_RNDN);
        mpfr_add(r27003, r26998, r27002, MPFR_RNDN);
        mpfr_mul(r27004, r26995, r27003, MPFR_RNDN);
        mpfr_add(r27005, r26994, r27004, MPFR_RNDN);
        mpfr_sub(r27006, r27005, r26996, MPFR_RNDN);
        return mpfr_get_d(r27006, MPFR_RNDN);
}

static mpfr_t r27007, r27008, r27009, r27010, r27011, r27012, r27013, r27014, r27015, r27016, r27017, r27018, r27019, r27020, r27021, r27022, r27023, r27024, r27025, r27026, r27027;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27007);
        mpfr_init(r27008);
        mpfr_init(r27009);
        mpfr_init(r27010);
        mpfr_init(r27011);
        mpfr_init_set_str(r27012, "2", 10, MPFR_RNDN);
        mpfr_init(r27013);
        mpfr_init_set_str(r27014, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r27015, "1", 10, MPFR_RNDN);
        mpfr_init(r27016);
        mpfr_init(r27017);
        mpfr_init_set_str(r27018, "3", 10, MPFR_RNDN);
        mpfr_init(r27019);
        mpfr_init(r27020);
        mpfr_init(r27021);
        mpfr_init(r27022);
        mpfr_init(r27023);
        mpfr_init(r27024);
        mpfr_init(r27025);
        mpfr_init(r27026);
        mpfr_init(r27027);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27007, a, MPFR_RNDN);
        mpfr_mul(r27008, r27007, r27007, MPFR_RNDN);
        mpfr_set_d(r27009, b, MPFR_RNDN);
        mpfr_mul(r27010, r27009, r27009, MPFR_RNDN);
        mpfr_add(r27011, r27008, r27010, MPFR_RNDN);
        ;
        mpfr_pow(r27013, r27011, r27012, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27016, r27015, r27007, MPFR_RNDN);
        mpfr_mul(r27017, r27008, r27016, MPFR_RNDN);
        ;
        mpfr_mul(r27019, r27018, r27007, MPFR_RNDN);
        mpfr_sub(r27020, r27015, r27019, MPFR_RNDN);
        mpfr_mul(r27021, r27010, r27020, MPFR_RNDN);
        mpfr_add(r27022, r27017, r27021, MPFR_RNDN);
        mpfr_mul(r27023, r27014, r27022, MPFR_RNDN);
        mpfr_add(r27024, r27013, r27023, MPFR_RNDN);
        mpfr_sqrt(r27025, r27024, MPFR_RNDN);
        mpfr_mul(r27026, r27025, r27025, MPFR_RNDN);
        mpfr_sub(r27027, r27026, r27015, MPFR_RNDN);
        return mpfr_get_d(r27027, MPFR_RNDN);
}

static mpfr_t r27028, r27029, r27030, r27031, r27032, r27033, r27034, r27035, r27036, r27037, r27038, r27039, r27040, r27041, r27042, r27043, r27044, r27045, r27046, r27047, r27048;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27028);
        mpfr_init(r27029);
        mpfr_init(r27030);
        mpfr_init(r27031);
        mpfr_init(r27032);
        mpfr_init_set_str(r27033, "2", 10, MPFR_RNDN);
        mpfr_init(r27034);
        mpfr_init_set_str(r27035, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r27036, "1", 10, MPFR_RNDN);
        mpfr_init(r27037);
        mpfr_init(r27038);
        mpfr_init_set_str(r27039, "3", 10, MPFR_RNDN);
        mpfr_init(r27040);
        mpfr_init(r27041);
        mpfr_init(r27042);
        mpfr_init(r27043);
        mpfr_init(r27044);
        mpfr_init(r27045);
        mpfr_init(r27046);
        mpfr_init(r27047);
        mpfr_init(r27048);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27028, a, MPFR_RNDN);
        mpfr_mul(r27029, r27028, r27028, MPFR_RNDN);
        mpfr_set_d(r27030, b, MPFR_RNDN);
        mpfr_mul(r27031, r27030, r27030, MPFR_RNDN);
        mpfr_add(r27032, r27029, r27031, MPFR_RNDN);
        ;
        mpfr_pow(r27034, r27032, r27033, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27037, r27036, r27028, MPFR_RNDN);
        mpfr_mul(r27038, r27029, r27037, MPFR_RNDN);
        ;
        mpfr_mul(r27040, r27039, r27028, MPFR_RNDN);
        mpfr_sub(r27041, r27036, r27040, MPFR_RNDN);
        mpfr_mul(r27042, r27031, r27041, MPFR_RNDN);
        mpfr_add(r27043, r27038, r27042, MPFR_RNDN);
        mpfr_mul(r27044, r27035, r27043, MPFR_RNDN);
        mpfr_add(r27045, r27034, r27044, MPFR_RNDN);
        mpfr_sqrt(r27046, r27045, MPFR_RNDN);
        mpfr_mul(r27047, r27046, r27046, MPFR_RNDN);
        mpfr_sub(r27048, r27047, r27036, MPFR_RNDN);
        return mpfr_get_d(r27048, MPFR_RNDN);
}

