#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Bouland and Aaronson, Equation (24)";

double f_if(float a, float b) {
        float r28171 = a;
        float r28172 = r28171 * r28171;
        float r28173 = b;
        float r28174 = r28173 * r28173;
        float r28175 = r28172 + r28174;
        float r28176 = 2;
        float r28177 = pow(r28175, r28176);
        float r28178 = 4;
        float r28179 = 1;
        float r28180 = r28179 - r28171;
        float r28181 = r28172 * r28180;
        float r28182 = 3;
        float r28183 = r28182 + r28171;
        float r28184 = r28174 * r28183;
        float r28185 = r28181 + r28184;
        float r28186 = r28178 * r28185;
        float r28187 = r28177 + r28186;
        float r28188 = r28187 - r28179;
        return r28188;
}

double f_id(double a, double b) {
        double r28189 = a;
        double r28190 = r28189 * r28189;
        double r28191 = b;
        double r28192 = r28191 * r28191;
        double r28193 = r28190 + r28192;
        double r28194 = 2;
        double r28195 = pow(r28193, r28194);
        double r28196 = 4;
        double r28197 = 1;
        double r28198 = r28197 - r28189;
        double r28199 = r28190 * r28198;
        double r28200 = 3;
        double r28201 = r28200 + r28189;
        double r28202 = r28192 * r28201;
        double r28203 = r28199 + r28202;
        double r28204 = r28196 * r28203;
        double r28205 = r28195 + r28204;
        double r28206 = r28205 - r28197;
        return r28206;
}


double f_of(float a, float b) {
        float r28207 = a;
        float r28208 = r28207 * r28207;
        float r28209 = b;
        float r28210 = r28209 * r28209;
        float r28211 = r28208 + r28210;
        float r28212 = 2;
        float r28213 = pow(r28211, r28212);
        float r28214 = 4;
        float r28215 = 1;
        float r28216 = r28215 - r28207;
        float r28217 = r28208 * r28216;
        float r28218 = 3;
        float r28219 = r28218 + r28207;
        float r28220 = r28210 * r28219;
        float r28221 = r28217 + r28220;
        float r28222 = r28214 * r28221;
        float r28223 = r28213 + r28222;
        float r28224 = r28223 - r28215;
        return r28224;
}

double f_od(double a, double b) {
        double r28225 = a;
        double r28226 = r28225 * r28225;
        double r28227 = b;
        double r28228 = r28227 * r28227;
        double r28229 = r28226 + r28228;
        double r28230 = 2;
        double r28231 = pow(r28229, r28230);
        double r28232 = 4;
        double r28233 = 1;
        double r28234 = r28233 - r28225;
        double r28235 = r28226 * r28234;
        double r28236 = 3;
        double r28237 = r28236 + r28225;
        double r28238 = r28228 * r28237;
        double r28239 = r28235 + r28238;
        double r28240 = r28232 * r28239;
        double r28241 = r28231 + r28240;
        double r28242 = r28241 - r28233;
        return r28242;
}

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 r28243, r28244, r28245, r28246, r28247, r28248, r28249, r28250, r28251, r28252, r28253, r28254, r28255, r28256, r28257, r28258, r28259, r28260;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r28243);
        mpfr_init(r28244);
        mpfr_init(r28245);
        mpfr_init(r28246);
        mpfr_init(r28247);
        mpfr_init_set_str(r28248, "2", 10, MPFR_RNDN);
        mpfr_init(r28249);
        mpfr_init_set_str(r28250, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r28251, "1", 10, MPFR_RNDN);
        mpfr_init(r28252);
        mpfr_init(r28253);
        mpfr_init_set_str(r28254, "3", 10, MPFR_RNDN);
        mpfr_init(r28255);
        mpfr_init(r28256);
        mpfr_init(r28257);
        mpfr_init(r28258);
        mpfr_init(r28259);
        mpfr_init(r28260);
}

