#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 r36389 = a;
        float r36390 = r36389 * r36389;
        float r36391 = b;
        float r36392 = r36391 * r36391;
        float r36393 = r36390 + r36392;
        float r36394 = 2;
        float r36395 = pow(r36393, r36394);
        float r36396 = 4;
        float r36397 = 1;
        float r36398 = r36397 - r36389;
        float r36399 = r36390 * r36398;
        float r36400 = 3;
        float r36401 = r36400 + r36389;
        float r36402 = r36392 * r36401;
        float r36403 = r36399 + r36402;
        float r36404 = r36396 * r36403;
        float r36405 = r36395 + r36404;
        float r36406 = r36405 - r36397;
        return r36406;
}

double f_id(double a, double b) {
        double r36407 = a;
        double r36408 = r36407 * r36407;
        double r36409 = b;
        double r36410 = r36409 * r36409;
        double r36411 = r36408 + r36410;
        double r36412 = 2;
        double r36413 = pow(r36411, r36412);
        double r36414 = 4;
        double r36415 = 1;
        double r36416 = r36415 - r36407;
        double r36417 = r36408 * r36416;
        double r36418 = 3;
        double r36419 = r36418 + r36407;
        double r36420 = r36410 * r36419;
        double r36421 = r36417 + r36420;
        double r36422 = r36414 * r36421;
        double r36423 = r36413 + r36422;
        double r36424 = r36423 - r36415;
        return r36424;
}


double f_of(float a, float b) {
        float r36425 = a;
        float r36426 = r36425 * r36425;
        float r36427 = b;
        float r36428 = r36427 * r36427;
        float r36429 = r36426 + r36428;
        float r36430 = 2;
        float r36431 = pow(r36429, r36430);
        float r36432 = 4;
        float r36433 = 1;
        float r36434 = r36433 - r36425;
        float r36435 = r36426 * r36434;
        float r36436 = 3;
        float r36437 = r36436 + r36425;
        float r36438 = r36428 * r36437;
        float r36439 = r36435 + r36438;
        float r36440 = r36432 * r36439;
        float r36441 = r36431 + r36440;
        float r36442 = sqrt(r36441);
        float r36443 = r36442 * r36442;
        float r36444 = r36443 - r36433;
        return r36444;
}

double f_od(double a, double b) {
        double r36445 = a;
        double r36446 = r36445 * r36445;
        double r36447 = b;
        double r36448 = r36447 * r36447;
        double r36449 = r36446 + r36448;
        double r36450 = 2;
        double r36451 = pow(r36449, r36450);
        double r36452 = 4;
        double r36453 = 1;
        double r36454 = r36453 - r36445;
        double r36455 = r36446 * r36454;
        double r36456 = 3;
        double r36457 = r36456 + r36445;
        double r36458 = r36448 * r36457;
        double r36459 = r36455 + r36458;
        double r36460 = r36452 * r36459;
        double r36461 = r36451 + r36460;
        double r36462 = sqrt(r36461);
        double r36463 = r36462 * r36462;
        double r36464 = r36463 - r36453;
        return r36464;
}

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 r36465, r36466, r36467, r36468, r36469, r36470, r36471, r36472, r36473, r36474, r36475, r36476, r36477, r36478, r36479, r36480, r36481, r36482;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r36465);
        mpfr_init(r36466);
        mpfr_init(r36467);
        mpfr_init(r36468);
        mpfr_init(r36469);
        mpfr_init_set_str(r36470, "2", 10, MPFR_RNDN);
        mpfr_init(r36471);
        mpfr_init_set_str(r36472, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r36473, "1", 10, MPFR_RNDN);
        mpfr_init(r36474);
        mpfr_init(r36475);
        mpfr_init_set_str(r36476, "3", 10, MPFR_RNDN);
        mpfr_init(r36477);
        mpfr_init(r36478);
        mpfr_init(r36479);
        mpfr_init(r36480);
        mpfr_init(r36481);
        mpfr_init(r36482);
}

double f_im(double a, double b) {
        mpfr_set_d(r36465, a, MPFR_RNDN);
        mpfr_mul(r36466, r36465, r36465, MPFR_RNDN);
        mpfr_set_d(r36467, b, MPFR_RNDN);
        mpfr_mul(r36468, r36467, r36467, MPFR_RNDN);
        mpfr_add(r36469, r36466, r36468, MPFR_RNDN);
        ;
        mpfr_pow(r36471, r36469, r36470, MPFR_RNDN);
        ;
        ;
        mpfr_sub(r36474, r36473, r36465, MPFR_RNDN);
        mpfr_mul(r36475, r36466, r36474, MPFR_RNDN);
        ;
        mpfr_add(r36477, r36476, r36465, MPFR_RNDN);
        mpfr_mul(r36478, r36468, r36477, MPFR_RNDN);
        mpfr_add(r36479, r36475, r36478, MPFR_RNDN);
        mpfr_mul(r36480, r36472, r36479, MPFR_RNDN);
        mpfr_add(r36481, r36471, r36480, MPFR_RNDN);
        mpfr_sub(r36482, r36481, r36473, MPFR_RNDN);
        return mpfr_get_d(r36482, MPFR_RNDN);
}

