#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 r11869 = a;
        float r11870 = r11869 * r11869;
        float r11871 = b;
        float r11872 = r11871 * r11871;
        float r11873 = r11870 + r11872;
        float r11874 = 2;
        float r11875 = pow(r11873, r11874);
        float r11876 = 4;
        float r11877 = 1;
        float r11878 = r11877 + r11869;
        float r11879 = r11870 * r11878;
        float r11880 = 3;
        float r11881 = r11880 * r11869;
        float r11882 = r11877 - r11881;
        float r11883 = r11872 * r11882;
        float r11884 = r11879 + r11883;
        float r11885 = r11876 * r11884;
        float r11886 = r11875 + r11885;
        float r11887 = r11886 - r11877;
        return r11887;
}

double f_id(double a, double b) {
        double r11888 = a;
        double r11889 = r11888 * r11888;
        double r11890 = b;
        double r11891 = r11890 * r11890;
        double r11892 = r11889 + r11891;
        double r11893 = 2;
        double r11894 = pow(r11892, r11893);
        double r11895 = 4;
        double r11896 = 1;
        double r11897 = r11896 + r11888;
        double r11898 = r11889 * r11897;
        double r11899 = 3;
        double r11900 = r11899 * r11888;
        double r11901 = r11896 - r11900;
        double r11902 = r11891 * r11901;
        double r11903 = r11898 + r11902;
        double r11904 = r11895 * r11903;
        double r11905 = r11894 + r11904;
        double r11906 = r11905 - r11896;
        return r11906;
}


double f_of(float a, float b) {
        float r11907 = a;
        float r11908 = r11907 * r11907;
        float r11909 = b;
        float r11910 = r11909 * r11909;
        float r11911 = r11908 + r11910;
        float r11912 = 2;
        float r11913 = pow(r11911, r11912);
        float r11914 = 4;
        float r11915 = 1;
        float r11916 = r11915 + r11907;
        float r11917 = r11908 * r11916;
        float r11918 = 3;
        float r11919 = r11918 * r11907;
        float r11920 = r11915 - r11919;
        float r11921 = r11910 * r11920;
        float r11922 = r11917 + r11921;
        float r11923 = r11914 * r11922;
        float r11924 = r11913 + r11923;
        float r11925 = sqrt(r11924);
        float r11926 = r11910 * r11914;
        float r11927 = r11926 * r11920;
        float r11928 = r11914 * r11907;
        float r11929 = r11907 + r11908;
        float r11930 = r11928 * r11929;
        float r11931 = r11927 + r11930;
        float r11932 = pow(r11907, r11914);
        float r11933 = pow(r11909, r11914);
        float r11934 = pow(r11907, r11912);
        float r11935 = pow(r11909, r11912);
        float r11936 = r11934 * r11935;
        float r11937 = r11912 * r11936;
        float r11938 = r11933 + r11937;
        float r11939 = r11932 + r11938;
        float r11940 = r11931 + r11939;
        float r11941 = cbrt(r11940);
        float r11942 = fabs(r11941);
        float r11943 = cbrt(r11924);
        float r11944 = sqrt(r11943);
        float r11945 = r11942 * r11944;
        float r11946 = r11925 * r11945;
        float r11947 = r11946 - r11915;
        return r11947;
}

