#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 r27949 = a;
        float r27950 = r27949 * r27949;
        float r27951 = b;
        float r27952 = r27951 * r27951;
        float r27953 = r27950 + r27952;
        float r27954 = 2;
        float r27955 = pow(r27953, r27954);
        float r27956 = 4;
        float r27957 = 1;
        float r27958 = r27957 + r27949;
        float r27959 = r27950 * r27958;
        float r27960 = 3;
        float r27961 = r27960 * r27949;
        float r27962 = r27957 - r27961;
        float r27963 = r27952 * r27962;
        float r27964 = r27959 + r27963;
        float r27965 = r27956 * r27964;
        float r27966 = r27955 + r27965;
        float r27967 = r27966 - r27957;
        return r27967;
}

double f_id(double a, double b) {
        double r27968 = a;
        double r27969 = r27968 * r27968;
        double r27970 = b;
        double r27971 = r27970 * r27970;
        double r27972 = r27969 + r27971;
        double r27973 = 2;
        double r27974 = pow(r27972, r27973);
        double r27975 = 4;
        double r27976 = 1;
        double r27977 = r27976 + r27968;
        double r27978 = r27969 * r27977;
        double r27979 = 3;
        double r27980 = r27979 * r27968;
        double r27981 = r27976 - r27980;
        double r27982 = r27971 * r27981;
        double r27983 = r27978 + r27982;
        double r27984 = r27975 * r27983;
        double r27985 = r27974 + r27984;
        double r27986 = r27985 - r27976;
        return r27986;
}


double f_of(float a, float b) {
        float r27987 = a;
        float r27988 = r27987 * r27987;
        float r27989 = b;
        float r27990 = r27989 * r27989;
        float r27991 = r27988 + r27990;
        float r27992 = 2;
        float r27993 = pow(r27991, r27992);
        float r27994 = 4;
        float r27995 = 1;
        float r27996 = r27995 + r27987;
        float r27997 = r27988 * r27996;
        float r27998 = 3;
        float r27999 = r27998 * r27987;
        float r28000 = r27995 - r27999;
        float r28001 = r27990 * r28000;
        float r28002 = r27997 + r28001;
        float r28003 = r27994 * r28002;
        float r28004 = r27993 + r28003;
        float r28005 = sqrt(r28004);
        float r28006 = r28005 * r28005;
        float r28007 = r28006 - r27995;
        return r28007;
}

double f_od(double a, double b) {
        double r28008 = a;
        double r28009 = r28008 * r28008;
        double r28010 = b;
        double r28011 = r28010 * r28010;
        double r28012 = r28009 + r28011;
        double r28013 = 2;
        double r28014 = pow(r28012, r28013);
        double r28015 = 4;
        double r28016 = 1;
        double r28017 = r28016 + r28008;
        double r28018 = r28009 * r28017;
        double r28019 = 3;
        double r28020 = r28019 * r28008;
        double r28021 = r28016 - r28020;
        double r28022 = r28011 * r28021;
        double r28023 = r28018 + r28022;
        double r28024 = r28015 * r28023;
        double r28025 = r28014 + r28024;
        double r28026 = sqrt(r28025);
        double r28027 = r28026 * r28026;
        double r28028 = r28027 - r28016;
        return r28028;
}

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 r28029, r28030, r28031, r28032, r28033, r28034, r28035, r28036, r28037, r28038, r28039, r28040, r28041, r28042, r28043, r28044, r28045, r28046, r28047;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r28029);
        mpfr_init(r28030);
        mpfr_init(r28031);
        mpfr_init(r28032);
        mpfr_init(r28033);
        mpfr_init_set_str(r28034, "2", 10, MPFR_RNDN);
        mpfr_init(r28035);
        mpfr_init_set_str(r28036, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r28037, "1", 10, MPFR_RNDN);
        mpfr_init(r28038);
        mpfr_init(r28039);
        mpfr_init_set_str(r28040, "3", 10, MPFR_RNDN);
        mpfr_init(r28041);
        mpfr_init(r28042);
        mpfr_init(r28043);
        mpfr_init(r28044);
        mpfr_init(r28045);
        mpfr_init(r28046);
        mpfr_init(r28047);
}

double f_im(double a, double b) {
        mpfr_set_d(r28029, a, MPFR_RNDN);
        mpfr_mul(r28030, r28029, r28029, MPFR_RNDN);
        mpfr_set_d(r28031, b, MPFR_RNDN);
        mpfr_mul(r28032, r28031, r28031, MPFR_RNDN);
        mpfr_add(r28033, r28030, r28032, MPFR_RNDN);
        ;
        mpfr_pow(r28035, r28033, r28034, MPFR_RNDN);
        ;
        ;
        mpfr_add(r28038, r28037, r28029, MPFR_RNDN);
        mpfr_mul(r28039, r28030, r28038, MPFR_RNDN);
        ;
        mpfr_mul(r28041, r28040, r28029, MPFR_RNDN);
        mpfr_sub(r28042, r28037, r28041, MPFR_RNDN);
        mpfr_mul(r28043, r28032, r28042, MPFR_RNDN);
        mpfr_add(r28044, r28039, r28043, MPFR_RNDN);
        mpfr_mul(r28045, r28036, r28044, MPFR_RNDN);
        mpfr_add(r28046, r28035, r28045, MPFR_RNDN);
        mpfr_sub(r28047, r28046, r28037, MPFR_RNDN);
        return mpfr_get_d(r28047, MPFR_RNDN);
}

