#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 r11495 = a;
        float r11496 = r11495 * r11495;
        float r11497 = b;
        float r11498 = r11497 * r11497;
        float r11499 = r11496 + r11498;
        float r11500 = 2;
        float r11501 = pow(r11499, r11500);
        float r11502 = 4;
        float r11503 = 1;
        float r11504 = r11503 + r11495;
        float r11505 = r11496 * r11504;
        float r11506 = 3;
        float r11507 = r11506 * r11495;
        float r11508 = r11503 - r11507;
        float r11509 = r11498 * r11508;
        float r11510 = r11505 + r11509;
        float r11511 = r11502 * r11510;
        float r11512 = r11501 + r11511;
        float r11513 = r11512 - r11503;
        return r11513;
}

double f_id(double a, double b) {
        double r11514 = a;
        double r11515 = r11514 * r11514;
        double r11516 = b;
        double r11517 = r11516 * r11516;
        double r11518 = r11515 + r11517;
        double r11519 = 2;
        double r11520 = pow(r11518, r11519);
        double r11521 = 4;
        double r11522 = 1;
        double r11523 = r11522 + r11514;
        double r11524 = r11515 * r11523;
        double r11525 = 3;
        double r11526 = r11525 * r11514;
        double r11527 = r11522 - r11526;
        double r11528 = r11517 * r11527;
        double r11529 = r11524 + r11528;
        double r11530 = r11521 * r11529;
        double r11531 = r11520 + r11530;
        double r11532 = r11531 - r11522;
        return r11532;
}


double f_of(float a, float b) {
        float r11533 = a;
        float r11534 = r11533 * r11533;
        float r11535 = b;
        float r11536 = r11535 * r11535;
        float r11537 = r11534 + r11536;
        float r11538 = 2;
        float r11539 = pow(r11537, r11538);
        float r11540 = 4;
        float r11541 = 1;
        float r11542 = r11541 + r11533;
        float r11543 = r11534 * r11542;
        float r11544 = 3;
        float r11545 = r11544 * r11533;
        float r11546 = r11541 - r11545;
        float r11547 = r11536 * r11546;
        float r11548 = r11543 + r11547;
        float r11549 = r11540 * r11548;
        float r11550 = r11539 + r11549;
        float r11551 = sqrt(r11550);
        float r11552 = r11536 * r11540;
        float r11553 = r11552 * r11546;
        float r11554 = r11540 * r11533;
        float r11555 = r11533 + r11534;
        float r11556 = r11554 * r11555;
        float r11557 = r11553 + r11556;
        float r11558 = pow(r11533, r11540);
        float r11559 = pow(r11535, r11540);
        float r11560 = pow(r11533, r11538);
        float r11561 = pow(r11535, r11538);
        float r11562 = r11560 * r11561;
        float r11563 = r11538 * r11562;
        float r11564 = r11559 + r11563;
        float r11565 = r11558 + r11564;
        float r11566 = r11557 + r11565;
        float r11567 = cbrt(r11566);
        float r11568 = fabs(r11567);
        float r11569 = cbrt(r11550);
        float r11570 = sqrt(r11569);
        float r11571 = r11568 * r11570;
        float r11572 = r11551 * r11571;
        float r11573 = r11572 - r11541;
        return r11573;
}