double f_od(double a, double b) {
        double r11948 = a;
        double r11949 = r11948 * r11948;
        double r11950 = b;
        double r11951 = r11950 * r11950;
        double r11952 = r11949 + r11951;
        double r11953 = 2;
        double r11954 = pow(r11952, r11953);
        double r11955 = 4;
        double r11956 = 1;
        double r11957 = r11956 + r11948;
        double r11958 = r11949 * r11957;
        double r11959 = 3;
        double r11960 = r11959 * r11948;
        double r11961 = r11956 - r11960;
        double r11962 = r11951 * r11961;
        double r11963 = r11958 + r11962;
        double r11964 = r11955 * r11963;
        double r11965 = r11954 + r11964;
        double r11966 = sqrt(r11965);
        double r11967 = r11951 * r11955;
        double r11968 = r11967 * r11961;
        double r11969 = r11955 * r11948;
        double r11970 = r11948 + r11949;
        double r11971 = r11969 * r11970;
        double r11972 = r11968 + r11971;
        double r11973 = pow(r11948, r11955);
        double r11974 = pow(r11950, r11955);
        double r11975 = pow(r11948, r11953);
        double r11976 = pow(r11950, r11953);
        double r11977 = r11975 * r11976;
        double r11978 = r11953 * r11977;
        double r11979 = r11974 + r11978;
        double r11980 = r11973 + r11979;
        double r11981 = r11972 + r11980;
        double r11982 = cbrt(r11981);
        double r11983 = fabs(r11982);
        double r11984 = cbrt(r11965);
        double r11985 = sqrt(r11984);
        double r11986 = r11983 * r11985;
        double r11987 = r11966 * r11986;
        double r11988 = r11987 - r11956;
        return r11988;
}

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 r11989, r11990, r11991, r11992, r11993, r11994, r11995, r11996, r11997, r11998, r11999, r12000, r12001, r12002, r12003, r12004, r12005, r12006, r12007;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r11989);
        mpfr_init(r11990);
        mpfr_init(r11991);
        mpfr_init(r11992);
        mpfr_init(r11993);
        mpfr_init_set_str(r11994, "2", 10, MPFR_RNDN);
        mpfr_init(r11995);
        mpfr_init_set_str(r11996, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r11997, "1", 10, MPFR_RNDN);
        mpfr_init(r11998);
        mpfr_init(r11999);
        mpfr_init_set_str(r12000, "3", 10, MPFR_RNDN);
        mpfr_init(r12001);
        mpfr_init(r12002);
        mpfr_init(r12003);
        mpfr_init(r12004);
        mpfr_init(r12005);
        mpfr_init(r12006);
        mpfr_init(r12007);
}

double f_im(double a, double b) {
        mpfr_set_d(r11989, a, MPFR_RNDN);
        mpfr_mul(r11990, r11989, r11989, MPFR_RNDN);
        mpfr_set_d(r11991, b, MPFR_RNDN);
        mpfr_mul(r11992, r11991, r11991, MPFR_RNDN);
        mpfr_add(r11993, r11990, r11992, MPFR_RNDN);
        ;
        mpfr_pow(r11995, r11993, r11994, MPFR_RNDN);
        ;
        ;
        mpfr_add(r11998, r11997, r11989, MPFR_RNDN);
        mpfr_mul(r11999, r11990, r11998, MPFR_RNDN);
        ;
        mpfr_mul(r12001, r12000, r11989, MPFR_RNDN);
        mpfr_sub(r12002, r11997, r12001, MPFR_RNDN);
        mpfr_mul(r12003, r11992, r12002, MPFR_RNDN);
        mpfr_add(r12004, r11999, r12003, MPFR_RNDN);
        mpfr_mul(r12005, r11996, r12004, MPFR_RNDN);
        mpfr_add(r12006, r11995, r12005, MPFR_RNDN);
        mpfr_sub(r12007, r12006, r11997, MPFR_RNDN);
        return mpfr_get_d(r12007, MPFR_RNDN);
}

static mpfr_t r12008, r12009, r12010, r12011, r12012, r12013, r12014, r12015, r12016, r12017, r12018, r12019, r12020, r12021, r12022, r12023, r12024, r12025, r12026, r12027, r12028, r12029, r12030, r12031, r12032, r12033, r12034, r12035, r12036, r12037, r12038, r12039, r12040, r12041, r12042, r12043, r12044, r12045, r12046, r12047, r12048;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12008);
        mpfr_init(r12009);
        mpfr_init(r12010);
        mpfr_init(r12011);
        mpfr_init(r12012);
        mpfr_init_set_str(r12013, "2", 10, MPFR_RNDN);
        mpfr_init(r12014);
        mpfr_init_set_str(r12015, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r12016, "1", 10, MPFR_RNDN);
        mpfr_init(r12017);
        mpfr_init(r12018);
        mpfr_init_set_str(r12019, "3", 10, MPFR_RNDN);
        mpfr_init(r12020);
        mpfr_init(r12021);
        mpfr_init(r12022);
        mpfr_init(r12023);
        mpfr_init(r12024);
        mpfr_init(r12025);
        mpfr_init(r12026);
        mpfr_init(r12027);
        mpfr_init(r12028);
        mpfr_init(r12029);
        mpfr_init(r12030);
        mpfr_init(r12031);
        mpfr_init(r12032);
        mpfr_init(r12033);
        mpfr_init(r12034);
        mpfr_init(r12035);
        mpfr_init(r12036);
        mpfr_init(r12037);
        mpfr_init(r12038);
        mpfr_init(r12039);
        mpfr_init(r12040);
        mpfr_init(r12041);
        mpfr_init(r12042);
        mpfr_init(r12043);
        mpfr_init(r12044);
        mpfr_init(r12045);
        mpfr_init(r12046);
        mpfr_init(r12047);
        mpfr_init(r12048);
}

