#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 r26943 = a;
        float r26944 = r26943 * r26943;
        float r26945 = b;
        float r26946 = r26945 * r26945;
        float r26947 = r26944 + r26946;
        float r26948 = 2;
        float r26949 = pow(r26947, r26948);
        float r26950 = 4;
        float r26951 = 1;
        float r26952 = r26951 + r26943;
        float r26953 = r26944 * r26952;
        float r26954 = 3;
        float r26955 = r26954 * r26943;
        float r26956 = r26951 - r26955;
        float r26957 = r26946 * r26956;
        float r26958 = r26953 + r26957;
        float r26959 = r26950 * r26958;
        float r26960 = r26949 + r26959;
        float r26961 = r26960 - r26951;
        return r26961;
}

double f_id(double a, double b) {
        double r26962 = a;
        double r26963 = r26962 * r26962;
        double r26964 = b;
        double r26965 = r26964 * r26964;
        double r26966 = r26963 + r26965;
        double r26967 = 2;
        double r26968 = pow(r26966, r26967);
        double r26969 = 4;
        double r26970 = 1;
        double r26971 = r26970 + r26962;
        double r26972 = r26963 * r26971;
        double r26973 = 3;
        double r26974 = r26973 * r26962;
        double r26975 = r26970 - r26974;
        double r26976 = r26965 * r26975;
        double r26977 = r26972 + r26976;
        double r26978 = r26969 * r26977;
        double r26979 = r26968 + r26978;
        double r26980 = r26979 - r26970;
        return r26980;
}


double f_of(float a, float b) {
        float r26981 = a;
        float r26982 = b;
        float r26983 = r26982 * r26982;
        float r26984 = fma(r26981, r26981, r26983);
        float r26985 = hypot(r26982, r26981);
        float r26986 = r26984 * r26985;
        float r26987 = r26981 * r26981;
        float r26988 = fma(r26982, r26982, r26987);
        float r26989 = sqrt(r26988);
        float r26990 = r26986 * r26989;
        float r26991 = 4;
        float r26992 = 1;
        float r26993 = r26992 + r26981;
        float r26994 = r26987 * r26993;
        float r26995 = 3;
        float r26996 = r26995 * r26981;
        float r26997 = r26992 - r26996;
        float r26998 = r26983 * r26997;
        float r26999 = r26994 + r26998;
        float r27000 = r26991 * r26999;
        float r27001 = r26990 + r27000;
        float r27002 = r27001 - r26992;
        return r27002;
}

double f_od(double a, double b) {
        double r27003 = a;
        double r27004 = b;
        double r27005 = r27004 * r27004;
        double r27006 = fma(r27003, r27003, r27005);
        double r27007 = hypot(r27004, r27003);
        double r27008 = r27006 * r27007;
        double r27009 = r27003 * r27003;
        double r27010 = fma(r27004, r27004, r27009);
        double r27011 = sqrt(r27010);
        double r27012 = r27008 * r27011;
        double r27013 = 4;
        double r27014 = 1;
        double r27015 = r27014 + r27003;
        double r27016 = r27009 * r27015;
        double r27017 = 3;
        double r27018 = r27017 * r27003;
        double r27019 = r27014 - r27018;
        double r27020 = r27005 * r27019;
        double r27021 = r27016 + r27020;
        double r27022 = r27013 * r27021;
        double r27023 = r27012 + r27022;
        double r27024 = r27023 - r27014;
        return r27024;
}

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 r27025, r27026, r27027, r27028, r27029, r27030, r27031, r27032, r27033, r27034, r27035, r27036, r27037, r27038, r27039, r27040, r27041, r27042, r27043;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27025);
        mpfr_init(r27026);
        mpfr_init(r27027);
        mpfr_init(r27028);
        mpfr_init(r27029);
        mpfr_init_set_str(r27030, "2", 10, MPFR_RNDN);
        mpfr_init(r27031);
        mpfr_init_set_str(r27032, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r27033, "1", 10, MPFR_RNDN);
        mpfr_init(r27034);
        mpfr_init(r27035);
        mpfr_init_set_str(r27036, "3", 10, MPFR_RNDN);
        mpfr_init(r27037);
        mpfr_init(r27038);
        mpfr_init(r27039);
        mpfr_init(r27040);
        mpfr_init(r27041);
        mpfr_init(r27042);
        mpfr_init(r27043);
}

double f_im(double a, double b) {
        mpfr_set_d(r27025, a, MPFR_RNDN);
        mpfr_mul(r27026, r27025, r27025, MPFR_RNDN);
        mpfr_set_d(r27027, b, MPFR_RNDN);
        mpfr_mul(r27028, r27027, r27027, MPFR_RNDN);
        mpfr_add(r27029, r27026, r27028, MPFR_RNDN);
        ;
        mpfr_pow(r27031, r27029, r27030, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27034, r27033, r27025, MPFR_RNDN);
        mpfr_mul(r27035, r27026, r27034, MPFR_RNDN);
        ;
        mpfr_mul(r27037, r27036, r27025, MPFR_RNDN);
        mpfr_sub(r27038, r27033, r27037, MPFR_RNDN);
        mpfr_mul(r27039, r27028, r27038, MPFR_RNDN);
        mpfr_add(r27040, r27035, r27039, MPFR_RNDN);
        mpfr_mul(r27041, r27032, r27040, MPFR_RNDN);
        mpfr_add(r27042, r27031, r27041, MPFR_RNDN);
        mpfr_sub(r27043, r27042, r27033, MPFR_RNDN);
        return mpfr_get_d(r27043, MPFR_RNDN);
}