double f_od(double a, double b) {
        double r11574 = a;
        double r11575 = r11574 * r11574;
        double r11576 = b;
        double r11577 = r11576 * r11576;
        double r11578 = r11575 + r11577;
        double r11579 = 2;
        double r11580 = pow(r11578, r11579);
        double r11581 = 4;
        double r11582 = 1;
        double r11583 = r11582 + r11574;
        double r11584 = r11575 * r11583;
        double r11585 = 3;
        double r11586 = r11585 * r11574;
        double r11587 = r11582 - r11586;
        double r11588 = r11577 * r11587;
        double r11589 = r11584 + r11588;
        double r11590 = r11581 * r11589;
        double r11591 = r11580 + r11590;
        double r11592 = sqrt(r11591);
        double r11593 = r11577 * r11581;
        double r11594 = r11593 * r11587;
        double r11595 = r11581 * r11574;
        double r11596 = r11574 + r11575;
        double r11597 = r11595 * r11596;
        double r11598 = r11594 + r11597;
        double r11599 = pow(r11574, r11581);
        double r11600 = pow(r11576, r11581);
        double r11601 = pow(r11574, r11579);
        double r11602 = pow(r11576, r11579);
        double r11603 = r11601 * r11602;
        double r11604 = r11579 * r11603;
        double r11605 = r11600 + r11604;
        double r11606 = r11599 + r11605;
        double r11607 = r11598 + r11606;
        double r11608 = cbrt(r11607);
        double r11609 = fabs(r11608);
        double r11610 = cbrt(r11591);
        double r11611 = sqrt(r11610);
        double r11612 = r11609 * r11611;
        double r11613 = r11592 * r11612;
        double r11614 = r11613 - r11582;
        return r11614;
}

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 r11615, r11616, r11617, r11618, r11619, r11620, r11621, r11622, r11623, r11624, r11625, r11626, r11627, r11628, r11629, r11630, r11631, r11632, r11633;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r11615);
        mpfr_init(r11616);
        mpfr_init(r11617);
        mpfr_init(r11618);
        mpfr_init(r11619);
        mpfr_init_set_str(r11620, "2", 10, MPFR_RNDN);
        mpfr_init(r11621);
        mpfr_init_set_str(r11622, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r11623, "1", 10, MPFR_RNDN);
        mpfr_init(r11624);
        mpfr_init(r11625);
        mpfr_init_set_str(r11626, "3", 10, MPFR_RNDN);
        mpfr_init(r11627);
        mpfr_init(r11628);
        mpfr_init(r11629);
        mpfr_init(r11630);
        mpfr_init(r11631);
        mpfr_init(r11632);
        mpfr_init(r11633);
}

double f_im(double a, double b) {
        mpfr_set_d(r11615, a, MPFR_RNDN);
        mpfr_mul(r11616, r11615, r11615, MPFR_RNDN);
        mpfr_set_d(r11617, b, MPFR_RNDN);
        mpfr_mul(r11618, r11617, r11617, MPFR_RNDN);
        mpfr_add(r11619, r11616, r11618, MPFR_RNDN);
        ;
        mpfr_pow(r11621, r11619, r11620, MPFR_RNDN);
        ;
        ;
        mpfr_add(r11624, r11623, r11615, MPFR_RNDN);
        mpfr_mul(r11625, r11616, r11624, MPFR_RNDN);
        ;
        mpfr_mul(r11627, r11626, r11615, MPFR_RNDN);
        mpfr_sub(r11628, r11623, r11627, MPFR_RNDN);
        mpfr_mul(r11629, r11618, r11628, MPFR_RNDN);
        mpfr_add(r11630, r11625, r11629, MPFR_RNDN);
        mpfr_mul(r11631, r11622, r11630, MPFR_RNDN);
        mpfr_add(r11632, r11621, r11631, MPFR_RNDN);
        mpfr_sub(r11633, r11632, r11623, MPFR_RNDN);
        return mpfr_get_d(r11633, MPFR_RNDN);
}

