#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 r10520 = a;
        float r10521 = r10520 * r10520;
        float r10522 = b;
        float r10523 = r10522 * r10522;
        float r10524 = r10521 + r10523;
        float r10525 = 2.0f;
        float r10526 = pow(r10524, r10525);
        float r10527 = 4.0f;
        float r10528 = r10527 * r10523;
        float r10529 = r10526 + r10528;
        float r10530 = 1.0f;
        float r10531 = r10529 - r10530;
        return r10531;
}

double f_id(double a, double b) {
        double r10532 = a;
        double r10533 = r10532 * r10532;
        double r10534 = b;
        double r10535 = r10534 * r10534;
        double r10536 = r10533 + r10535;
        double r10537 = 2.0;
        double r10538 = pow(r10536, r10537);
        double r10539 = 4.0;
        double r10540 = r10539 * r10535;
        double r10541 = r10538 + r10540;
        double r10542 = 1.0;
        double r10543 = r10541 - r10542;
        return r10543;
}


double f_of(float a, float b) {
        float r10544 = b;
        float r10545 = r10544 * r10544;
        float r10546 = 4.0f;
        float r10547 = r10545 * r10546;
        float r10548 = a;
        float r10549 = r10548 * r10548;
        float r10550 = r10549 + r10545;
        float r10551 = 2.0f;
        float r10552 = pow(r10550, r10551);
        float r10553 = r10547 + r10552;
        float r10554 = 1.0f;
        float r10555 = r10553 - r10554;
        return r10555;
}

double f_od(double a, double b) {
        double r10556 = b;
        double r10557 = r10556 * r10556;
        double r10558 = 4.0;
        double r10559 = r10557 * r10558;
        double r10560 = a;
        double r10561 = r10560 * r10560;
        double r10562 = r10561 + r10557;
        double r10563 = 2.0;
        double r10564 = pow(r10562, r10563);
        double r10565 = r10559 + r10564;
        double r10566 = 1.0;
        double r10567 = r10565 - r10566;
        return r10567;
}

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 r10568, r10569, r10570, r10571, r10572, r10573, r10574, r10575, r10576, r10577, r10578, r10579;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10568);
        mpfr_init(r10569);
        mpfr_init(r10570);
        mpfr_init(r10571);
        mpfr_init(r10572);
        mpfr_init_set_str(r10573, "2", 10, MPFR_RNDN);
        mpfr_init(r10574);
        mpfr_init_set_str(r10575, "4", 10, MPFR_RNDN);
        mpfr_init(r10576);
        mpfr_init(r10577);
        mpfr_init_set_str(r10578, "1", 10, MPFR_RNDN);
        mpfr_init(r10579);
}

double f_im(double a, double b) {
        mpfr_set_d(r10568, a, MPFR_RNDN);
        mpfr_mul(r10569, r10568, r10568, MPFR_RNDN);
        mpfr_set_d(r10570, b, MPFR_RNDN);
        mpfr_mul(r10571, r10570, r10570, MPFR_RNDN);
        mpfr_add(r10572, r10569, r10571, MPFR_RNDN);
        ;
        mpfr_pow(r10574, r10572, r10573, MPFR_RNDN);
        ;
        mpfr_mul(r10576, r10575, r10571, MPFR_RNDN);
        mpfr_add(r10577, r10574, r10576, MPFR_RNDN);
        ;
        mpfr_sub(r10579, r10577, r10578, MPFR_RNDN);
        return mpfr_get_d(r10579, MPFR_RNDN);
}

static mpfr_t r10580, r10581, r10582, r10583, r10584, r10585, r10586, r10587, r10588, r10589, r10590, r10591;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10580);
        mpfr_init(r10581);
        mpfr_init_set_str(r10582, "4", 10, MPFR_RNDN);
        mpfr_init(r10583);
        mpfr_init(r10584);
        mpfr_init(r10585);
        mpfr_init(r10586);
        mpfr_init_set_str(r10587, "2", 10, MPFR_RNDN);
        mpfr_init(r10588);
        mpfr_init(r10589);
        mpfr_init_set_str(r10590, "1", 10, MPFR_RNDN);
        mpfr_init(r10591);
}

double f_fm(double a, double b) {
        mpfr_set_d(r10580, b, MPFR_RNDN);
        mpfr_mul(r10581, r10580, r10580, MPFR_RNDN);
        ;
        mpfr_mul(r10583, r10581, r10582, MPFR_RNDN);
        mpfr_set_d(r10584, a, MPFR_RNDN);
        mpfr_mul(r10585, r10584, r10584, MPFR_RNDN);
        mpfr_add(r10586, r10585, r10581, MPFR_RNDN);
        ;
        mpfr_pow(r10588, r10586, r10587, MPFR_RNDN);
        mpfr_add(r10589, r10583, r10588, MPFR_RNDN);
        ;
        mpfr_sub(r10591, r10589, r10590, MPFR_RNDN);
        return mpfr_get_d(r10591, MPFR_RNDN);
}

static mpfr_t r10592, r10593, r10594, r10595, r10596, r10597, r10598, r10599, r10600, r10601, r10602, r10603;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10592);
        mpfr_init(r10593);
        mpfr_init_set_str(r10594, "4", 10, MPFR_RNDN);
        mpfr_init(r10595);
        mpfr_init(r10596);
        mpfr_init(r10597);
        mpfr_init(r10598);
        mpfr_init_set_str(r10599, "2", 10, MPFR_RNDN);
        mpfr_init(r10600);
        mpfr_init(r10601);
        mpfr_init_set_str(r10602, "1", 10, MPFR_RNDN);
        mpfr_init(r10603);
}

double f_dm(double a, double b) {
        mpfr_set_d(r10592, b, MPFR_RNDN);
        mpfr_mul(r10593, r10592, r10592, MPFR_RNDN);
        ;
        mpfr_mul(r10595, r10593, r10594, MPFR_RNDN);
        mpfr_set_d(r10596, a, MPFR_RNDN);
        mpfr_mul(r10597, r10596, r10596, MPFR_RNDN);
        mpfr_add(r10598, r10597, r10593, MPFR_RNDN);
        ;
        mpfr_pow(r10600, r10598, r10599, MPFR_RNDN);
        mpfr_add(r10601, r10595, r10600, MPFR_RNDN);
        ;
        mpfr_sub(r10603, r10601, r10602, MPFR_RNDN);
        return mpfr_get_d(r10603, MPFR_RNDN);
}