static mpfr_t r27044, r27045, r27046, r27047, r27048, r27049, r27050, r27051, r27052, r27053, r27054, r27055, r27056, r27057, r27058, r27059, r27060, r27061, r27062, r27063, r27064, r27065;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27044);
        mpfr_init(r27045);
        mpfr_init(r27046);
        mpfr_init(r27047);
        mpfr_init(r27048);
        mpfr_init(r27049);
        mpfr_init(r27050);
        mpfr_init(r27051);
        mpfr_init(r27052);
        mpfr_init(r27053);
        mpfr_init_set_str(r27054, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r27055, "1", 10, MPFR_RNDN);
        mpfr_init(r27056);
        mpfr_init(r27057);
        mpfr_init_set_str(r27058, "3", 10, MPFR_RNDN);
        mpfr_init(r27059);
        mpfr_init(r27060);
        mpfr_init(r27061);
        mpfr_init(r27062);
        mpfr_init(r27063);
        mpfr_init(r27064);
        mpfr_init(r27065);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27044, a, MPFR_RNDN);
        mpfr_set_d(r27045, b, MPFR_RNDN);
        mpfr_mul(r27046, r27045, r27045, MPFR_RNDN);
        mpfr_fma(r27047, r27044, r27044, r27046, MPFR_RNDN);
        mpfr_hypot(r27048, r27045, r27044, MPFR_RNDN);
        mpfr_mul(r27049, r27047, r27048, MPFR_RNDN);
        mpfr_mul(r27050, r27044, r27044, MPFR_RNDN);
        mpfr_fma(r27051, r27045, r27045, r27050, MPFR_RNDN);
        mpfr_sqrt(r27052, r27051, MPFR_RNDN);
        mpfr_mul(r27053, r27049, r27052, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27056, r27055, r27044, MPFR_RNDN);
        mpfr_mul(r27057, r27050, r27056, MPFR_RNDN);
        ;
        mpfr_mul(r27059, r27058, r27044, MPFR_RNDN);
        mpfr_sub(r27060, r27055, r27059, MPFR_RNDN);
        mpfr_mul(r27061, r27046, r27060, MPFR_RNDN);
        mpfr_add(r27062, r27057, r27061, MPFR_RNDN);
        mpfr_mul(r27063, r27054, r27062, MPFR_RNDN);
        mpfr_add(r27064, r27053, r27063, MPFR_RNDN);
        mpfr_sub(r27065, r27064, r27055, MPFR_RNDN);
        return mpfr_get_d(r27065, MPFR_RNDN);
}

static mpfr_t r27066, r27067, r27068, r27069, r27070, r27071, r27072, r27073, r27074, r27075, r27076, r27077, r27078, r27079, r27080, r27081, r27082, r27083, r27084, r27085, r27086, r27087;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27066);
        mpfr_init(r27067);
        mpfr_init(r27068);
        mpfr_init(r27069);
        mpfr_init(r27070);
        mpfr_init(r27071);
        mpfr_init(r27072);
        mpfr_init(r27073);
        mpfr_init(r27074);
        mpfr_init(r27075);
        mpfr_init_set_str(r27076, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r27077, "1", 10, MPFR_RNDN);
        mpfr_init(r27078);
        mpfr_init(r27079);
        mpfr_init_set_str(r27080, "3", 10, MPFR_RNDN);
        mpfr_init(r27081);
        mpfr_init(r27082);
        mpfr_init(r27083);
        mpfr_init(r27084);
        mpfr_init(r27085);
        mpfr_init(r27086);
        mpfr_init(r27087);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27066, a, MPFR_RNDN);
        mpfr_set_d(r27067, b, MPFR_RNDN);
        mpfr_mul(r27068, r27067, r27067, MPFR_RNDN);
        mpfr_fma(r27069, r27066, r27066, r27068, MPFR_RNDN);
        mpfr_hypot(r27070, r27067, r27066, MPFR_RNDN);
        mpfr_mul(r27071, r27069, r27070, MPFR_RNDN);
        mpfr_mul(r27072, r27066, r27066, MPFR_RNDN);
        mpfr_fma(r27073, r27067, r27067, r27072, MPFR_RNDN);
        mpfr_sqrt(r27074, r27073, MPFR_RNDN);
        mpfr_mul(r27075, r27071, r27074, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27078, r27077, r27066, MPFR_RNDN);
        mpfr_mul(r27079, r27072, r27078, MPFR_RNDN);
        ;
        mpfr_mul(r27081, r27080, r27066, MPFR_RNDN);
        mpfr_sub(r27082, r27077, r27081, MPFR_RNDN);
        mpfr_mul(r27083, r27068, r27082, MPFR_RNDN);
        mpfr_add(r27084, r27079, r27083, MPFR_RNDN);
        mpfr_mul(r27085, r27076, r27084, MPFR_RNDN);
        mpfr_add(r27086, r27075, r27085, MPFR_RNDN);
        mpfr_sub(r27087, r27086, r27077, MPFR_RNDN);
        return mpfr_get_d(r27087, MPFR_RNDN);
}

