#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 r27333 = a;
        float r27334 = r27333 * r27333;
        float r27335 = b;
        float r27336 = r27335 * r27335;
        float r27337 = r27334 + r27336;
        float r27338 = 2;
        float r27339 = pow(r27337, r27338);
        float r27340 = 4;
        float r27341 = r27340 * r27336;
        float r27342 = r27339 + r27341;
        float r27343 = 1;
        float r27344 = r27342 - r27343;
        return r27344;
}

double f_id(double a, double b) {
        double r27345 = a;
        double r27346 = r27345 * r27345;
        double r27347 = b;
        double r27348 = r27347 * r27347;
        double r27349 = r27346 + r27348;
        double r27350 = 2;
        double r27351 = pow(r27349, r27350);
        double r27352 = 4;
        double r27353 = r27352 * r27348;
        double r27354 = r27351 + r27353;
        double r27355 = 1;
        double r27356 = r27354 - r27355;
        return r27356;
}


double f_of(float a, float b) {
        float r27357 = b;
        float r27358 = -118.38282236026332;
        bool r27359 = r27357 <= r27358;
        float r27360 = 2.5969064672601682e-17;
        bool r27361 = r27357 <= r27360;
        float r27362 = !r27361;
        bool r27363 = r27359 || r27362;
        float r27364 = 4;
        float r27365 = pow(r27357, r27364);
        float r27366 = r27357 * r27357;
        float r27367 = r27364 * r27366;
        float r27368 = r27365 + r27367;
        float r27369 = 1;
        float r27370 = r27368 - r27369;
        float r27371 = a;
        float r27372 = pow(r27371, r27364);
        float r27373 = 2;
        float r27374 = pow(r27371, r27373);
        float r27375 = pow(r27357, r27373);
        float r27376 = r27374 * r27375;
        float r27377 = r27376 * r27373;
        float r27378 = r27372 + r27377;
        float r27379 = r27375 * r27364;
        float r27380 = r27378 + r27379;
        float r27381 = r27380 - r27369;
        float r27382 = r27363 ? r27370 : r27381;
        return r27382;
}

double f_od(double a, double b) {
        double r27383 = b;
        double r27384 = -118.38282236026332;
        bool r27385 = r27383 <= r27384;
        double r27386 = 2.5969064672601682e-17;
        bool r27387 = r27383 <= r27386;
        double r27388 = !r27387;
        bool r27389 = r27385 || r27388;
        double r27390 = 4;
        double r27391 = pow(r27383, r27390);
        double r27392 = r27383 * r27383;
        double r27393 = r27390 * r27392;
        double r27394 = r27391 + r27393;
        double r27395 = 1;
        double r27396 = r27394 - r27395;
        double r27397 = a;
        double r27398 = pow(r27397, r27390);
        double r27399 = 2;
        double r27400 = pow(r27397, r27399);
        double r27401 = pow(r27383, r27399);
        double r27402 = r27400 * r27401;
        double r27403 = r27402 * r27399;
        double r27404 = r27398 + r27403;
        double r27405 = r27401 * r27390;
        double r27406 = r27404 + r27405;
        double r27407 = r27406 - r27395;
        double r27408 = r27389 ? r27396 : r27407;
        return r27408;
}

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 r27409, r27410, r27411, r27412, r27413, r27414, r27415, r27416, r27417, r27418, r27419, r27420;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27409);
        mpfr_init(r27410);
        mpfr_init(r27411);
        mpfr_init(r27412);
        mpfr_init(r27413);
        mpfr_init_set_str(r27414, "2", 10, MPFR_RNDN);
        mpfr_init(r27415);
        mpfr_init_set_str(r27416, "4", 10, MPFR_RNDN);
        mpfr_init(r27417);
        mpfr_init(r27418);
        mpfr_init_set_str(r27419, "1", 10, MPFR_RNDN);
        mpfr_init(r27420);
}

double f_im(double a, double b) {
        mpfr_set_d(r27409, a, MPFR_RNDN);
        mpfr_mul(r27410, r27409, r27409, MPFR_RNDN);
        mpfr_set_d(r27411, b, MPFR_RNDN);
        mpfr_mul(r27412, r27411, r27411, MPFR_RNDN);
        mpfr_add(r27413, r27410, r27412, MPFR_RNDN);
        ;
        mpfr_pow(r27415, r27413, r27414, MPFR_RNDN);
        ;
        mpfr_mul(r27417, r27416, r27412, MPFR_RNDN);
        mpfr_add(r27418, r27415, r27417, MPFR_RNDN);
        ;
        mpfr_sub(r27420, r27418, r27419, MPFR_RNDN);
        return mpfr_get_d(r27420, MPFR_RNDN);
}

