#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 r11205 = a;
        float r11206 = r11205 * r11205;
        float r11207 = b;
        float r11208 = r11207 * r11207;
        float r11209 = r11206 + r11208;
        float r11210 = 2.0f;
        float r11211 = pow(r11209, r11210);
        float r11212 = 4.0f;
        float r11213 = r11212 * r11208;
        float r11214 = r11211 + r11213;
        float r11215 = 1.0f;
        float r11216 = r11214 - r11215;
        return r11216;
}

double f_id(double a, double b) {
        double r11217 = a;
        double r11218 = r11217 * r11217;
        double r11219 = b;
        double r11220 = r11219 * r11219;
        double r11221 = r11218 + r11220;
        double r11222 = 2.0;
        double r11223 = pow(r11221, r11222);
        double r11224 = 4.0;
        double r11225 = r11224 * r11220;
        double r11226 = r11223 + r11225;
        double r11227 = 1.0;
        double r11228 = r11226 - r11227;
        return r11228;
}


double f_of(float a, float b) {
        float r11229 = b;
        float r11230 = r11229 * r11229;
        float r11231 = 4.0f;
        float r11232 = r11230 * r11231;
        float r11233 = a;
        float r11234 = r11233 * r11233;
        float r11235 = r11234 + r11230;
        float r11236 = 2.0f;
        float r11237 = pow(r11235, r11236);
        float r11238 = r11232 + r11237;
        float r11239 = 1.0f;
        float r11240 = r11238 - r11239;
        return r11240;
}

double f_od(double a, double b) {
        double r11241 = b;
        double r11242 = r11241 * r11241;
        double r11243 = 4.0;
        double r11244 = r11242 * r11243;
        double r11245 = a;
        double r11246 = r11245 * r11245;
        double r11247 = r11246 + r11242;
        double r11248 = 2.0;
        double r11249 = pow(r11247, r11248);
        double r11250 = r11244 + r11249;
        double r11251 = 1.0;
        double r11252 = r11250 - r11251;
        return r11252;
}

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 r11253, r11254, r11255, r11256, r11257, r11258, r11259, r11260, r11261, r11262, r11263, r11264;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11253);
        mpfr_init(r11254);
        mpfr_init(r11255);
        mpfr_init(r11256);
        mpfr_init(r11257);
        mpfr_init_set_str(r11258, "2", 10, MPFR_RNDN);
        mpfr_init(r11259);
        mpfr_init_set_str(r11260, "4", 10, MPFR_RNDN);
        mpfr_init(r11261);
        mpfr_init(r11262);
        mpfr_init_set_str(r11263, "1", 10, MPFR_RNDN);
        mpfr_init(r11264);
}

double f_im(double a, double b) {
        mpfr_set_d(r11253, a, MPFR_RNDN);
        mpfr_mul(r11254, r11253, r11253, MPFR_RNDN);
        mpfr_set_d(r11255, b, MPFR_RNDN);
        mpfr_mul(r11256, r11255, r11255, MPFR_RNDN);
        mpfr_add(r11257, r11254, r11256, MPFR_RNDN);
        ;
        mpfr_pow(r11259, r11257, r11258, MPFR_RNDN);
        ;
        mpfr_mul(r11261, r11260, r11256, MPFR_RNDN);
        mpfr_add(r11262, r11259, r11261, MPFR_RNDN);
        ;
        mpfr_sub(r11264, r11262, r11263, MPFR_RNDN);
        return mpfr_get_d(r11264, MPFR_RNDN);
}

static mpfr_t r11265, r11266, r11267, r11268, r11269, r11270, r11271, r11272, r11273, r11274, r11275, r11276;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11265);
        mpfr_init(r11266);
        mpfr_init_set_str(r11267, "4", 10, MPFR_RNDN);
        mpfr_init(r11268);
        mpfr_init(r11269);
        mpfr_init(r11270);
        mpfr_init(r11271);
        mpfr_init_set_str(r11272, "2", 10, MPFR_RNDN);
        mpfr_init(r11273);
        mpfr_init(r11274);
        mpfr_init_set_str(r11275, "1", 10, MPFR_RNDN);
        mpfr_init(r11276);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11265, b, MPFR_RNDN);
        mpfr_mul(r11266, r11265, r11265, MPFR_RNDN);
        ;
        mpfr_mul(r11268, r11266, r11267, MPFR_RNDN);
        mpfr_set_d(r11269, a, MPFR_RNDN);
        mpfr_mul(r11270, r11269, r11269, MPFR_RNDN);
        mpfr_add(r11271, r11270, r11266, MPFR_RNDN);
        ;
        mpfr_pow(r11273, r11271, r11272, MPFR_RNDN);
        mpfr_add(r11274, r11268, r11273, MPFR_RNDN);
        ;
        mpfr_sub(r11276, r11274, r11275, MPFR_RNDN);
        return mpfr_get_d(r11276, MPFR_RNDN);
}

static mpfr_t r11277, r11278, r11279, r11280, r11281, r11282, r11283, r11284, r11285, r11286, r11287, r11288;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11277);
        mpfr_init(r11278);
        mpfr_init_set_str(r11279, "4", 10, MPFR_RNDN);
        mpfr_init(r11280);
        mpfr_init(r11281);
        mpfr_init(r11282);
        mpfr_init(r11283);
        mpfr_init_set_str(r11284, "2", 10, MPFR_RNDN);
        mpfr_init(r11285);
        mpfr_init(r11286);
        mpfr_init_set_str(r11287, "1", 10, MPFR_RNDN);
        mpfr_init(r11288);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11277, b, MPFR_RNDN);
        mpfr_mul(r11278, r11277, r11277, MPFR_RNDN);
        ;
        mpfr_mul(r11280, r11278, r11279, MPFR_RNDN);
        mpfr_set_d(r11281, a, MPFR_RNDN);
        mpfr_mul(r11282, r11281, r11281, MPFR_RNDN);
        mpfr_add(r11283, r11282, r11278, MPFR_RNDN);
        ;
        mpfr_pow(r11285, r11283, r11284, MPFR_RNDN);
        mpfr_add(r11286, r11280, r11285, MPFR_RNDN);
        ;
        mpfr_sub(r11288, r11286, r11287, MPFR_RNDN);
        return mpfr_get_d(r11288, MPFR_RNDN);
}