static mpfr_t r28048, r28049, r28050, r28051, r28052, r28053, r28054, r28055, r28056, r28057, r28058, r28059, r28060, r28061, r28062, r28063, r28064, r28065, r28066, r28067, r28068;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28048);
        mpfr_init(r28049);
        mpfr_init(r28050);
        mpfr_init(r28051);
        mpfr_init(r28052);
        mpfr_init_set_str(r28053, "2", 10, MPFR_RNDN);
        mpfr_init(r28054);
        mpfr_init_set_str(r28055, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r28056, "1", 10, MPFR_RNDN);
        mpfr_init(r28057);
        mpfr_init(r28058);
        mpfr_init_set_str(r28059, "3", 10, MPFR_RNDN);
        mpfr_init(r28060);
        mpfr_init(r28061);
        mpfr_init(r28062);
        mpfr_init(r28063);
        mpfr_init(r28064);
        mpfr_init(r28065);
        mpfr_init(r28066);
        mpfr_init(r28067);
        mpfr_init(r28068);
}

double f_fm(double a, double b) {
        mpfr_set_d(r28048, a, MPFR_RNDN);
        mpfr_mul(r28049, r28048, r28048, MPFR_RNDN);
        mpfr_set_d(r28050, b, MPFR_RNDN);
        mpfr_mul(r28051, r28050, r28050, MPFR_RNDN);
        mpfr_add(r28052, r28049, r28051, MPFR_RNDN);
        ;
        mpfr_pow(r28054, r28052, r28053, MPFR_RNDN);
        ;
        ;
        mpfr_add(r28057, r28056, r28048, MPFR_RNDN);
        mpfr_mul(r28058, r28049, r28057, MPFR_RNDN);
        ;
        mpfr_mul(r28060, r28059, r28048, MPFR_RNDN);
        mpfr_sub(r28061, r28056, r28060, MPFR_RNDN);
        mpfr_mul(r28062, r28051, r28061, MPFR_RNDN);
        mpfr_add(r28063, r28058, r28062, MPFR_RNDN);
        mpfr_mul(r28064, r28055, r28063, MPFR_RNDN);
        mpfr_add(r28065, r28054, r28064, MPFR_RNDN);
        mpfr_sqrt(r28066, r28065, MPFR_RNDN);
        mpfr_mul(r28067, r28066, r28066, MPFR_RNDN);
        mpfr_sub(r28068, r28067, r28056, MPFR_RNDN);
        return mpfr_get_d(r28068, MPFR_RNDN);
}

static mpfr_t r28069, r28070, r28071, r28072, r28073, r28074, r28075, r28076, r28077, r28078, r28079, r28080, r28081, r28082, r28083, r28084, r28085, r28086, r28087, r28088, r28089;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28069);
        mpfr_init(r28070);
        mpfr_init(r28071);
        mpfr_init(r28072);
        mpfr_init(r28073);
        mpfr_init_set_str(r28074, "2", 10, MPFR_RNDN);
        mpfr_init(r28075);
        mpfr_init_set_str(r28076, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r28077, "1", 10, MPFR_RNDN);
        mpfr_init(r28078);
        mpfr_init(r28079);
        mpfr_init_set_str(r28080, "3", 10, MPFR_RNDN);
        mpfr_init(r28081);
        mpfr_init(r28082);
        mpfr_init(r28083);
        mpfr_init(r28084);
        mpfr_init(r28085);
        mpfr_init(r28086);
        mpfr_init(r28087);
        mpfr_init(r28088);
        mpfr_init(r28089);
}

double f_dm(double a, double b) {
        mpfr_set_d(r28069, a, MPFR_RNDN);
        mpfr_mul(r28070, r28069, r28069, MPFR_RNDN);
        mpfr_set_d(r28071, b, MPFR_RNDN);
        mpfr_mul(r28072, r28071, r28071, MPFR_RNDN);
        mpfr_add(r28073, r28070, r28072, MPFR_RNDN);
        ;
        mpfr_pow(r28075, r28073, r28074, MPFR_RNDN);
        ;
        ;
        mpfr_add(r28078, r28077, r28069, MPFR_RNDN);
        mpfr_mul(r28079, r28070, r28078, MPFR_RNDN);
        ;
        mpfr_mul(r28081, r28080, r28069, MPFR_RNDN);
        mpfr_sub(r28082, r28077, r28081, MPFR_RNDN);
        mpfr_mul(r28083, r28072, r28082, MPFR_RNDN);
        mpfr_add(r28084, r28079, r28083, MPFR_RNDN);
        mpfr_mul(r28085, r28076, r28084, MPFR_RNDN);
        mpfr_add(r28086, r28075, r28085, MPFR_RNDN);
        mpfr_sqrt(r28087, r28086, MPFR_RNDN);
        mpfr_mul(r28088, r28087, r28087, MPFR_RNDN);
        mpfr_sub(r28089, r28088, r28077, MPFR_RNDN);
        return mpfr_get_d(r28089, MPFR_RNDN);
}