static mpfr_t r36483, r36484, r36485, r36486, r36487, r36488, r36489, r36490, r36491, r36492, r36493, r36494, r36495, r36496, r36497, r36498, r36499, r36500, r36501, r36502;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r36483);
        mpfr_init(r36484);
        mpfr_init(r36485);
        mpfr_init(r36486);
        mpfr_init(r36487);
        mpfr_init_set_str(r36488, "2", 10, MPFR_RNDN);
        mpfr_init(r36489);
        mpfr_init_set_str(r36490, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r36491, "1", 10, MPFR_RNDN);
        mpfr_init(r36492);
        mpfr_init(r36493);
        mpfr_init_set_str(r36494, "3", 10, MPFR_RNDN);
        mpfr_init(r36495);
        mpfr_init(r36496);
        mpfr_init(r36497);
        mpfr_init(r36498);
        mpfr_init(r36499);
        mpfr_init(r36500);
        mpfr_init(r36501);
        mpfr_init(r36502);
}

double f_fm(double a, double b) {
        mpfr_set_d(r36483, a, MPFR_RNDN);
        mpfr_mul(r36484, r36483, r36483, MPFR_RNDN);
        mpfr_set_d(r36485, b, MPFR_RNDN);
        mpfr_mul(r36486, r36485, r36485, MPFR_RNDN);
        mpfr_add(r36487, r36484, r36486, MPFR_RNDN);
        ;
        mpfr_pow(r36489, r36487, r36488, MPFR_RNDN);
        ;
        ;
        mpfr_sub(r36492, r36491, r36483, MPFR_RNDN);
        mpfr_mul(r36493, r36484, r36492, MPFR_RNDN);
        ;
        mpfr_add(r36495, r36494, r36483, MPFR_RNDN);
        mpfr_mul(r36496, r36486, r36495, MPFR_RNDN);
        mpfr_add(r36497, r36493, r36496, MPFR_RNDN);
        mpfr_mul(r36498, r36490, r36497, MPFR_RNDN);
        mpfr_add(r36499, r36489, r36498, MPFR_RNDN);
        mpfr_sqrt(r36500, r36499, MPFR_RNDN);
        mpfr_mul(r36501, r36500, r36500, MPFR_RNDN);
        mpfr_sub(r36502, r36501, r36491, MPFR_RNDN);
        return mpfr_get_d(r36502, MPFR_RNDN);
}

static mpfr_t r36503, r36504, r36505, r36506, r36507, r36508, r36509, r36510, r36511, r36512, r36513, r36514, r36515, r36516, r36517, r36518, r36519, r36520, r36521, r36522;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r36503);
        mpfr_init(r36504);
        mpfr_init(r36505);
        mpfr_init(r36506);
        mpfr_init(r36507);
        mpfr_init_set_str(r36508, "2", 10, MPFR_RNDN);
        mpfr_init(r36509);
        mpfr_init_set_str(r36510, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r36511, "1", 10, MPFR_RNDN);
        mpfr_init(r36512);
        mpfr_init(r36513);
        mpfr_init_set_str(r36514, "3", 10, MPFR_RNDN);
        mpfr_init(r36515);
        mpfr_init(r36516);
        mpfr_init(r36517);
        mpfr_init(r36518);
        mpfr_init(r36519);
        mpfr_init(r36520);
        mpfr_init(r36521);
        mpfr_init(r36522);
}

double f_dm(double a, double b) {
        mpfr_set_d(r36503, a, MPFR_RNDN);
        mpfr_mul(r36504, r36503, r36503, MPFR_RNDN);
        mpfr_set_d(r36505, b, MPFR_RNDN);
        mpfr_mul(r36506, r36505, r36505, MPFR_RNDN);
        mpfr_add(r36507, r36504, r36506, MPFR_RNDN);
        ;
        mpfr_pow(r36509, r36507, r36508, MPFR_RNDN);
        ;
        ;
        mpfr_sub(r36512, r36511, r36503, MPFR_RNDN);
        mpfr_mul(r36513, r36504, r36512, MPFR_RNDN);
        ;
        mpfr_add(r36515, r36514, r36503, MPFR_RNDN);
        mpfr_mul(r36516, r36506, r36515, MPFR_RNDN);
        mpfr_add(r36517, r36513, r36516, MPFR_RNDN);
        mpfr_mul(r36518, r36510, r36517, MPFR_RNDN);
        mpfr_add(r36519, r36509, r36518, MPFR_RNDN);
        mpfr_sqrt(r36520, r36519, MPFR_RNDN);
        mpfr_mul(r36521, r36520, r36520, MPFR_RNDN);
        mpfr_sub(r36522, r36521, r36511, MPFR_RNDN);
        return mpfr_get_d(r36522, MPFR_RNDN);
}

