#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 r11411 = a;
        float r11412 = r11411 * r11411;
        float r11413 = b;
        float r11414 = r11413 * r11413;
        float r11415 = r11412 + r11414;
        float r11416 = 2;
        float r11417 = pow(r11415, r11416);
        float r11418 = 4;
        float r11419 = r11418 * r11414;
        float r11420 = r11417 + r11419;
        float r11421 = 1;
        float r11422 = r11420 - r11421;
        return r11422;
}

double f_id(double a, double b) {
        double r11423 = a;
        double r11424 = r11423 * r11423;
        double r11425 = b;
        double r11426 = r11425 * r11425;
        double r11427 = r11424 + r11426;
        double r11428 = 2;
        double r11429 = pow(r11427, r11428);
        double r11430 = 4;
        double r11431 = r11430 * r11426;
        double r11432 = r11429 + r11431;
        double r11433 = 1;
        double r11434 = r11432 - r11433;
        return r11434;
}


double f_of(float a, float b) {
        float r11435 = a;
        float r11436 = r11435 * r11435;
        float r11437 = b;
        float r11438 = r11437 * r11437;
        float r11439 = r11436 + r11438;
        float r11440 = 2;
        float r11441 = pow(r11439, r11440);
        float r11442 = 4;
        float r11443 = r11442 * r11438;
        float r11444 = r11441 + r11443;
        float r11445 = 1;
        float r11446 = r11444 - r11445;
        return r11446;
}

double f_od(double a, double b) {
        double r11447 = a;
        double r11448 = r11447 * r11447;
        double r11449 = b;
        double r11450 = r11449 * r11449;
        double r11451 = r11448 + r11450;
        double r11452 = 2;
        double r11453 = pow(r11451, r11452);
        double r11454 = 4;
        double r11455 = r11454 * r11450;
        double r11456 = r11453 + r11455;
        double r11457 = 1;
        double r11458 = r11456 - r11457;
        return r11458;
}

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 r11459, r11460, r11461, r11462, r11463, r11464, r11465, r11466, r11467, r11468, r11469, r11470;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11459);
        mpfr_init(r11460);
        mpfr_init(r11461);
        mpfr_init(r11462);
        mpfr_init(r11463);
        mpfr_init_set_str(r11464, "2", 10, MPFR_RNDN);
        mpfr_init(r11465);
        mpfr_init_set_str(r11466, "4", 10, MPFR_RNDN);
        mpfr_init(r11467);
        mpfr_init(r11468);
        mpfr_init_set_str(r11469, "1", 10, MPFR_RNDN);
        mpfr_init(r11470);
}

double f_im(double a, double b) {
        mpfr_set_d(r11459, a, MPFR_RNDN);
        mpfr_mul(r11460, r11459, r11459, MPFR_RNDN);
        mpfr_set_d(r11461, b, MPFR_RNDN);
        mpfr_mul(r11462, r11461, r11461, MPFR_RNDN);
        mpfr_add(r11463, r11460, r11462, MPFR_RNDN);
        ;
        mpfr_pow(r11465, r11463, r11464, MPFR_RNDN);
        ;
        mpfr_mul(r11467, r11466, r11462, MPFR_RNDN);
        mpfr_add(r11468, r11465, r11467, MPFR_RNDN);
        ;
        mpfr_sub(r11470, r11468, r11469, MPFR_RNDN);
        return mpfr_get_d(r11470, MPFR_RNDN);
}

static mpfr_t r11471, r11472, r11473, r11474, r11475, r11476, r11477, r11478, r11479, r11480, r11481, r11482;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11471);
        mpfr_init(r11472);
        mpfr_init(r11473);
        mpfr_init(r11474);
        mpfr_init(r11475);
        mpfr_init_set_str(r11476, "2", 10, MPFR_RNDN);
        mpfr_init(r11477);
        mpfr_init_set_str(r11478, "4", 10, MPFR_RNDN);
        mpfr_init(r11479);
        mpfr_init(r11480);
        mpfr_init_set_str(r11481, "1", 10, MPFR_RNDN);
        mpfr_init(r11482);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11471, a, MPFR_RNDN);
        mpfr_mul(r11472, r11471, r11471, MPFR_RNDN);
        mpfr_set_d(r11473, b, MPFR_RNDN);
        mpfr_mul(r11474, r11473, r11473, MPFR_RNDN);
        mpfr_add(r11475, r11472, r11474, MPFR_RNDN);
        ;
        mpfr_pow(r11477, r11475, r11476, MPFR_RNDN);
        ;
        mpfr_mul(r11479, r11478, r11474, MPFR_RNDN);
        mpfr_add(r11480, r11477, r11479, MPFR_RNDN);
        ;
        mpfr_sub(r11482, r11480, r11481, MPFR_RNDN);
        return mpfr_get_d(r11482, MPFR_RNDN);
}

static mpfr_t r11483, r11484, r11485, r11486, r11487, r11488, r11489, r11490, r11491, r11492, r11493, r11494;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11483);
        mpfr_init(r11484);
        mpfr_init(r11485);
        mpfr_init(r11486);
        mpfr_init(r11487);
        mpfr_init_set_str(r11488, "2", 10, MPFR_RNDN);
        mpfr_init(r11489);
        mpfr_init_set_str(r11490, "4", 10, MPFR_RNDN);
        mpfr_init(r11491);
        mpfr_init(r11492);
        mpfr_init_set_str(r11493, "1", 10, MPFR_RNDN);
        mpfr_init(r11494);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11483, a, MPFR_RNDN);
        mpfr_mul(r11484, r11483, r11483, MPFR_RNDN);
        mpfr_set_d(r11485, b, MPFR_RNDN);
        mpfr_mul(r11486, r11485, r11485, MPFR_RNDN);
        mpfr_add(r11487, r11484, r11486, MPFR_RNDN);
        ;
        mpfr_pow(r11489, r11487, r11488, MPFR_RNDN);
        ;
        mpfr_mul(r11491, r11490, r11486, MPFR_RNDN);
        mpfr_add(r11492, r11489, r11491, MPFR_RNDN);
        ;
        mpfr_sub(r11494, r11492, r11493, MPFR_RNDN);
        return mpfr_get_d(r11494, MPFR_RNDN);
}