double f_fm(double a, double b) {
        mpfr_set_d(r12008, a, MPFR_RNDN);
        mpfr_mul(r12009, r12008, r12008, MPFR_RNDN);
        mpfr_set_d(r12010, b, MPFR_RNDN);
        mpfr_mul(r12011, r12010, r12010, MPFR_RNDN);
        mpfr_add(r12012, r12009, r12011, MPFR_RNDN);
        ;
        mpfr_pow(r12014, r12012, r12013, MPFR_RNDN);
        ;
        ;
        mpfr_add(r12017, r12016, r12008, MPFR_RNDN);
        mpfr_mul(r12018, r12009, r12017, MPFR_RNDN);
        ;
        mpfr_mul(r12020, r12019, r12008, MPFR_RNDN);
        mpfr_sub(r12021, r12016, r12020, MPFR_RNDN);
        mpfr_mul(r12022, r12011, r12021, MPFR_RNDN);
        mpfr_add(r12023, r12018, r12022, MPFR_RNDN);
        mpfr_mul(r12024, r12015, r12023, MPFR_RNDN);
        mpfr_add(r12025, r12014, r12024, MPFR_RNDN);
        mpfr_sqrt(r12026, r12025, MPFR_RNDN);
        mpfr_mul(r12027, r12011, r12015, MPFR_RNDN);
        mpfr_mul(r12028, r12027, r12021, MPFR_RNDN);
        mpfr_mul(r12029, r12015, r12008, MPFR_RNDN);
        mpfr_add(r12030, r12008, r12009, MPFR_RNDN);
        mpfr_mul(r12031, r12029, r12030, MPFR_RNDN);
        mpfr_add(r12032, r12028, r12031, MPFR_RNDN);
        mpfr_pow(r12033, r12008, r12015, MPFR_RNDN);
        mpfr_pow(r12034, r12010, r12015, MPFR_RNDN);
        mpfr_pow(r12035, r12008, r12013, MPFR_RNDN);
        mpfr_pow(r12036, r12010, r12013, MPFR_RNDN);
        mpfr_mul(r12037, r12035, r12036, MPFR_RNDN);
        mpfr_mul(r12038, r12013, r12037, MPFR_RNDN);
        mpfr_add(r12039, r12034, r12038, MPFR_RNDN);
        mpfr_add(r12040, r12033, r12039, MPFR_RNDN);
        mpfr_add(r12041, r12032, r12040, MPFR_RNDN);
        mpfr_cbrt(r12042, r12041, MPFR_RNDN);
        mpfr_abs(r12043, r12042, MPFR_RNDN);
        mpfr_cbrt(r12044, r12025, MPFR_RNDN);
        mpfr_sqrt(r12045, r12044, MPFR_RNDN);
        mpfr_mul(r12046, r12043, r12045, MPFR_RNDN);
        mpfr_mul(r12047, r12026, r12046, MPFR_RNDN);
        mpfr_sub(r12048, r12047, r12016, MPFR_RNDN);
        return mpfr_get_d(r12048, MPFR_RNDN);
}

