#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 r27438 = a;
        float r27439 = r27438 * r27438;
        float r27440 = b;
        float r27441 = r27440 * r27440;
        float r27442 = r27439 + r27441;
        float r27443 = 2;
        float r27444 = pow(r27442, r27443);
        float r27445 = 4;
        float r27446 = r27445 * r27441;
        float r27447 = r27444 + r27446;
        float r27448 = 1;
        float r27449 = r27447 - r27448;
        return r27449;
}

double f_id(double a, double b) {
        double r27450 = a;
        double r27451 = r27450 * r27450;
        double r27452 = b;
        double r27453 = r27452 * r27452;
        double r27454 = r27451 + r27453;
        double r27455 = 2;
        double r27456 = pow(r27454, r27455);
        double r27457 = 4;
        double r27458 = r27457 * r27453;
        double r27459 = r27456 + r27458;
        double r27460 = 1;
        double r27461 = r27459 - r27460;
        return r27461;
}


double f_of(float a, float b) {
        float r27462 = b;
        float r27463 = r27462 * r27462;
        float r27464 = a;
        float r27465 = 2;
        float r27466 = r27464 * r27465;
        float r27467 = 4;
        float r27468 = fma(r27466, r27464, r27467);
        float r27469 = pow(r27462, r27467);
        float r27470 = fma(r27463, r27468, r27469);
        float r27471 = pow(r27464, r27467);
        float r27472 = 1;
        float r27473 = r27471 - r27472;
        float r27474 = r27470 + r27473;
        return r27474;
}

double f_od(double a, double b) {
        double r27475 = b;
        double r27476 = r27475 * r27475;
        double r27477 = a;
        double r27478 = 2;
        double r27479 = r27477 * r27478;
        double r27480 = 4;
        double r27481 = fma(r27479, r27477, r27480);
        double r27482 = pow(r27475, r27480);
        double r27483 = fma(r27476, r27481, r27482);
        double r27484 = pow(r27477, r27480);
        double r27485 = 1;
        double r27486 = r27484 - r27485;
        double r27487 = r27483 + r27486;
        return r27487;
}

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 r27488, r27489, r27490, r27491, r27492, r27493, r27494, r27495, r27496, r27497, r27498, r27499;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27488);
        mpfr_init(r27489);
        mpfr_init(r27490);
        mpfr_init(r27491);
        mpfr_init(r27492);
        mpfr_init_set_str(r27493, "2", 10, MPFR_RNDN);
        mpfr_init(r27494);
        mpfr_init_set_str(r27495, "4", 10, MPFR_RNDN);
        mpfr_init(r27496);
        mpfr_init(r27497);
        mpfr_init_set_str(r27498, "1", 10, MPFR_RNDN);
        mpfr_init(r27499);
}

double f_im(double a, double b) {
        mpfr_set_d(r27488, a, MPFR_RNDN);
        mpfr_mul(r27489, r27488, r27488, MPFR_RNDN);
        mpfr_set_d(r27490, b, MPFR_RNDN);
        mpfr_mul(r27491, r27490, r27490, MPFR_RNDN);
        mpfr_add(r27492, r27489, r27491, MPFR_RNDN);
        ;
        mpfr_pow(r27494, r27492, r27493, MPFR_RNDN);
        ;
        mpfr_mul(r27496, r27495, r27491, MPFR_RNDN);
        mpfr_add(r27497, r27494, r27496, MPFR_RNDN);
        ;
        mpfr_sub(r27499, r27497, r27498, MPFR_RNDN);
        return mpfr_get_d(r27499, MPFR_RNDN);
}

static mpfr_t r27500, r27501, r27502, r27503, r27504, r27505, r27506, r27507, r27508, r27509, r27510, r27511, r27512;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27500);
        mpfr_init(r27501);
        mpfr_init(r27502);
        mpfr_init_set_str(r27503, "2", 10, MPFR_RNDN);
        mpfr_init(r27504);
        mpfr_init_set_str(r27505, "4", 10, MPFR_RNDN);
        mpfr_init(r27506);
        mpfr_init(r27507);
        mpfr_init(r27508);
        mpfr_init(r27509);
        mpfr_init_set_str(r27510, "1", 10, MPFR_RNDN);
        mpfr_init(r27511);
        mpfr_init(r27512);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27500, b, MPFR_RNDN);
        mpfr_mul(r27501, r27500, r27500, MPFR_RNDN);
        mpfr_set_d(r27502, a, MPFR_RNDN);
        ;
        mpfr_mul(r27504, r27502, r27503, MPFR_RNDN);
        ;
        mpfr_fma(r27506, r27504, r27502, r27505, MPFR_RNDN);
        mpfr_pow(r27507, r27500, r27505, MPFR_RNDN);
        mpfr_fma(r27508, r27501, r27506, r27507, MPFR_RNDN);
        mpfr_pow(r27509, r27502, r27505, MPFR_RNDN);
        ;
        mpfr_sub(r27511, r27509, r27510, MPFR_RNDN);
        mpfr_add(r27512, r27508, r27511, MPFR_RNDN);
        return mpfr_get_d(r27512, MPFR_RNDN);
}

static mpfr_t r27513, r27514, r27515, r27516, r27517, r27518, r27519, r27520, r27521, r27522, r27523, r27524, r27525;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27513);
        mpfr_init(r27514);
        mpfr_init(r27515);
        mpfr_init_set_str(r27516, "2", 10, MPFR_RNDN);
        mpfr_init(r27517);
        mpfr_init_set_str(r27518, "4", 10, MPFR_RNDN);
        mpfr_init(r27519);
        mpfr_init(r27520);
        mpfr_init(r27521);
        mpfr_init(r27522);
        mpfr_init_set_str(r27523, "1", 10, MPFR_RNDN);
        mpfr_init(r27524);
        mpfr_init(r27525);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27513, b, MPFR_RNDN);
        mpfr_mul(r27514, r27513, r27513, MPFR_RNDN);
        mpfr_set_d(r27515, a, MPFR_RNDN);
        ;
        mpfr_mul(r27517, r27515, r27516, MPFR_RNDN);
        ;
        mpfr_fma(r27519, r27517, r27515, r27518, MPFR_RNDN);
        mpfr_pow(r27520, r27513, r27518, MPFR_RNDN);
        mpfr_fma(r27521, r27514, r27519, r27520, MPFR_RNDN);
        mpfr_pow(r27522, r27515, r27518, MPFR_RNDN);
        ;
        mpfr_sub(r27524, r27522, r27523, MPFR_RNDN);
        mpfr_add(r27525, r27521, r27524, MPFR_RNDN);
        return mpfr_get_d(r27525, MPFR_RNDN);
}

