#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 r11422 = a;
        float r11423 = r11422 * r11422;
        float r11424 = b;
        float r11425 = r11424 * r11424;
        float r11426 = r11423 + r11425;
        float r11427 = 2.0f;
        float r11428 = pow(r11426, r11427);
        float r11429 = 4.0f;
        float r11430 = 1.0f;
        float r11431 = r11430 - r11422;
        float r11432 = r11423 * r11431;
        float r11433 = 3.0f;
        float r11434 = r11433 + r11422;
        float r11435 = r11425 * r11434;
        float r11436 = r11432 + r11435;
        float r11437 = r11429 * r11436;
        float r11438 = r11428 + r11437;
        float r11439 = r11438 - r11430;
        return r11439;
}

double f_id(double a, double b) {
        double r11440 = a;
        double r11441 = r11440 * r11440;
        double r11442 = b;
        double r11443 = r11442 * r11442;
        double r11444 = r11441 + r11443;
        double r11445 = 2.0;
        double r11446 = pow(r11444, r11445);
        double r11447 = 4.0;
        double r11448 = 1.0;
        double r11449 = r11448 - r11440;
        double r11450 = r11441 * r11449;
        double r11451 = 3.0;
        double r11452 = r11451 + r11440;
        double r11453 = r11443 * r11452;
        double r11454 = r11450 + r11453;
        double r11455 = r11447 * r11454;
        double r11456 = r11446 + r11455;
        double r11457 = r11456 - r11448;
        return r11457;
}


double f_of(float a, float b) {
        float r11458 = b;
        float r11459 = a;
        float r11460 = r11459 * r11459;
        float r11461 = fma(r11458, r11458, r11460);
        float r11462 = r11458 * r11458;
        float r11463 = r11460 + r11462;
        float r11464 = sqrt(r11463);
        float r11465 = 2.0f;
        float r11466 = pow(r11464, r11465);
        float r11467 = 4.0f;
        float r11468 = 3.0f;
        float r11469 = r11468 + r11459;
        float r11470 = r11469 * r11462;
        float r11471 = 1.0f;
        float r11472 = r11471 - r11459;
        float r11473 = r11472 * r11460;
        float r11474 = r11470 + r11473;
        float r11475 = r11467 * r11474;
        float r11476 = fma(r11461, r11466, r11475);
        float r11477 = r11476 - r11471;
        return r11477;
}

double f_od(double a, double b) {
        double r11478 = b;
        double r11479 = a;
        double r11480 = r11479 * r11479;
        double r11481 = fma(r11478, r11478, r11480);
        double r11482 = r11478 * r11478;
        double r11483 = r11480 + r11482;
        double r11484 = sqrt(r11483);
        double r11485 = 2.0;
        double r11486 = pow(r11484, r11485);
        double r11487 = 4.0;
        double r11488 = 3.0;
        double r11489 = r11488 + r11479;
        double r11490 = r11489 * r11482;
        double r11491 = 1.0;
        double r11492 = r11491 - r11479;
        double r11493 = r11492 * r11480;
        double r11494 = r11490 + r11493;
        double r11495 = r11487 * r11494;
        double r11496 = fma(r11481, r11486, r11495);
        double r11497 = r11496 - r11491;
        return r11497;
}

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 r11498, r11499, r11500, r11501, r11502, r11503, r11504, r11505, r11506, r11507, r11508, r11509, r11510, r11511, r11512, r11513, r11514, r11515;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r11498);
        mpfr_init(r11499);
        mpfr_init(r11500);
        mpfr_init(r11501);
        mpfr_init(r11502);
        mpfr_init_set_str(r11503, "2", 10, MPFR_RNDN);
        mpfr_init(r11504);
        mpfr_init_set_str(r11505, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r11506, "1", 10, MPFR_RNDN);
        mpfr_init(r11507);
        mpfr_init(r11508);
        mpfr_init_set_str(r11509, "3", 10, MPFR_RNDN);
        mpfr_init(r11510);
        mpfr_init(r11511);
        mpfr_init(r11512);
        mpfr_init(r11513);
        mpfr_init(r11514);
        mpfr_init(r11515);
}

double f_im(double a, double b) {
        mpfr_set_d(r11498, a, MPFR_RNDN);
        mpfr_mul(r11499, r11498, r11498, MPFR_RNDN);
        mpfr_set_d(r11500, b, MPFR_RNDN);
        mpfr_mul(r11501, r11500, r11500, MPFR_RNDN);
        mpfr_add(r11502, r11499, r11501, MPFR_RNDN);
        ;
        mpfr_pow(r11504, r11502, r11503, MPFR_RNDN);
        ;
        ;
        mpfr_sub(r11507, r11506, r11498, MPFR_RNDN);
        mpfr_mul(r11508, r11499, r11507, MPFR_RNDN);
        ;
        mpfr_add(r11510, r11509, r11498, MPFR_RNDN);
        mpfr_mul(r11511, r11501, r11510, MPFR_RNDN);
        mpfr_add(r11512, r11508, r11511, MPFR_RNDN);
        mpfr_mul(r11513, r11505, r11512, MPFR_RNDN);
        mpfr_add(r11514, r11504, r11513, MPFR_RNDN);
        mpfr_sub(r11515, r11514, r11506, MPFR_RNDN);
        return mpfr_get_d(r11515, MPFR_RNDN);
}

