#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 r11244 = a;
        float r11245 = r11244 * r11244;
        float r11246 = b;
        float r11247 = r11246 * r11246;
        float r11248 = r11245 + r11247;
        float r11249 = 2.0f;
        float r11250 = pow(r11248, r11249);
        float r11251 = 4.0f;
        float r11252 = r11251 * r11247;
        float r11253 = r11250 + r11252;
        float r11254 = 1.0f;
        float r11255 = r11253 - r11254;
        return r11255;
}

double f_id(double a, double b) {
        double r11256 = a;
        double r11257 = r11256 * r11256;
        double r11258 = b;
        double r11259 = r11258 * r11258;
        double r11260 = r11257 + r11259;
        double r11261 = 2.0;
        double r11262 = pow(r11260, r11261);
        double r11263 = 4.0;
        double r11264 = r11263 * r11259;
        double r11265 = r11262 + r11264;
        double r11266 = 1.0;
        double r11267 = r11265 - r11266;
        return r11267;
}


double f_of(float a, float b) {
        float r11268 = b;
        float r11269 = r11268 * r11268;
        float r11270 = 4.0f;
        float r11271 = r11269 * r11270;
        float r11272 = a;
        float r11273 = r11272 * r11272;
        float r11274 = r11273 + r11269;
        float r11275 = 2.0f;
        float r11276 = pow(r11274, r11275);
        float r11277 = r11271 + r11276;
        float r11278 = 1.0f;
        float r11279 = r11277 - r11278;
        return r11279;
}

double f_od(double a, double b) {
        double r11280 = b;
        double r11281 = r11280 * r11280;
        double r11282 = 4.0;
        double r11283 = r11281 * r11282;
        double r11284 = a;
        double r11285 = r11284 * r11284;
        double r11286 = r11285 + r11281;
        double r11287 = 2.0;
        double r11288 = pow(r11286, r11287);
        double r11289 = r11283 + r11288;
        double r11290 = 1.0;
        double r11291 = r11289 - r11290;
        return r11291;
}

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 r11292, r11293, r11294, r11295, r11296, r11297, r11298, r11299, r11300, r11301, r11302, r11303;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11292);
        mpfr_init(r11293);
        mpfr_init(r11294);
        mpfr_init(r11295);
        mpfr_init(r11296);
        mpfr_init_set_str(r11297, "2", 10, MPFR_RNDN);
        mpfr_init(r11298);
        mpfr_init_set_str(r11299, "4", 10, MPFR_RNDN);
        mpfr_init(r11300);
        mpfr_init(r11301);
        mpfr_init_set_str(r11302, "1", 10, MPFR_RNDN);
        mpfr_init(r11303);
}

double f_im(double a, double b) {
        mpfr_set_d(r11292, a, MPFR_RNDN);
        mpfr_mul(r11293, r11292, r11292, MPFR_RNDN);
        mpfr_set_d(r11294, b, MPFR_RNDN);
        mpfr_mul(r11295, r11294, r11294, MPFR_RNDN);
        mpfr_add(r11296, r11293, r11295, MPFR_RNDN);
        ;
        mpfr_pow(r11298, r11296, r11297, MPFR_RNDN);
        ;
        mpfr_mul(r11300, r11299, r11295, MPFR_RNDN);
        mpfr_add(r11301, r11298, r11300, MPFR_RNDN);
        ;
        mpfr_sub(r11303, r11301, r11302, MPFR_RNDN);
        return mpfr_get_d(r11303, MPFR_RNDN);
}

static mpfr_t r11304, r11305, r11306, r11307, r11308, r11309, r11310, r11311, r11312, r11313, r11314, r11315;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11304);
        mpfr_init(r11305);
        mpfr_init_set_str(r11306, "4", 10, MPFR_RNDN);
        mpfr_init(r11307);
        mpfr_init(r11308);
        mpfr_init(r11309);
        mpfr_init(r11310);
        mpfr_init_set_str(r11311, "2", 10, MPFR_RNDN);
        mpfr_init(r11312);
        mpfr_init(r11313);
        mpfr_init_set_str(r11314, "1", 10, MPFR_RNDN);
        mpfr_init(r11315);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11304, b, MPFR_RNDN);
        mpfr_mul(r11305, r11304, r11304, MPFR_RNDN);
        ;
        mpfr_mul(r11307, r11305, r11306, MPFR_RNDN);
        mpfr_set_d(r11308, a, MPFR_RNDN);
        mpfr_mul(r11309, r11308, r11308, MPFR_RNDN);
        mpfr_add(r11310, r11309, r11305, MPFR_RNDN);
        ;
        mpfr_pow(r11312, r11310, r11311, MPFR_RNDN);
        mpfr_add(r11313, r11307, r11312, MPFR_RNDN);
        ;
        mpfr_sub(r11315, r11313, r11314, MPFR_RNDN);
        return mpfr_get_d(r11315, MPFR_RNDN);
}

static mpfr_t r11316, r11317, r11318, r11319, r11320, r11321, r11322, r11323, r11324, r11325, r11326, r11327;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11316);
        mpfr_init(r11317);
        mpfr_init_set_str(r11318, "4", 10, MPFR_RNDN);
        mpfr_init(r11319);
        mpfr_init(r11320);
        mpfr_init(r11321);
        mpfr_init(r11322);
        mpfr_init_set_str(r11323, "2", 10, MPFR_RNDN);
        mpfr_init(r11324);
        mpfr_init(r11325);
        mpfr_init_set_str(r11326, "1", 10, MPFR_RNDN);
        mpfr_init(r11327);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11316, b, MPFR_RNDN);
        mpfr_mul(r11317, r11316, r11316, MPFR_RNDN);
        ;
        mpfr_mul(r11319, r11317, r11318, MPFR_RNDN);
        mpfr_set_d(r11320, a, MPFR_RNDN);
        mpfr_mul(r11321, r11320, r11320, MPFR_RNDN);
        mpfr_add(r11322, r11321, r11317, MPFR_RNDN);
        ;
        mpfr_pow(r11324, r11322, r11323, MPFR_RNDN);
        mpfr_add(r11325, r11319, r11324, MPFR_RNDN);
        ;
        mpfr_sub(r11327, r11325, r11326, MPFR_RNDN);
        return mpfr_get_d(r11327, MPFR_RNDN);
}