double f_im(double a, double b) {
        mpfr_set_d(r28243, a, MPFR_RNDN);
        mpfr_mul(r28244, r28243, r28243, MPFR_RNDN);
        mpfr_set_d(r28245, b, MPFR_RNDN);
        mpfr_mul(r28246, r28245, r28245, MPFR_RNDN);
        mpfr_add(r28247, r28244, r28246, MPFR_RNDN);
        ;
        mpfr_pow(r28249, r28247, r28248, MPFR_RNDN);
        ;
        ;
        mpfr_sub(r28252, r28251, r28243, MPFR_RNDN);
        mpfr_mul(r28253, r28244, r28252, MPFR_RNDN);
        ;
        mpfr_add(r28255, r28254, r28243, MPFR_RNDN);
        mpfr_mul(r28256, r28246, r28255, MPFR_RNDN);
        mpfr_add(r28257, r28253, r28256, MPFR_RNDN);
        mpfr_mul(r28258, r28250, r28257, MPFR_RNDN);
        mpfr_add(r28259, r28249, r28258, MPFR_RNDN);
        mpfr_sub(r28260, r28259, r28251, MPFR_RNDN);
        return mpfr_get_d(r28260, MPFR_RNDN);
}

static mpfr_t r28261, r28262, r28263, r28264, r28265, r28266, r28267, r28268, r28269, r28270, r28271, r28272, r28273, r28274, r28275, r28276, r28277, r28278;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28261);
        mpfr_init(r28262);
        mpfr_init(r28263);
        mpfr_init(r28264);
        mpfr_init(r28265);
        mpfr_init_set_str(r28266, "2", 10, MPFR_RNDN);
        mpfr_init(r28267);
        mpfr_init_set_str(r28268, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r28269, "1", 10, MPFR_RNDN);
        mpfr_init(r28270);
        mpfr_init(r28271);
        mpfr_init_set_str(r28272, "3", 10, MPFR_RNDN);
        mpfr_init(r28273);
        mpfr_init(r28274);
        mpfr_init(r28275);
        mpfr_init(r28276);
        mpfr_init(r28277);
        mpfr_init(r28278);
}

double f_fm(double a, double b) {
        mpfr_set_d(r28261, a, MPFR_RNDN);
        mpfr_mul(r28262, r28261, r28261, MPFR_RNDN);
        mpfr_set_d(r28263, b, MPFR_RNDN);
        mpfr_mul(r28264, r28263, r28263, MPFR_RNDN);
        mpfr_add(r28265, r28262, r28264, MPFR_RNDN);
        ;
        mpfr_pow(r28267, r28265, r28266, MPFR_RNDN);
        ;
        ;
        mpfr_sub(r28270, r28269, r28261, MPFR_RNDN);
        mpfr_mul(r28271, r28262, r28270, MPFR_RNDN);
        ;
        mpfr_add(r28273, r28272, r28261, MPFR_RNDN);
        mpfr_mul(r28274, r28264, r28273, MPFR_RNDN);
        mpfr_add(r28275, r28271, r28274, MPFR_RNDN);
        mpfr_mul(r28276, r28268, r28275, MPFR_RNDN);
        mpfr_add(r28277, r28267, r28276, MPFR_RNDN);
        mpfr_sub(r28278, r28277, r28269, MPFR_RNDN);
        return mpfr_get_d(r28278, MPFR_RNDN);
}

static mpfr_t r28279, r28280, r28281, r28282, r28283, r28284, r28285, r28286, r28287, r28288, r28289, r28290, r28291, r28292, r28293, r28294, r28295, r28296;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r28279);
        mpfr_init(r28280);
        mpfr_init(r28281);
        mpfr_init(r28282);
        mpfr_init(r28283);
        mpfr_init_set_str(r28284, "2", 10, MPFR_RNDN);
        mpfr_init(r28285);
        mpfr_init_set_str(r28286, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r28287, "1", 10, MPFR_RNDN);
        mpfr_init(r28288);
        mpfr_init(r28289);
        mpfr_init_set_str(r28290, "3", 10, MPFR_RNDN);
        mpfr_init(r28291);
        mpfr_init(r28292);
        mpfr_init(r28293);
        mpfr_init(r28294);
        mpfr_init(r28295);
        mpfr_init(r28296);
}

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