static mpfr_t r11516, r11517, r11518, r11519, r11520, r11521, r11522, r11523, r11524, r11525, r11526, r11527, r11528, r11529, r11530, r11531, r11532, r11533, r11534, r11535;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11516);
        mpfr_init(r11517);
        mpfr_init(r11518);
        mpfr_init(r11519);
        mpfr_init(r11520);
        mpfr_init(r11521);
        mpfr_init(r11522);
        mpfr_init_set_str(r11523, "2", 10, MPFR_RNDN);
        mpfr_init(r11524);
        mpfr_init_set_str(r11525, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r11526, "3", 10, MPFR_RNDN);
        mpfr_init(r11527);
        mpfr_init(r11528);
        mpfr_init_set_str(r11529, "1", 10, MPFR_RNDN);
        mpfr_init(r11530);
        mpfr_init(r11531);
        mpfr_init(r11532);
        mpfr_init(r11533);
        mpfr_init(r11534);
        mpfr_init(r11535);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11516, b, MPFR_RNDN);
        mpfr_set_d(r11517, a, MPFR_RNDN);
        mpfr_mul(r11518, r11517, r11517, MPFR_RNDN);
        mpfr_fma(r11519, r11516, r11516, r11518, MPFR_RNDN);
        mpfr_mul(r11520, r11516, r11516, MPFR_RNDN);
        mpfr_add(r11521, r11518, r11520, MPFR_RNDN);
        mpfr_sqrt(r11522, r11521, MPFR_RNDN);
        ;
        mpfr_pow(r11524, r11522, r11523, MPFR_RNDN);
        ;
        ;
        mpfr_add(r11527, r11526, r11517, MPFR_RNDN);
        mpfr_mul(r11528, r11527, r11520, MPFR_RNDN);
        ;
        mpfr_sub(r11530, r11529, r11517, MPFR_RNDN);
        mpfr_mul(r11531, r11530, r11518, MPFR_RNDN);
        mpfr_add(r11532, r11528, r11531, MPFR_RNDN);
        mpfr_mul(r11533, r11525, r11532, MPFR_RNDN);
        mpfr_fma(r11534, r11519, r11524, r11533, MPFR_RNDN);
        mpfr_sub(r11535, r11534, r11529, MPFR_RNDN);
        return mpfr_get_d(r11535, MPFR_RNDN);
}

static mpfr_t r11536, r11537, r11538, r11539, r11540, r11541, r11542, r11543, r11544, r11545, r11546, r11547, r11548, r11549, r11550, r11551, r11552, r11553, r11554, r11555;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11536);
        mpfr_init(r11537);
        mpfr_init(r11538);
        mpfr_init(r11539);
        mpfr_init(r11540);
        mpfr_init(r11541);
        mpfr_init(r11542);
        mpfr_init_set_str(r11543, "2", 10, MPFR_RNDN);
        mpfr_init(r11544);
        mpfr_init_set_str(r11545, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r11546, "3", 10, MPFR_RNDN);
        mpfr_init(r11547);
        mpfr_init(r11548);
        mpfr_init_set_str(r11549, "1", 10, MPFR_RNDN);
        mpfr_init(r11550);
        mpfr_init(r11551);
        mpfr_init(r11552);
        mpfr_init(r11553);
        mpfr_init(r11554);
        mpfr_init(r11555);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11536, b, MPFR_RNDN);
        mpfr_set_d(r11537, a, MPFR_RNDN);
        mpfr_mul(r11538, r11537, r11537, MPFR_RNDN);
        mpfr_fma(r11539, r11536, r11536, r11538, MPFR_RNDN);
        mpfr_mul(r11540, r11536, r11536, MPFR_RNDN);
        mpfr_add(r11541, r11538, r11540, MPFR_RNDN);
        mpfr_sqrt(r11542, r11541, MPFR_RNDN);
        ;
        mpfr_pow(r11544, r11542, r11543, MPFR_RNDN);
        ;
        ;
        mpfr_add(r11547, r11546, r11537, MPFR_RNDN);
        mpfr_mul(r11548, r11547, r11540, MPFR_RNDN);
        ;
        mpfr_sub(r11550, r11549, r11537, MPFR_RNDN);
        mpfr_mul(r11551, r11550, r11538, MPFR_RNDN);
        mpfr_add(r11552, r11548, r11551, MPFR_RNDN);
        mpfr_mul(r11553, r11545, r11552, MPFR_RNDN);
        mpfr_fma(r11554, r11539, r11544, r11553, MPFR_RNDN);
        mpfr_sub(r11555, r11554, r11549, MPFR_RNDN);
        return mpfr_get_d(r11555, MPFR_RNDN);
}