static mpfr_t r11634, r11635, r11636, r11637, r11638, r11639, r11640, r11641, r11642, r11643, r11644, r11645, r11646, r11647, r11648, r11649, r11650, r11651, r11652, r11653, r11654, r11655, r11656, r11657, r11658, r11659, r11660, r11661, r11662, r11663, r11664, r11665, r11666, r11667, r11668, r11669, r11670, r11671, r11672, r11673, r11674;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11634);
        mpfr_init(r11635);
        mpfr_init(r11636);
        mpfr_init(r11637);
        mpfr_init(r11638);
        mpfr_init_set_str(r11639, "2", 10, MPFR_RNDN);
        mpfr_init(r11640);
        mpfr_init_set_str(r11641, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r11642, "1", 10, MPFR_RNDN);
        mpfr_init(r11643);
        mpfr_init(r11644);
        mpfr_init_set_str(r11645, "3", 10, MPFR_RNDN);
        mpfr_init(r11646);
        mpfr_init(r11647);
        mpfr_init(r11648);
        mpfr_init(r11649);
        mpfr_init(r11650);
        mpfr_init(r11651);
        mpfr_init(r11652);
        mpfr_init(r11653);
        mpfr_init(r11654);
        mpfr_init(r11655);
        mpfr_init(r11656);
        mpfr_init(r11657);
        mpfr_init(r11658);
        mpfr_init(r11659);
        mpfr_init(r11660);
        mpfr_init(r11661);
        mpfr_init(r11662);
        mpfr_init(r11663);
        mpfr_init(r11664);
        mpfr_init(r11665);
        mpfr_init(r11666);
        mpfr_init(r11667);
        mpfr_init(r11668);
        mpfr_init(r11669);
        mpfr_init(r11670);
        mpfr_init(r11671);
        mpfr_init(r11672);
        mpfr_init(r11673);
        mpfr_init(r11674);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11634, a, MPFR_RNDN);
        mpfr_mul(r11635, r11634, r11634, MPFR_RNDN);
        mpfr_set_d(r11636, b, MPFR_RNDN);
        mpfr_mul(r11637, r11636, r11636, MPFR_RNDN);
        mpfr_add(r11638, r11635, r11637, MPFR_RNDN);
        ;
        mpfr_pow(r11640, r11638, r11639, MPFR_RNDN);
        ;
        ;
        mpfr_add(r11643, r11642, r11634, MPFR_RNDN);
        mpfr_mul(r11644, r11635, r11643, MPFR_RNDN);
        ;
        mpfr_mul(r11646, r11645, r11634, MPFR_RNDN);
        mpfr_sub(r11647, r11642, r11646, MPFR_RNDN);
        mpfr_mul(r11648, r11637, r11647, MPFR_RNDN);
        mpfr_add(r11649, r11644, r11648, MPFR_RNDN);
        mpfr_mul(r11650, r11641, r11649, MPFR_RNDN);
        mpfr_add(r11651, r11640, r11650, MPFR_RNDN);
        mpfr_sqrt(r11652, r11651, MPFR_RNDN);
        mpfr_mul(r11653, r11637, r11641, MPFR_RNDN);
        mpfr_mul(r11654, r11653, r11647, MPFR_RNDN);
        mpfr_mul(r11655, r11641, r11634, MPFR_RNDN);
        mpfr_add(r11656, r11634, r11635, MPFR_RNDN);
        mpfr_mul(r11657, r11655, r11656, MPFR_RNDN);
        mpfr_add(r11658, r11654, r11657, MPFR_RNDN);
        mpfr_pow(r11659, r11634, r11641, MPFR_RNDN);
        mpfr_pow(r11660, r11636, r11641, MPFR_RNDN);
        mpfr_pow(r11661, r11634, r11639, MPFR_RNDN);
        mpfr_pow(r11662, r11636, r11639, MPFR_RNDN);
        mpfr_mul(r11663, r11661, r11662, MPFR_RNDN);
        mpfr_mul(r11664, r11639, r11663, MPFR_RNDN);
        mpfr_add(r11665, r11660, r11664, MPFR_RNDN);
        mpfr_add(r11666, r11659, r11665, MPFR_RNDN);
        mpfr_add(r11667, r11658, r11666, MPFR_RNDN);
        mpfr_cbrt(r11668, r11667, MPFR_RNDN);
        mpfr_abs(r11669, r11668, MPFR_RNDN);
        mpfr_cbrt(r11670, r11651, MPFR_RNDN);
        mpfr_sqrt(r11671, r11670, MPFR_RNDN);
        mpfr_mul(r11672, r11669, r11671, MPFR_RNDN);
        mpfr_mul(r11673, r11652, r11672, MPFR_RNDN);
        mpfr_sub(r11674, r11673, r11642, MPFR_RNDN);
        return mpfr_get_d(r11674, MPFR_RNDN);
}

