#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 r11210 = a;
        float r11211 = r11210 * r11210;
        float r11212 = b;
        float r11213 = r11212 * r11212;
        float r11214 = r11211 + r11213;
        float r11215 = 2;
        float r11216 = pow(r11214, r11215);
        float r11217 = 4;
        float r11218 = 1;
        float r11219 = r11218 + r11210;
        float r11220 = r11211 * r11219;
        float r11221 = 3;
        float r11222 = r11221 * r11210;
        float r11223 = r11218 - r11222;
        float r11224 = r11213 * r11223;
        float r11225 = r11220 + r11224;
        float r11226 = r11217 * r11225;
        float r11227 = r11216 + r11226;
        float r11228 = r11227 - r11218;
        return r11228;
}

double f_id(double a, double b) {
        double r11229 = a;
        double r11230 = r11229 * r11229;
        double r11231 = b;
        double r11232 = r11231 * r11231;
        double r11233 = r11230 + r11232;
        double r11234 = 2;
        double r11235 = pow(r11233, r11234);
        double r11236 = 4;
        double r11237 = 1;
        double r11238 = r11237 + r11229;
        double r11239 = r11230 * r11238;
        double r11240 = 3;
        double r11241 = r11240 * r11229;
        double r11242 = r11237 - r11241;
        double r11243 = r11232 * r11242;
        double r11244 = r11239 + r11243;
        double r11245 = r11236 * r11244;
        double r11246 = r11235 + r11245;
        double r11247 = r11246 - r11237;
        return r11247;
}


double f_of(float a, float b) {
        float r11248 = a;
        float r11249 = r11248 * r11248;
        float r11250 = b;
        float r11251 = r11250 * r11250;
        float r11252 = r11249 + r11251;
        float r11253 = 2;
        float r11254 = pow(r11252, r11253);
        float r11255 = 4;
        float r11256 = 1;
        float r11257 = r11256 + r11248;
        float r11258 = r11249 * r11257;
        float r11259 = 3;
        float r11260 = r11259 * r11248;
        float r11261 = r11256 - r11260;
        float r11262 = r11251 * r11261;
        float r11263 = r11258 + r11262;
        float r11264 = r11255 * r11263;
        float r11265 = r11254 + r11264;
        float r11266 = sqrt(r11265);
        float r11267 = r11251 * r11255;
        float r11268 = r11267 * r11261;
        float r11269 = r11255 * r11248;
        float r11270 = r11248 + r11249;
        float r11271 = r11269 * r11270;
        float r11272 = r11268 + r11271;
        float r11273 = r11251 + r11249;
        float r11274 = r11273 * r11273;
        float r11275 = r11272 + r11274;
        float r11276 = cbrt(r11275);
        float r11277 = fabs(r11276);
        float r11278 = cbrt(r11265);
        float r11279 = sqrt(r11278);
        float r11280 = r11277 * r11279;
        float r11281 = r11266 * r11280;
        float r11282 = r11281 - r11256;
        return r11282;
}

double f_od(double a, double b) {
        double r11283 = a;
        double r11284 = r11283 * r11283;
        double r11285 = b;
        double r11286 = r11285 * r11285;
        double r11287 = r11284 + r11286;
        double r11288 = 2;
        double r11289 = pow(r11287, r11288);
        double r11290 = 4;
        double r11291 = 1;
        double r11292 = r11291 + r11283;
        double r11293 = r11284 * r11292;
        double r11294 = 3;
        double r11295 = r11294 * r11283;
        double r11296 = r11291 - r11295;
        double r11297 = r11286 * r11296;
        double r11298 = r11293 + r11297;
        double r11299 = r11290 * r11298;
        double r11300 = r11289 + r11299;
        double r11301 = sqrt(r11300);
        double r11302 = r11286 * r11290;
        double r11303 = r11302 * r11296;
        double r11304 = r11290 * r11283;
        double r11305 = r11283 + r11284;
        double r11306 = r11304 * r11305;
        double r11307 = r11303 + r11306;
        double r11308 = r11286 + r11284;
        double r11309 = r11308 * r11308;
        double r11310 = r11307 + r11309;
        double r11311 = cbrt(r11310);
        double r11312 = fabs(r11311);
        double r11313 = cbrt(r11300);
        double r11314 = sqrt(r11313);
        double r11315 = r11312 * r11314;
        double r11316 = r11301 * r11315;
        double r11317 = r11316 - r11291;
        return r11317;
}

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 r11318, r11319, r11320, r11321, r11322, r11323, r11324, r11325, r11326, r11327, r11328, r11329, r11330, r11331, r11332, r11333, r11334, r11335, r11336;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r11318);
        mpfr_init(r11319);
        mpfr_init(r11320);
        mpfr_init(r11321);
        mpfr_init(r11322);
        mpfr_init_set_str(r11323, "2", 10, MPFR_RNDN);
        mpfr_init(r11324);
        mpfr_init_set_str(r11325, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r11326, "1", 10, MPFR_RNDN);
        mpfr_init(r11327);
        mpfr_init(r11328);
        mpfr_init_set_str(r11329, "3", 10, MPFR_RNDN);
        mpfr_init(r11330);
        mpfr_init(r11331);
        mpfr_init(r11332);
        mpfr_init(r11333);
        mpfr_init(r11334);
        mpfr_init(r11335);
        mpfr_init(r11336);
}

