#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 r36152 = a;
        float r36153 = r36152 * r36152;
        float r36154 = b;
        float r36155 = r36154 * r36154;
        float r36156 = r36153 + r36155;
        float r36157 = 2;
        float r36158 = pow(r36156, r36157);
        float r36159 = 4;
        float r36160 = 1;
        float r36161 = r36160 + r36152;
        float r36162 = r36153 * r36161;
        float r36163 = 3;
        float r36164 = r36163 * r36152;
        float r36165 = r36160 - r36164;
        float r36166 = r36155 * r36165;
        float r36167 = r36162 + r36166;
        float r36168 = r36159 * r36167;
        float r36169 = r36158 + r36168;
        float r36170 = r36169 - r36160;
        return r36170;
}

double f_id(double a, double b) {
        double r36171 = a;
        double r36172 = r36171 * r36171;
        double r36173 = b;
        double r36174 = r36173 * r36173;
        double r36175 = r36172 + r36174;
        double r36176 = 2;
        double r36177 = pow(r36175, r36176);
        double r36178 = 4;
        double r36179 = 1;
        double r36180 = r36179 + r36171;
        double r36181 = r36172 * r36180;
        double r36182 = 3;
        double r36183 = r36182 * r36171;
        double r36184 = r36179 - r36183;
        double r36185 = r36174 * r36184;
        double r36186 = r36181 + r36185;
        double r36187 = r36178 * r36186;
        double r36188 = r36177 + r36187;
        double r36189 = r36188 - r36179;
        return r36189;
}


double f_of(float a, float b) {
        float r36190 = a;
        float r36191 = r36190 * r36190;
        float r36192 = b;
        float r36193 = r36192 * r36192;
        float r36194 = r36191 + r36193;
        float r36195 = 2;
        float r36196 = pow(r36194, r36195);
        float r36197 = 4;
        float r36198 = 1;
        float r36199 = r36198 + r36190;
        float r36200 = r36191 * r36199;
        float r36201 = 3;
        float r36202 = r36201 * r36190;
        float r36203 = r36198 - r36202;
        float r36204 = r36193 * r36203;
        float r36205 = r36200 + r36204;
        float r36206 = r36197 * r36205;
        float r36207 = r36196 + r36206;
        float r36208 = r36207 - r36198;
        return r36208;
}

double f_od(double a, double b) {
        double r36209 = a;
        double r36210 = r36209 * r36209;
        double r36211 = b;
        double r36212 = r36211 * r36211;
        double r36213 = r36210 + r36212;
        double r36214 = 2;
        double r36215 = pow(r36213, r36214);
        double r36216 = 4;
        double r36217 = 1;
        double r36218 = r36217 + r36209;
        double r36219 = r36210 * r36218;
        double r36220 = 3;
        double r36221 = r36220 * r36209;
        double r36222 = r36217 - r36221;
        double r36223 = r36212 * r36222;
        double r36224 = r36219 + r36223;
        double r36225 = r36216 * r36224;
        double r36226 = r36215 + r36225;
        double r36227 = r36226 - r36217;
        return r36227;
}

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 r36228, r36229, r36230, r36231, r36232, r36233, r36234, r36235, r36236, r36237, r36238, r36239, r36240, r36241, r36242, r36243, r36244, r36245, r36246;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r36228);
        mpfr_init(r36229);
        mpfr_init(r36230);
        mpfr_init(r36231);
        mpfr_init(r36232);
        mpfr_init_set_str(r36233, "2", 10, MPFR_RNDN);
        mpfr_init(r36234);
        mpfr_init_set_str(r36235, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r36236, "1", 10, MPFR_RNDN);
        mpfr_init(r36237);
        mpfr_init(r36238);
        mpfr_init_set_str(r36239, "3", 10, MPFR_RNDN);
        mpfr_init(r36240);
        mpfr_init(r36241);
        mpfr_init(r36242);
        mpfr_init(r36243);
        mpfr_init(r36244);
        mpfr_init(r36245);
        mpfr_init(r36246);
}

double f_im(double a, double b) {
        mpfr_set_d(r36228, a, MPFR_RNDN);
        mpfr_mul(r36229, r36228, r36228, MPFR_RNDN);
        mpfr_set_d(r36230, b, MPFR_RNDN);
        mpfr_mul(r36231, r36230, r36230, MPFR_RNDN);
        mpfr_add(r36232, r36229, r36231, MPFR_RNDN);
        ;
        mpfr_pow(r36234, r36232, r36233, MPFR_RNDN);
        ;
        ;
        mpfr_add(r36237, r36236, r36228, MPFR_RNDN);
        mpfr_mul(r36238, r36229, r36237, MPFR_RNDN);
        ;
        mpfr_mul(r36240, r36239, r36228, MPFR_RNDN);
        mpfr_sub(r36241, r36236, r36240, MPFR_RNDN);
        mpfr_mul(r36242, r36231, r36241, MPFR_RNDN);
        mpfr_add(r36243, r36238, r36242, MPFR_RNDN);
        mpfr_mul(r36244, r36235, r36243, MPFR_RNDN);
        mpfr_add(r36245, r36234, r36244, MPFR_RNDN);
        mpfr_sub(r36246, r36245, r36236, MPFR_RNDN);
        return mpfr_get_d(r36246, MPFR_RNDN);
}