static mpfr_t r11675, r11676, r11677, r11678, r11679, r11680, r11681, r11682, r11683, r11684, r11685, r11686, r11687, r11688, r11689, r11690, r11691, r11692, r11693, r11694, r11695, r11696, r11697, r11698, r11699, r11700, r11701, r11702, r11703, r11704, r11705, r11706, r11707, r11708, r11709, r11710, r11711, r11712, r11713, r11714, r11715;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r11675);
        mpfr_init(r11676);
        mpfr_init(r11677);
        mpfr_init(r11678);
        mpfr_init(r11679);
        mpfr_init_set_str(r11680, "2", 10, MPFR_RNDN);
        mpfr_init(r11681);
        mpfr_init_set_str(r11682, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r11683, "1", 10, MPFR_RNDN);
        mpfr_init(r11684);
        mpfr_init(r11685);
        mpfr_init_set_str(r11686, "3", 10, MPFR_RNDN);
        mpfr_init(r11687);
        mpfr_init(r11688);
        mpfr_init(r11689);
        mpfr_init(r11690);
        mpfr_init(r11691);
        mpfr_init(r11692);
        mpfr_init(r11693);
        mpfr_init(r11694);
        mpfr_init(r11695);
        mpfr_init(r11696);
        mpfr_init(r11697);
        mpfr_init(r11698);
        mpfr_init(r11699);
        mpfr_init(r11700);
        mpfr_init(r11701);
        mpfr_init(r11702);
        mpfr_init(r11703);
        mpfr_init(r11704);
        mpfr_init(r11705);
        mpfr_init(r11706);
        mpfr_init(r11707);
        mpfr_init(r11708);
        mpfr_init(r11709);
        mpfr_init(r11710);
        mpfr_init(r11711);
        mpfr_init(r11712);
        mpfr_init(r11713);
        mpfr_init(r11714);
        mpfr_init(r11715);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11675, a, MPFR_RNDN);
        mpfr_mul(r11676, r11675, r11675, MPFR_RNDN);
        mpfr_set_d(r11677, b, MPFR_RNDN);
        mpfr_mul(r11678, r11677, r11677, MPFR_RNDN);
        mpfr_add(r11679, r11676, r11678, MPFR_RNDN);
        ;
        mpfr_pow(r11681, r11679, r11680, MPFR_RNDN);
        ;
        ;
        mpfr_add(r11684, r11683, r11675, MPFR_RNDN);
        mpfr_mul(r11685, r11676, r11684, MPFR_RNDN);
        ;
        mpfr_mul(r11687, r11686, r11675, MPFR_RNDN);
        mpfr_sub(r11688, r11683, r11687, MPFR_RNDN);
        mpfr_mul(r11689, r11678, r11688, MPFR_RNDN);
        mpfr_add(r11690, r11685, r11689, MPFR_RNDN);
        mpfr_mul(r11691, r11682, r11690, MPFR_RNDN);
        mpfr_add(r11692, r11681, r11691, MPFR_RNDN);
        mpfr_sqrt(r11693, r11692, MPFR_RNDN);
        mpfr_mul(r11694, r11678, r11682, MPFR_RNDN);
        mpfr_mul(r11695, r11694, r11688, MPFR_RNDN);
        mpfr_mul(r11696, r11682, r11675, MPFR_RNDN);
        mpfr_add(r11697, r11675, r11676, MPFR_RNDN);
        mpfr_mul(r11698, r11696, r11697, MPFR_RNDN);
        mpfr_add(r11699, r11695, r11698, MPFR_RNDN);
        mpfr_pow(r11700, r11675, r11682, MPFR_RNDN);
        mpfr_pow(r11701, r11677, r11682, MPFR_RNDN);
        mpfr_pow(r11702, r11675, r11680, MPFR_RNDN);
        mpfr_pow(r11703, r11677, r11680, MPFR_RNDN);
        mpfr_mul(r11704, r11702, r11703, MPFR_RNDN);
        mpfr_mul(r11705, r11680, r11704, MPFR_RNDN);
        mpfr_add(r11706, r11701, r11705, MPFR_RNDN);
        mpfr_add(r11707, r11700, r11706, MPFR_RNDN);
        mpfr_add(r11708, r11699, r11707, MPFR_RNDN);
        mpfr_cbrt(r11709, r11708, MPFR_RNDN);
        mpfr_abs(r11710, r11709, MPFR_RNDN);
        mpfr_cbrt(r11711, r11692, MPFR_RNDN);
        mpfr_sqrt(r11712, r11711, MPFR_RNDN);
        mpfr_mul(r11713, r11710, r11712, MPFR_RNDN);
        mpfr_mul(r11714, r11693, r11713, MPFR_RNDN);
        mpfr_sub(r11715, r11714, r11683, MPFR_RNDN);
        return mpfr_get_d(r11715, MPFR_RNDN);
}

