#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 r27526 = a;
        float r27527 = r27526 * r27526;
        float r27528 = b;
        float r27529 = r27528 * r27528;
        float r27530 = r27527 + r27529;
        float r27531 = 2;
        float r27532 = pow(r27530, r27531);
        float r27533 = 4;
        float r27534 = 1;
        float r27535 = r27534 + r27526;
        float r27536 = r27527 * r27535;
        float r27537 = 3;
        float r27538 = r27537 * r27526;
        float r27539 = r27534 - r27538;
        float r27540 = r27529 * r27539;
        float r27541 = r27536 + r27540;
        float r27542 = r27533 * r27541;
        float r27543 = r27532 + r27542;
        float r27544 = r27543 - r27534;
        return r27544;
}

double f_id(double a, double b) {
        double r27545 = a;
        double r27546 = r27545 * r27545;
        double r27547 = b;
        double r27548 = r27547 * r27547;
        double r27549 = r27546 + r27548;
        double r27550 = 2;
        double r27551 = pow(r27549, r27550);
        double r27552 = 4;
        double r27553 = 1;
        double r27554 = r27553 + r27545;
        double r27555 = r27546 * r27554;
        double r27556 = 3;
        double r27557 = r27556 * r27545;
        double r27558 = r27553 - r27557;
        double r27559 = r27548 * r27558;
        double r27560 = r27555 + r27559;
        double r27561 = r27552 * r27560;
        double r27562 = r27551 + r27561;
        double r27563 = r27562 - r27553;
        return r27563;
}


double f_of(float a, float b) {
        float r27564 = a;
        float r27565 = b;
        float r27566 = r27565 * r27565;
        float r27567 = fma(r27564, r27564, r27566);
        float r27568 = hypot(r27565, r27564);
        float r27569 = r27567 * r27568;
        float r27570 = r27564 * r27564;
        float r27571 = fma(r27565, r27565, r27570);
        float r27572 = sqrt(r27571);
        float r27573 = r27569 * r27572;
        float r27574 = 4;
        float r27575 = 1;
        float r27576 = r27575 + r27564;
        float r27577 = r27570 * r27576;
        float r27578 = 3;
        float r27579 = r27578 * r27564;
        float r27580 = r27575 - r27579;
        float r27581 = r27566 * r27580;
        float r27582 = r27577 + r27581;
        float r27583 = r27574 * r27582;
        float r27584 = r27573 + r27583;
        float r27585 = r27584 - r27575;
        return r27585;
}

double f_od(double a, double b) {
        double r27586 = a;
        double r27587 = b;
        double r27588 = r27587 * r27587;
        double r27589 = fma(r27586, r27586, r27588);
        double r27590 = hypot(r27587, r27586);
        double r27591 = r27589 * r27590;
        double r27592 = r27586 * r27586;
        double r27593 = fma(r27587, r27587, r27592);
        double r27594 = sqrt(r27593);
        double r27595 = r27591 * r27594;
        double r27596 = 4;
        double r27597 = 1;
        double r27598 = r27597 + r27586;
        double r27599 = r27592 * r27598;
        double r27600 = 3;
        double r27601 = r27600 * r27586;
        double r27602 = r27597 - r27601;
        double r27603 = r27588 * r27602;
        double r27604 = r27599 + r27603;
        double r27605 = r27596 * r27604;
        double r27606 = r27595 + r27605;
        double r27607 = r27606 - r27597;
        return r27607;
}

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 r27608, r27609, r27610, r27611, r27612, r27613, r27614, r27615, r27616, r27617, r27618, r27619, r27620, r27621, r27622, r27623, r27624, r27625, r27626;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27608);
        mpfr_init(r27609);
        mpfr_init(r27610);
        mpfr_init(r27611);
        mpfr_init(r27612);
        mpfr_init_set_str(r27613, "2", 10, MPFR_RNDN);
        mpfr_init(r27614);
        mpfr_init_set_str(r27615, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r27616, "1", 10, MPFR_RNDN);
        mpfr_init(r27617);
        mpfr_init(r27618);
        mpfr_init_set_str(r27619, "3", 10, MPFR_RNDN);
        mpfr_init(r27620);
        mpfr_init(r27621);
        mpfr_init(r27622);
        mpfr_init(r27623);
        mpfr_init(r27624);
        mpfr_init(r27625);
        mpfr_init(r27626);
}

double f_im(double a, double b) {
        mpfr_set_d(r27608, a, MPFR_RNDN);
        mpfr_mul(r27609, r27608, r27608, MPFR_RNDN);
        mpfr_set_d(r27610, b, MPFR_RNDN);
        mpfr_mul(r27611, r27610, r27610, MPFR_RNDN);
        mpfr_add(r27612, r27609, r27611, MPFR_RNDN);
        ;
        mpfr_pow(r27614, r27612, r27613, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27617, r27616, r27608, MPFR_RNDN);
        mpfr_mul(r27618, r27609, r27617, MPFR_RNDN);
        ;
        mpfr_mul(r27620, r27619, r27608, MPFR_RNDN);
        mpfr_sub(r27621, r27616, r27620, MPFR_RNDN);
        mpfr_mul(r27622, r27611, r27621, MPFR_RNDN);
        mpfr_add(r27623, r27618, r27622, MPFR_RNDN);
        mpfr_mul(r27624, r27615, r27623, MPFR_RNDN);
        mpfr_add(r27625, r27614, r27624, MPFR_RNDN);
        mpfr_sub(r27626, r27625, r27616, MPFR_RNDN);
        return mpfr_get_d(r27626, MPFR_RNDN);
}