static mpfr_t r36247, r36248, r36249, r36250, r36251, r36252, r36253, r36254, r36255, r36256, r36257, r36258, r36259, r36260, r36261, r36262, r36263, r36264, r36265;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r36247);
        mpfr_init(r36248);
        mpfr_init(r36249);
        mpfr_init(r36250);
        mpfr_init(r36251);
        mpfr_init_set_str(r36252, "2", 10, MPFR_RNDN);
        mpfr_init(r36253);
        mpfr_init_set_str(r36254, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r36255, "1", 10, MPFR_RNDN);
        mpfr_init(r36256);
        mpfr_init(r36257);
        mpfr_init_set_str(r36258, "3", 10, MPFR_RNDN);
        mpfr_init(r36259);
        mpfr_init(r36260);
        mpfr_init(r36261);
        mpfr_init(r36262);
        mpfr_init(r36263);
        mpfr_init(r36264);
        mpfr_init(r36265);
}

double f_fm(double a, double b) {
        mpfr_set_d(r36247, a, MPFR_RNDN);
        mpfr_mul(r36248, r36247, r36247, MPFR_RNDN);
        mpfr_set_d(r36249, b, MPFR_RNDN);
        mpfr_mul(r36250, r36249, r36249, MPFR_RNDN);
        mpfr_add(r36251, r36248, r36250, MPFR_RNDN);
        ;
        mpfr_pow(r36253, r36251, r36252, MPFR_RNDN);
        ;
        ;
        mpfr_add(r36256, r36255, r36247, MPFR_RNDN);
        mpfr_mul(r36257, r36248, r36256, MPFR_RNDN);
        ;
        mpfr_mul(r36259, r36258, r36247, MPFR_RNDN);
        mpfr_sub(r36260, r36255, r36259, MPFR_RNDN);
        mpfr_mul(r36261, r36250, r36260, MPFR_RNDN);
        mpfr_add(r36262, r36257, r36261, MPFR_RNDN);
        mpfr_mul(r36263, r36254, r36262, MPFR_RNDN);
        mpfr_add(r36264, r36253, r36263, MPFR_RNDN);
        mpfr_sub(r36265, r36264, r36255, MPFR_RNDN);
        return mpfr_get_d(r36265, MPFR_RNDN);
}

static mpfr_t r36266, r36267, r36268, r36269, r36270, r36271, r36272, r36273, r36274, r36275, r36276, r36277, r36278, r36279, r36280, r36281, r36282, r36283, r36284;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r36266);
        mpfr_init(r36267);
        mpfr_init(r36268);
        mpfr_init(r36269);
        mpfr_init(r36270);
        mpfr_init_set_str(r36271, "2", 10, MPFR_RNDN);
        mpfr_init(r36272);
        mpfr_init_set_str(r36273, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r36274, "1", 10, MPFR_RNDN);
        mpfr_init(r36275);
        mpfr_init(r36276);
        mpfr_init_set_str(r36277, "3", 10, MPFR_RNDN);
        mpfr_init(r36278);
        mpfr_init(r36279);
        mpfr_init(r36280);
        mpfr_init(r36281);
        mpfr_init(r36282);
        mpfr_init(r36283);
        mpfr_init(r36284);
}

double f_dm(double a, double b) {
        mpfr_set_d(r36266, a, MPFR_RNDN);
        mpfr_mul(r36267, r36266, r36266, MPFR_RNDN);
        mpfr_set_d(r36268, b, MPFR_RNDN);
        mpfr_mul(r36269, r36268, r36268, MPFR_RNDN);
        mpfr_add(r36270, r36267, r36269, MPFR_RNDN);
        ;
        mpfr_pow(r36272, r36270, r36271, MPFR_RNDN);
        ;
        ;
        mpfr_add(r36275, r36274, r36266, MPFR_RNDN);
        mpfr_mul(r36276, r36267, r36275, MPFR_RNDN);
        ;
        mpfr_mul(r36278, r36277, r36266, MPFR_RNDN);
        mpfr_sub(r36279, r36274, r36278, MPFR_RNDN);
        mpfr_mul(r36280, r36269, r36279, MPFR_RNDN);
        mpfr_add(r36281, r36276, r36280, MPFR_RNDN);
        mpfr_mul(r36282, r36273, r36281, MPFR_RNDN);
        mpfr_add(r36283, r36272, r36282, MPFR_RNDN);
        mpfr_sub(r36284, r36283, r36274, MPFR_RNDN);
        return mpfr_get_d(r36284, MPFR_RNDN);
}