double f_im(double a, double b) {
        mpfr_set_d(r11318, a, MPFR_RNDN);
        mpfr_mul(r11319, r11318, r11318, MPFR_RNDN);
        mpfr_set_d(r11320, b, MPFR_RNDN);
        mpfr_mul(r11321, r11320, r11320, MPFR_RNDN);
        mpfr_add(r11322, r11319, r11321, MPFR_RNDN);
        ;
        mpfr_pow(r11324, r11322, r11323, MPFR_RNDN);
        ;
        ;
        mpfr_add(r11327, r11326, r11318, MPFR_RNDN);
        mpfr_mul(r11328, r11319, r11327, MPFR_RNDN);
        ;
        mpfr_mul(r11330, r11329, r11318, MPFR_RNDN);
        mpfr_sub(r11331, r11326, r11330, MPFR_RNDN);
        mpfr_mul(r11332, r11321, r11331, MPFR_RNDN);
        mpfr_add(r11333, r11328, r11332, MPFR_RNDN);
        mpfr_mul(r11334, r11325, r11333, MPFR_RNDN);
        mpfr_add(r11335, r11324, r11334, MPFR_RNDN);
        mpfr_sub(r11336, r11335, r11326, MPFR_RNDN);
        return mpfr_get_d(r11336, MPFR_RNDN);
}

static mpfr_t r11337, r11338, r11339, r11340, r11341, r11342, r11343, r11344, r11345, r11346, r11347, r11348, r11349, r11350, r11351, r11352, r11353, r11354, r11355, r11356, r11357, r11358, r11359, r11360, r11361, r11362, r11363, r11364, r11365, r11366, r11367, r11368, r11369, r11370, r11371;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11337);
        mpfr_init(r11338);
        mpfr_init(r11339);
        mpfr_init(r11340);
        mpfr_init(r11341);
        mpfr_init_set_str(r11342, "2", 10, MPFR_RNDN);
        mpfr_init(r11343);
        mpfr_init_set_str(r11344, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r11345, "1", 10, MPFR_RNDN);
        mpfr_init(r11346);
        mpfr_init(r11347);
        mpfr_init_set_str(r11348, "3", 10, MPFR_RNDN);
        mpfr_init(r11349);
        mpfr_init(r11350);
        mpfr_init(r11351);
        mpfr_init(r11352);
        mpfr_init(r11353);
        mpfr_init(r11354);
        mpfr_init(r11355);
        mpfr_init(r11356);
        mpfr_init(r11357);
        mpfr_init(r11358);
        mpfr_init(r11359);
        mpfr_init(r11360);
        mpfr_init(r11361);
        mpfr_init(r11362);
        mpfr_init(r11363);
        mpfr_init(r11364);
        mpfr_init(r11365);
        mpfr_init(r11366);
        mpfr_init(r11367);
        mpfr_init(r11368);
        mpfr_init(r11369);
        mpfr_init(r11370);
        mpfr_init(r11371);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11337, a, MPFR_RNDN);
        mpfr_mul(r11338, r11337, r11337, MPFR_RNDN);
        mpfr_set_d(r11339, b, MPFR_RNDN);
        mpfr_mul(r11340, r11339, r11339, MPFR_RNDN);
        mpfr_add(r11341, r11338, r11340, MPFR_RNDN);
        ;
        mpfr_pow(r11343, r11341, r11342, MPFR_RNDN);
        ;
        ;
        mpfr_add(r11346, r11345, r11337, MPFR_RNDN);
        mpfr_mul(r11347, r11338, r11346, MPFR_RNDN);
        ;
        mpfr_mul(r11349, r11348, r11337, MPFR_RNDN);
        mpfr_sub(r11350, r11345, r11349, MPFR_RNDN);
        mpfr_mul(r11351, r11340, r11350, MPFR_RNDN);
        mpfr_add(r11352, r11347, r11351, MPFR_RNDN);
        mpfr_mul(r11353, r11344, r11352, MPFR_RNDN);
        mpfr_add(r11354, r11343, r11353, MPFR_RNDN);
        mpfr_sqrt(r11355, r11354, MPFR_RNDN);
        mpfr_mul(r11356, r11340, r11344, MPFR_RNDN);
        mpfr_mul(r11357, r11356, r11350, MPFR_RNDN);
        mpfr_mul(r11358, r11344, r11337, MPFR_RNDN);
        mpfr_add(r11359, r11337, r11338, MPFR_RNDN);
        mpfr_mul(r11360, r11358, r11359, MPFR_RNDN);
        mpfr_add(r11361, r11357, r11360, MPFR_RNDN);
        mpfr_add(r11362, r11340, r11338, MPFR_RNDN);
        mpfr_mul(r11363, r11362, r11362, MPFR_RNDN);
        mpfr_add(r11364, r11361, r11363, MPFR_RNDN);
        mpfr_cbrt(r11365, r11364, MPFR_RNDN);
        mpfr_abs(r11366, r11365, MPFR_RNDN);
        mpfr_cbrt(r11367, r11354, MPFR_RNDN);
        mpfr_sqrt(r11368, r11367, MPFR_RNDN);
        mpfr_mul(r11369, r11366, r11368, MPFR_RNDN);
        mpfr_mul(r11370, r11355, r11369, MPFR_RNDN);
        mpfr_sub(r11371, r11370, r11345, MPFR_RNDN);
        return mpfr_get_d(r11371, MPFR_RNDN);
}