static mpfr_t r27627, r27628, r27629, r27630, r27631, r27632, r27633, r27634, r27635, r27636, r27637, r27638, r27639, r27640, r27641, r27642, r27643, r27644, r27645, r27646, r27647, r27648;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27627);
        mpfr_init(r27628);
        mpfr_init(r27629);
        mpfr_init(r27630);
        mpfr_init(r27631);
        mpfr_init(r27632);
        mpfr_init(r27633);
        mpfr_init(r27634);
        mpfr_init(r27635);
        mpfr_init(r27636);
        mpfr_init_set_str(r27637, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r27638, "1", 10, MPFR_RNDN);
        mpfr_init(r27639);
        mpfr_init(r27640);
        mpfr_init_set_str(r27641, "3", 10, MPFR_RNDN);
        mpfr_init(r27642);
        mpfr_init(r27643);
        mpfr_init(r27644);
        mpfr_init(r27645);
        mpfr_init(r27646);
        mpfr_init(r27647);
        mpfr_init(r27648);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27627, a, MPFR_RNDN);
        mpfr_set_d(r27628, b, MPFR_RNDN);
        mpfr_mul(r27629, r27628, r27628, MPFR_RNDN);
        mpfr_fma(r27630, r27627, r27627, r27629, MPFR_RNDN);
        mpfr_hypot(r27631, r27628, r27627, MPFR_RNDN);
        mpfr_mul(r27632, r27630, r27631, MPFR_RNDN);
        mpfr_mul(r27633, r27627, r27627, MPFR_RNDN);
        mpfr_fma(r27634, r27628, r27628, r27633, MPFR_RNDN);
        mpfr_sqrt(r27635, r27634, MPFR_RNDN);
        mpfr_mul(r27636, r27632, r27635, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27639, r27638, r27627, MPFR_RNDN);
        mpfr_mul(r27640, r27633, r27639, MPFR_RNDN);
        ;
        mpfr_mul(r27642, r27641, r27627, MPFR_RNDN);
        mpfr_sub(r27643, r27638, r27642, MPFR_RNDN);
        mpfr_mul(r27644, r27629, r27643, MPFR_RNDN);
        mpfr_add(r27645, r27640, r27644, MPFR_RNDN);
        mpfr_mul(r27646, r27637, r27645, MPFR_RNDN);
        mpfr_add(r27647, r27636, r27646, MPFR_RNDN);
        mpfr_sub(r27648, r27647, r27638, MPFR_RNDN);
        return mpfr_get_d(r27648, MPFR_RNDN);
}

static mpfr_t r27649, r27650, r27651, r27652, r27653, r27654, r27655, r27656, r27657, r27658, r27659, r27660, r27661, r27662, r27663, r27664, r27665, r27666, r27667, r27668, r27669, r27670;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27649);
        mpfr_init(r27650);
        mpfr_init(r27651);
        mpfr_init(r27652);
        mpfr_init(r27653);
        mpfr_init(r27654);
        mpfr_init(r27655);
        mpfr_init(r27656);
        mpfr_init(r27657);
        mpfr_init(r27658);
        mpfr_init_set_str(r27659, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r27660, "1", 10, MPFR_RNDN);
        mpfr_init(r27661);
        mpfr_init(r27662);
        mpfr_init_set_str(r27663, "3", 10, MPFR_RNDN);
        mpfr_init(r27664);
        mpfr_init(r27665);
        mpfr_init(r27666);
        mpfr_init(r27667);
        mpfr_init(r27668);
        mpfr_init(r27669);
        mpfr_init(r27670);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27649, a, MPFR_RNDN);
        mpfr_set_d(r27650, b, MPFR_RNDN);
        mpfr_mul(r27651, r27650, r27650, MPFR_RNDN);
        mpfr_fma(r27652, r27649, r27649, r27651, MPFR_RNDN);
        mpfr_hypot(r27653, r27650, r27649, MPFR_RNDN);
        mpfr_mul(r27654, r27652, r27653, MPFR_RNDN);
        mpfr_mul(r27655, r27649, r27649, MPFR_RNDN);
        mpfr_fma(r27656, r27650, r27650, r27655, MPFR_RNDN);
        mpfr_sqrt(r27657, r27656, MPFR_RNDN);
        mpfr_mul(r27658, r27654, r27657, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27661, r27660, r27649, MPFR_RNDN);
        mpfr_mul(r27662, r27655, r27661, MPFR_RNDN);
        ;
        mpfr_mul(r27664, r27663, r27649, MPFR_RNDN);
        mpfr_sub(r27665, r27660, r27664, MPFR_RNDN);
        mpfr_mul(r27666, r27651, r27665, MPFR_RNDN);
        mpfr_add(r27667, r27662, r27666, MPFR_RNDN);
        mpfr_mul(r27668, r27659, r27667, MPFR_RNDN);
        mpfr_add(r27669, r27658, r27668, MPFR_RNDN);
        mpfr_sub(r27670, r27669, r27660, MPFR_RNDN);
        return mpfr_get_d(r27670, MPFR_RNDN);
}

