#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 r28211 = a;
        float r28212 = r28211 * r28211;
        float r28213 = b;
        float r28214 = r28213 * r28213;
        float r28215 = r28212 + r28214;
        float r28216 = 2;
        float r28217 = pow(r28215, r28216);
        float r28218 = 4;
        float r28219 = r28218 * r28214;
        float r28220 = r28217 + r28219;
        float r28221 = 1;
        float r28222 = r28220 - r28221;
        return r28222;
}

double f_id(double a, double b) {
        double r28223 = a;
        double r28224 = r28223 * r28223;
        double r28225 = b;
        double r28226 = r28225 * r28225;
        double r28227 = r28224 + r28226;
        double r28228 = 2;
        double r28229 = pow(r28227, r28228);
        double r28230 = 4;
        double r28231 = r28230 * r28226;
        double r28232 = r28229 + r28231;
        double r28233 = 1;
        double r28234 = r28232 - r28233;
        return r28234;
}


double f_of(float a, float b) {
        float r28235 = a;
        float r28236 = r28235 * r28235;
        float r28237 = b;
        float r28238 = r28237 * r28237;
        float r28239 = r28236 + r28238;
        float r28240 = 2;
        float r28241 = pow(r28239, r28240);
        float r28242 = 4;
        float r28243 = r28242 * r28238;
        float r28244 = r28241 + r28243;
        float r28245 = 1;
        float r28246 = r28244 - r28245;
        return r28246;
}

double f_od(double a, double b) {
        double r28247 = a;
        double r28248 = r28247 * r28247;
        double r28249 = b;
        double r28250 = r28249 * r28249;
        double r28251 = r28248 + r28250;
        double r28252 = 2;
        double r28253 = pow(r28251, r28252);
        double r28254 = 4;
        double r28255 = r28254 * r28250;
        double r28256 = r28253 + r28255;
        double r28257 = 1;
        double r28258 = r28256 - r28257;
        return r28258;
}

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 r28259, r28260, r28261, r28262, r28263, r28264, r28265, r28266, r28267, r28268, r28269, r28270;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r28259);
        mpfr_init(r28260);
        mpfr_init(r28261);
        mpfr_init(r28262);
        mpfr_init(r28263);
        mpfr_init_set_str(r28264, "2", 10, MPFR_RNDN);
        mpfr_init(r28265);
        mpfr_init_set_str(r28266, "4", 10, MPFR_RNDN);
        mpfr_init(r28267);
        mpfr_init(r28268);
        mpfr_init_set_str(r28269, "1", 10, MPFR_RNDN);
        mpfr_init(r28270);
}

double f_im(double a, double b) {
        mpfr_set_d(r28259, a, MPFR_RNDN);
        mpfr_mul(r28260, r28259, r28259, MPFR_RNDN);
        mpfr_set_d(r28261, b, MPFR_RNDN);
        mpfr_mul(r28262, r28261, r28261, MPFR_RNDN);
        mpfr_add(r28263, r28260, r28262, MPFR_RNDN);
        ;
        mpfr_pow(r28265, r28263, r28264, MPFR_RNDN);
        ;
        mpfr_mul(r28267, r28266, r28262, MPFR_RNDN);
        mpfr_add(r28268, r28265, r28267, MPFR_RNDN);
        ;
        mpfr_sub(r28270, r28268, r28269, MPFR_RNDN);
        return mpfr_get_d(r28270, MPFR_RNDN);
}

static mpfr_t r28271, r28272, r28273, r28274, r28275, r28276, r28277, r28278, r28279, r28280, r28281, r28282;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r28271);
        mpfr_init(r28272);
        mpfr_init(r28273);
        mpfr_init(r28274);
        mpfr_init(r28275);
        mpfr_init_set_str(r28276, "2", 10, MPFR_RNDN);
        mpfr_init(r28277);
        mpfr_init_set_str(r28278, "4", 10, MPFR_RNDN);
        mpfr_init(r28279);
        mpfr_init(r28280);
        mpfr_init_set_str(r28281, "1", 10, MPFR_RNDN);
        mpfr_init(r28282);
}

double f_fm(double a, double b) {
        mpfr_set_d(r28271, a, MPFR_RNDN);
        mpfr_mul(r28272, r28271, r28271, MPFR_RNDN);
        mpfr_set_d(r28273, b, MPFR_RNDN);
        mpfr_mul(r28274, r28273, r28273, MPFR_RNDN);
        mpfr_add(r28275, r28272, r28274, MPFR_RNDN);
        ;
        mpfr_pow(r28277, r28275, r28276, MPFR_RNDN);
        ;
        mpfr_mul(r28279, r28278, r28274, MPFR_RNDN);
        mpfr_add(r28280, r28277, r28279, MPFR_RNDN);
        ;
        mpfr_sub(r28282, r28280, r28281, MPFR_RNDN);
        return mpfr_get_d(r28282, MPFR_RNDN);
}

static mpfr_t r28283, r28284, r28285, r28286, r28287, r28288, r28289, r28290, r28291, r28292, r28293, r28294;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r28283);
        mpfr_init(r28284);
        mpfr_init(r28285);
        mpfr_init(r28286);
        mpfr_init(r28287);
        mpfr_init_set_str(r28288, "2", 10, MPFR_RNDN);
        mpfr_init(r28289);
        mpfr_init_set_str(r28290, "4", 10, MPFR_RNDN);
        mpfr_init(r28291);
        mpfr_init(r28292);
        mpfr_init_set_str(r28293, "1", 10, MPFR_RNDN);
        mpfr_init(r28294);
}

double f_dm(double a, double b) {
        mpfr_set_d(r28283, a, MPFR_RNDN);
        mpfr_mul(r28284, r28283, r28283, MPFR_RNDN);
        mpfr_set_d(r28285, b, MPFR_RNDN);
        mpfr_mul(r28286, r28285, r28285, MPFR_RNDN);
        mpfr_add(r28287, r28284, r28286, MPFR_RNDN);
        ;
        mpfr_pow(r28289, r28287, r28288, MPFR_RNDN);
        ;
        mpfr_mul(r28291, r28290, r28286, MPFR_RNDN);
        mpfr_add(r28292, r28289, r28291, MPFR_RNDN);
        ;
        mpfr_sub(r28294, r28292, r28293, MPFR_RNDN);
        return mpfr_get_d(r28294, MPFR_RNDN);
}