static mpfr_t r12049, r12050, r12051, r12052, r12053, r12054, r12055, r12056, r12057, r12058, r12059, r12060, r12061, r12062, r12063, r12064, r12065, r12066, r12067, r12068, r12069, r12070, r12071, r12072, r12073, r12074, r12075, r12076, r12077, r12078, r12079, r12080, r12081, r12082, r12083, r12084, r12085, r12086, r12087, r12088, r12089;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r12049);
        mpfr_init(r12050);
        mpfr_init(r12051);
        mpfr_init(r12052);
        mpfr_init(r12053);
        mpfr_init_set_str(r12054, "2", 10, MPFR_RNDN);
        mpfr_init(r12055);
        mpfr_init_set_str(r12056, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r12057, "1", 10, MPFR_RNDN);
        mpfr_init(r12058);
        mpfr_init(r12059);
        mpfr_init_set_str(r12060, "3", 10, MPFR_RNDN);
        mpfr_init(r12061);
        mpfr_init(r12062);
        mpfr_init(r12063);
        mpfr_init(r12064);
        mpfr_init(r12065);
        mpfr_init(r12066);
        mpfr_init(r12067);
        mpfr_init(r12068);
        mpfr_init(r12069);
        mpfr_init(r12070);
        mpfr_init(r12071);
        mpfr_init(r12072);
        mpfr_init(r12073);
        mpfr_init(r12074);
        mpfr_init(r12075);
        mpfr_init(r12076);
        mpfr_init(r12077);
        mpfr_init(r12078);
        mpfr_init(r12079);
        mpfr_init(r12080);
        mpfr_init(r12081);
        mpfr_init(r12082);
        mpfr_init(r12083);
        mpfr_init(r12084);
        mpfr_init(r12085);
        mpfr_init(r12086);
        mpfr_init(r12087);
        mpfr_init(r12088);
        mpfr_init(r12089);
}

double f_dm(double a, double b) {
        mpfr_set_d(r12049, a, MPFR_RNDN);
        mpfr_mul(r12050, r12049, r12049, MPFR_RNDN);
        mpfr_set_d(r12051, b, MPFR_RNDN);
        mpfr_mul(r12052, r12051, r12051, MPFR_RNDN);
        mpfr_add(r12053, r12050, r12052, MPFR_RNDN);
        ;
        mpfr_pow(r12055, r12053, r12054, MPFR_RNDN);
        ;
        ;
        mpfr_add(r12058, r12057, r12049, MPFR_RNDN);
        mpfr_mul(r12059, r12050, r12058, MPFR_RNDN);
        ;
        mpfr_mul(r12061, r12060, r12049, MPFR_RNDN);
        mpfr_sub(r12062, r12057, r12061, MPFR_RNDN);
        mpfr_mul(r12063, r12052, r12062, MPFR_RNDN);
        mpfr_add(r12064, r12059, r12063, MPFR_RNDN);
        mpfr_mul(r12065, r12056, r12064, MPFR_RNDN);
        mpfr_add(r12066, r12055, r12065, MPFR_RNDN);
        mpfr_sqrt(r12067, r12066, MPFR_RNDN);
        mpfr_mul(r12068, r12052, r12056, MPFR_RNDN);
        mpfr_mul(r12069, r12068, r12062, MPFR_RNDN);
        mpfr_mul(r12070, r12056, r12049, MPFR_RNDN);
        mpfr_add(r12071, r12049, r12050, MPFR_RNDN);
        mpfr_mul(r12072, r12070, r12071, MPFR_RNDN);
        mpfr_add(r12073, r12069, r12072, MPFR_RNDN);
        mpfr_pow(r12074, r12049, r12056, MPFR_RNDN);
        mpfr_pow(r12075, r12051, r12056, MPFR_RNDN);
        mpfr_pow(r12076, r12049, r12054, MPFR_RNDN);
        mpfr_pow(r12077, r12051, r12054, MPFR_RNDN);
        mpfr_mul(r12078, r12076, r12077, MPFR_RNDN);
        mpfr_mul(r12079, r12054, r12078, MPFR_RNDN);
        mpfr_add(r12080, r12075, r12079, MPFR_RNDN);
        mpfr_add(r12081, r12074, r12080, MPFR_RNDN);
        mpfr_add(r12082, r12073, r12081, MPFR_RNDN);
        mpfr_cbrt(r12083, r12082, MPFR_RNDN);
        mpfr_abs(r12084, r12083, MPFR_RNDN);
        mpfr_cbrt(r12085, r12066, MPFR_RNDN);
        mpfr_sqrt(r12086, r12085, MPFR_RNDN);
        mpfr_mul(r12087, r12084, r12086, MPFR_RNDN);
        mpfr_mul(r12088, r12067, r12087, MPFR_RNDN);
        mpfr_sub(r12089, r12088, r12057, MPFR_RNDN);
        return mpfr_get_d(r12089, MPFR_RNDN);
}