static mpfr_t r11372, r11373, r11374, r11375, r11376, r11377, r11378, r11379, r11380, r11381, r11382, r11383, r11384, r11385, r11386, r11387, r11388, r11389, r11390, r11391, r11392, r11393, r11394, r11395, r11396, r11397, r11398, r11399, r11400, r11401, r11402, r11403, r11404, r11405, r11406;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11372);
        mpfr_init(r11373);
        mpfr_init(r11374);
        mpfr_init(r11375);
        mpfr_init(r11376);
        mpfr_init_set_str(r11377, "2", 10, MPFR_RNDN);
        mpfr_init(r11378);
        mpfr_init_set_str(r11379, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r11380, "1", 10, MPFR_RNDN);
        mpfr_init(r11381);
        mpfr_init(r11382);
        mpfr_init_set_str(r11383, "3", 10, MPFR_RNDN);
        mpfr_init(r11384);
        mpfr_init(r11385);
        mpfr_init(r11386);
        mpfr_init(r11387);
        mpfr_init(r11388);
        mpfr_init(r11389);
        mpfr_init(r11390);
        mpfr_init(r11391);
        mpfr_init(r11392);
        mpfr_init(r11393);
        mpfr_init(r11394);
        mpfr_init(r11395);
        mpfr_init(r11396);
        mpfr_init(r11397);
        mpfr_init(r11398);
        mpfr_init(r11399);
        mpfr_init(r11400);
        mpfr_init(r11401);
        mpfr_init(r11402);
        mpfr_init(r11403);
        mpfr_init(r11404);
        mpfr_init(r11405);
        mpfr_init(r11406);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11372, a, MPFR_RNDN);
        mpfr_mul(r11373, r11372, r11372, MPFR_RNDN);
        mpfr_set_d(r11374, b, MPFR_RNDN);
        mpfr_mul(r11375, r11374, r11374, MPFR_RNDN);
        mpfr_add(r11376, r11373, r11375, MPFR_RNDN);
        ;
        mpfr_pow(r11378, r11376, r11377, MPFR_RNDN);
        ;
        ;
        mpfr_add(r11381, r11380, r11372, MPFR_RNDN);
        mpfr_mul(r11382, r11373, r11381, MPFR_RNDN);
        ;
        mpfr_mul(r11384, r11383, r11372, MPFR_RNDN);
        mpfr_sub(r11385, r11380, r11384, MPFR_RNDN);
        mpfr_mul(r11386, r11375, r11385, MPFR_RNDN);
        mpfr_add(r11387, r11382, r11386, MPFR_RNDN);
        mpfr_mul(r11388, r11379, r11387, MPFR_RNDN);
        mpfr_add(r11389, r11378, r11388, MPFR_RNDN);
        mpfr_sqrt(r11390, r11389, MPFR_RNDN);
        mpfr_mul(r11391, r11375, r11379, MPFR_RNDN);
        mpfr_mul(r11392, r11391, r11385, MPFR_RNDN);
        mpfr_mul(r11393, r11379, r11372, MPFR_RNDN);
        mpfr_add(r11394, r11372, r11373, MPFR_RNDN);
        mpfr_mul(r11395, r11393, r11394, MPFR_RNDN);
        mpfr_add(r11396, r11392, r11395, MPFR_RNDN);
        mpfr_add(r11397, r11375, r11373, MPFR_RNDN);
        mpfr_mul(r11398, r11397, r11397, MPFR_RNDN);
        mpfr_add(r11399, r11396, r11398, MPFR_RNDN);
        mpfr_cbrt(r11400, r11399, MPFR_RNDN);
        mpfr_abs(r11401, r11400, MPFR_RNDN);
        mpfr_cbrt(r11402, r11389, MPFR_RNDN);
        mpfr_sqrt(r11403, r11402, MPFR_RNDN);
        mpfr_mul(r11404, r11401, r11403, MPFR_RNDN);
        mpfr_mul(r11405, r11390, r11404, MPFR_RNDN);
        mpfr_sub(r11406, r11405, r11380, MPFR_RNDN);
        return mpfr_get_d(r11406, MPFR_RNDN);
}

