#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 r11212 = a;
        float r11213 = r11212 * r11212;
        float r11214 = b;
        float r11215 = r11214 * r11214;
        float r11216 = r11213 + r11215;
        float r11217 = 2.0f;
        float r11218 = pow(r11216, r11217);
        float r11219 = 4.0f;
        float r11220 = r11219 * r11215;
        float r11221 = r11218 + r11220;
        float r11222 = 1.0f;
        float r11223 = r11221 - r11222;
        return r11223;
}

double f_id(double a, double b) {
        double r11224 = a;
        double r11225 = r11224 * r11224;
        double r11226 = b;
        double r11227 = r11226 * r11226;
        double r11228 = r11225 + r11227;
        double r11229 = 2.0;
        double r11230 = pow(r11228, r11229);
        double r11231 = 4.0;
        double r11232 = r11231 * r11227;
        double r11233 = r11230 + r11232;
        double r11234 = 1.0;
        double r11235 = r11233 - r11234;
        return r11235;
}


double f_of(float a, float b) {
        float r11236 = b;
        float r11237 = r11236 * r11236;
        float r11238 = 4.0f;
        float r11239 = r11237 * r11238;
        float r11240 = a;
        float r11241 = r11240 * r11240;
        float r11242 = r11241 + r11237;
        float r11243 = 2.0f;
        float r11244 = pow(r11242, r11243);
        float r11245 = r11239 + r11244;
        float r11246 = 1.0f;
        float r11247 = r11245 - r11246;
        return r11247;
}

double f_od(double a, double b) {
        double r11248 = b;
        double r11249 = r11248 * r11248;
        double r11250 = 4.0;
        double r11251 = r11249 * r11250;
        double r11252 = a;
        double r11253 = r11252 * r11252;
        double r11254 = r11253 + r11249;
        double r11255 = 2.0;
        double r11256 = pow(r11254, r11255);
        double r11257 = r11251 + r11256;
        double r11258 = 1.0;
        double r11259 = r11257 - r11258;
        return r11259;
}

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 r11260, r11261, r11262, r11263, r11264, r11265, r11266, r11267, r11268, r11269, r11270, r11271;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r11260);
        mpfr_init(r11261);
        mpfr_init(r11262);
        mpfr_init(r11263);
        mpfr_init(r11264);
        mpfr_init_set_str(r11265, "2", 10, MPFR_RNDN);
        mpfr_init(r11266);
        mpfr_init_set_str(r11267, "4", 10, MPFR_RNDN);
        mpfr_init(r11268);
        mpfr_init(r11269);
        mpfr_init_set_str(r11270, "1", 10, MPFR_RNDN);
        mpfr_init(r11271);
}

double f_im(double a, double b) {
        mpfr_set_d(r11260, a, MPFR_RNDN);
        mpfr_mul(r11261, r11260, r11260, MPFR_RNDN);
        mpfr_set_d(r11262, b, MPFR_RNDN);
        mpfr_mul(r11263, r11262, r11262, MPFR_RNDN);
        mpfr_add(r11264, r11261, r11263, MPFR_RNDN);
        ;
        mpfr_pow(r11266, r11264, r11265, MPFR_RNDN);
        ;
        mpfr_mul(r11268, r11267, r11263, MPFR_RNDN);
        mpfr_add(r11269, r11266, r11268, MPFR_RNDN);
        ;
        mpfr_sub(r11271, r11269, r11270, MPFR_RNDN);
        return mpfr_get_d(r11271, MPFR_RNDN);
}

static mpfr_t r11272, r11273, r11274, r11275, r11276, r11277, r11278, r11279, r11280, r11281, r11282, r11283;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11272);
        mpfr_init(r11273);
        mpfr_init_set_str(r11274, "4", 10, MPFR_RNDN);
        mpfr_init(r11275);
        mpfr_init(r11276);
        mpfr_init(r11277);
        mpfr_init(r11278);
        mpfr_init_set_str(r11279, "2", 10, MPFR_RNDN);
        mpfr_init(r11280);
        mpfr_init(r11281);
        mpfr_init_set_str(r11282, "1", 10, MPFR_RNDN);
        mpfr_init(r11283);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11272, b, MPFR_RNDN);
        mpfr_mul(r11273, r11272, r11272, MPFR_RNDN);
        ;
        mpfr_mul(r11275, r11273, r11274, MPFR_RNDN);
        mpfr_set_d(r11276, a, MPFR_RNDN);
        mpfr_mul(r11277, r11276, r11276, MPFR_RNDN);
        mpfr_add(r11278, r11277, r11273, MPFR_RNDN);
        ;
        mpfr_pow(r11280, r11278, r11279, MPFR_RNDN);
        mpfr_add(r11281, r11275, r11280, MPFR_RNDN);
        ;
        mpfr_sub(r11283, r11281, r11282, MPFR_RNDN);
        return mpfr_get_d(r11283, MPFR_RNDN);
}

static mpfr_t r11284, r11285, r11286, r11287, r11288, r11289, r11290, r11291, r11292, r11293, r11294, r11295;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11284);
        mpfr_init(r11285);
        mpfr_init_set_str(r11286, "4", 10, MPFR_RNDN);
        mpfr_init(r11287);
        mpfr_init(r11288);
        mpfr_init(r11289);
        mpfr_init(r11290);
        mpfr_init_set_str(r11291, "2", 10, MPFR_RNDN);
        mpfr_init(r11292);
        mpfr_init(r11293);
        mpfr_init_set_str(r11294, "1", 10, MPFR_RNDN);
        mpfr_init(r11295);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11284, b, MPFR_RNDN);
        mpfr_mul(r11285, r11284, r11284, MPFR_RNDN);
        ;
        mpfr_mul(r11287, r11285, r11286, MPFR_RNDN);
        mpfr_set_d(r11288, a, MPFR_RNDN);
        mpfr_mul(r11289, r11288, r11288, MPFR_RNDN);
        mpfr_add(r11290, r11289, r11285, MPFR_RNDN);
        ;
        mpfr_pow(r11292, r11290, r11291, MPFR_RNDN);
        mpfr_add(r11293, r11287, r11292, MPFR_RNDN);
        ;
        mpfr_sub(r11295, r11293, r11294, MPFR_RNDN);
        return mpfr_get_d(r11295, MPFR_RNDN);
}