static mpfr_t r27421, r27422, r27423, r27424, r27425, r27426, r27427, r27428, r27429, r27430, r27431, r27432, r27433, r27434, r27435, r27436, r27437, r27438, r27439, r27440, r27441, r27442, r27443, r27444, r27445, r27446;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27421);
        mpfr_init_set_str(r27422, "-118.38282236026332", 10, MPFR_RNDN);
        mpfr_init(r27423);
        mpfr_init_set_str(r27424, "2.5969064672601682e-17", 10, MPFR_RNDN);
        mpfr_init(r27425);
        mpfr_init(r27426);
        mpfr_init(r27427);
        mpfr_init_set_str(r27428, "4", 10, MPFR_RNDN);
        mpfr_init(r27429);
        mpfr_init(r27430);
        mpfr_init(r27431);
        mpfr_init(r27432);
        mpfr_init_set_str(r27433, "1", 10, MPFR_RNDN);
        mpfr_init(r27434);
        mpfr_init(r27435);
        mpfr_init(r27436);
        mpfr_init_set_str(r27437, "2", 10, MPFR_RNDN);
        mpfr_init(r27438);
        mpfr_init(r27439);
        mpfr_init(r27440);
        mpfr_init(r27441);
        mpfr_init(r27442);
        mpfr_init(r27443);
        mpfr_init(r27444);
        mpfr_init(r27445);
        mpfr_init(r27446);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27421, b, MPFR_RNDN);
        ;
        mpfr_set_si(r27423, mpfr_cmp(r27421, r27422) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27425, mpfr_cmp(r27421, r27424) <= 0, MPFR_RNDN);
        mpfr_set_si(r27426, !mpfr_get_si(r27425, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r27427, mpfr_get_si(r27423, MPFR_RNDN) || mpfr_get_si(r27426, MPFR_RNDN), MPFR_RNDN);
        ;
        mpfr_pow(r27429, r27421, r27428, MPFR_RNDN);
        mpfr_mul(r27430, r27421, r27421, MPFR_RNDN);
        mpfr_mul(r27431, r27428, r27430, MPFR_RNDN);
        mpfr_add(r27432, r27429, r27431, MPFR_RNDN);
        ;
        mpfr_sub(r27434, r27432, r27433, MPFR_RNDN);
        mpfr_set_d(r27435, a, MPFR_RNDN);
        mpfr_pow(r27436, r27435, r27428, MPFR_RNDN);
        ;
        mpfr_pow(r27438, r27435, r27437, MPFR_RNDN);
        mpfr_pow(r27439, r27421, r27437, MPFR_RNDN);
        mpfr_mul(r27440, r27438, r27439, MPFR_RNDN);
        mpfr_mul(r27441, r27440, r27437, MPFR_RNDN);
        mpfr_add(r27442, r27436, r27441, MPFR_RNDN);
        mpfr_mul(r27443, r27439, r27428, MPFR_RNDN);
        mpfr_add(r27444, r27442, r27443, MPFR_RNDN);
        mpfr_sub(r27445, r27444, r27433, MPFR_RNDN);
        if (mpfr_get_si(r27427, MPFR_RNDN)) { mpfr_set(r27446, r27434, MPFR_RNDN); } else { mpfr_set(r27446, r27445, MPFR_RNDN); };
        return mpfr_get_d(r27446, MPFR_RNDN);
}

static mpfr_t r27447, r27448, r27449, r27450, r27451, r27452, r27453, r27454, r27455, r27456, r27457, r27458, r27459, r27460, r27461, r27462, r27463, r27464, r27465, r27466, r27467, r27468, r27469, r27470, r27471, r27472;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27447);
        mpfr_init_set_str(r27448, "-118.38282236026332", 10, MPFR_RNDN);
        mpfr_init(r27449);
        mpfr_init_set_str(r27450, "2.5969064672601682e-17", 10, MPFR_RNDN);
        mpfr_init(r27451);
        mpfr_init(r27452);
        mpfr_init(r27453);
        mpfr_init_set_str(r27454, "4", 10, MPFR_RNDN);
        mpfr_init(r27455);
        mpfr_init(r27456);
        mpfr_init(r27457);
        mpfr_init(r27458);
        mpfr_init_set_str(r27459, "1", 10, MPFR_RNDN);
        mpfr_init(r27460);
        mpfr_init(r27461);
        mpfr_init(r27462);
        mpfr_init_set_str(r27463, "2", 10, MPFR_RNDN);
        mpfr_init(r27464);
        mpfr_init(r27465);
        mpfr_init(r27466);
        mpfr_init(r27467);
        mpfr_init(r27468);
        mpfr_init(r27469);
        mpfr_init(r27470);
        mpfr_init(r27471);
        mpfr_init(r27472);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27447, b, MPFR_RNDN);
        ;
        mpfr_set_si(r27449, mpfr_cmp(r27447, r27448) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27451, mpfr_cmp(r27447, r27450) <= 0, MPFR_RNDN);
        mpfr_set_si(r27452, !mpfr_get_si(r27451, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r27453, mpfr_get_si(r27449, MPFR_RNDN) || mpfr_get_si(r27452, MPFR_RNDN), MPFR_RNDN);
        ;
        mpfr_pow(r27455, r27447, r27454, MPFR_RNDN);
        mpfr_mul(r27456, r27447, r27447, MPFR_RNDN);
        mpfr_mul(r27457, r27454, r27456, MPFR_RNDN);
        mpfr_add(r27458, r27455, r27457, MPFR_RNDN);
        ;
        mpfr_sub(r27460, r27458, r27459, MPFR_RNDN);
        mpfr_set_d(r27461, a, MPFR_RNDN);
        mpfr_pow(r27462, r27461, r27454, MPFR_RNDN);
        ;
        mpfr_pow(r27464, r27461, r27463, MPFR_RNDN);
        mpfr_pow(r27465, r27447, r27463, MPFR_RNDN);
        mpfr_mul(r27466, r27464, r27465, MPFR_RNDN);
        mpfr_mul(r27467, r27466, r27463, MPFR_RNDN);
        mpfr_add(r27468, r27462, r27467, MPFR_RNDN);
        mpfr_mul(r27469, r27465, r27454, MPFR_RNDN);
        mpfr_add(r27470, r27468, r27469, MPFR_RNDN);
        mpfr_sub(r27471, r27470, r27459, MPFR_RNDN);
        if (mpfr_get_si(r27453, MPFR_RNDN)) { mpfr_set(r27472, r27460, MPFR_RNDN); } else { mpfr_set(r27472, r27471, MPFR_RNDN); };
        return mpfr_get_d(r27472, MPFR_RNDN);
}

