#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 r11358 = a;
        float r11359 = r11358 * r11358;
        float r11360 = b;
        float r11361 = r11360 * r11360;
        float r11362 = r11359 + r11361;
        float r11363 = 2.0f;
        float r11364 = pow(r11362, r11363);
        float r11365 = 4.0f;
        float r11366 = r11365 * r11361;
        float r11367 = r11364 + r11366;
        float r11368 = 1.0f;
        float r11369 = r11367 - r11368;
        return r11369;
}

double f_id(double a, double b) {
        double r11370 = a;
        double r11371 = r11370 * r11370;
        double r11372 = b;
        double r11373 = r11372 * r11372;
        double r11374 = r11371 + r11373;
        double r11375 = 2.0;
        double r11376 = pow(r11374, r11375);
        double r11377 = 4.0;
        double r11378 = r11377 * r11373;
        double r11379 = r11376 + r11378;
        double r11380 = 1.0;
        double r11381 = r11379 - r11380;
        return r11381;
}


double f_of(float a, float b) {
        float r11382 = b;
        float r11383 = r11382 * r11382;
        float r11384 = 4.0f;
        float r11385 = r11383 * r11384;
        float r11386 = a;
        float r11387 = r11386 * r11386;
        float r11388 = r11387 + r11383;
        float r11389 = 2.0f;
        float r11390 = pow(r11388, r11389);
        float r11391 = r11385 + r11390;
        float r11392 = 1.0f;
        float r11393 = r11391 - r11392;
        return r11393;
}

double f_od(double a, double b) {
        double r11394 = b;
        double r11395 = r11394 * r11394;
        double r11396 = 4.0;
        double r11397 = r11395 * r11396;
        double r11398 = a;
        double r11399 = r11398 * r11398;
        double r11400 = r11399 + r11395;
        double r11401 = 2.0;
        double r11402 = pow(r11400, r11401);
        double r11403 = r11397 + r11402;
        double r11404 = 1.0;
        double r11405 = r11403 - r11404;
        return r11405;
}

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 r11406, r11407, r11408, r11409, r11410, r11411, r11412, r11413, r11414, r11415, r11416, r11417;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11406);
        mpfr_init(r11407);
        mpfr_init(r11408);
        mpfr_init(r11409);
        mpfr_init(r11410);
        mpfr_init_set_str(r11411, "2", 10, MPFR_RNDN);
        mpfr_init(r11412);
        mpfr_init_set_str(r11413, "4", 10, MPFR_RNDN);
        mpfr_init(r11414);
        mpfr_init(r11415);
        mpfr_init_set_str(r11416, "1", 10, MPFR_RNDN);
        mpfr_init(r11417);
}

double f_im(double a, double b) {
        mpfr_set_d(r11406, a, MPFR_RNDN);
        mpfr_mul(r11407, r11406, r11406, MPFR_RNDN);
        mpfr_set_d(r11408, b, MPFR_RNDN);
        mpfr_mul(r11409, r11408, r11408, MPFR_RNDN);
        mpfr_add(r11410, r11407, r11409, MPFR_RNDN);
        ;
        mpfr_pow(r11412, r11410, r11411, MPFR_RNDN);
        ;
        mpfr_mul(r11414, r11413, r11409, MPFR_RNDN);
        mpfr_add(r11415, r11412, r11414, MPFR_RNDN);
        ;
        mpfr_sub(r11417, r11415, r11416, MPFR_RNDN);
        return mpfr_get_d(r11417, MPFR_RNDN);
}

static mpfr_t r11418, r11419, r11420, r11421, r11422, r11423, r11424, r11425, r11426, r11427, r11428, r11429;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11418);
        mpfr_init(r11419);
        mpfr_init_set_str(r11420, "4", 10, MPFR_RNDN);
        mpfr_init(r11421);
        mpfr_init(r11422);
        mpfr_init(r11423);
        mpfr_init(r11424);
        mpfr_init_set_str(r11425, "2", 10, MPFR_RNDN);
        mpfr_init(r11426);
        mpfr_init(r11427);
        mpfr_init_set_str(r11428, "1", 10, MPFR_RNDN);
        mpfr_init(r11429);
}

double f_fm(double a, double b) {
        mpfr_set_d(r11418, b, MPFR_RNDN);
        mpfr_mul(r11419, r11418, r11418, MPFR_RNDN);
        ;
        mpfr_mul(r11421, r11419, r11420, MPFR_RNDN);
        mpfr_set_d(r11422, a, MPFR_RNDN);
        mpfr_mul(r11423, r11422, r11422, MPFR_RNDN);
        mpfr_add(r11424, r11423, r11419, MPFR_RNDN);
        ;
        mpfr_pow(r11426, r11424, r11425, MPFR_RNDN);
        mpfr_add(r11427, r11421, r11426, MPFR_RNDN);
        ;
        mpfr_sub(r11429, r11427, r11428, MPFR_RNDN);
        return mpfr_get_d(r11429, MPFR_RNDN);
}

static mpfr_t r11430, r11431, r11432, r11433, r11434, r11435, r11436, r11437, r11438, r11439, r11440, r11441;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11430);
        mpfr_init(r11431);
        mpfr_init_set_str(r11432, "4", 10, MPFR_RNDN);
        mpfr_init(r11433);
        mpfr_init(r11434);
        mpfr_init(r11435);
        mpfr_init(r11436);
        mpfr_init_set_str(r11437, "2", 10, MPFR_RNDN);
        mpfr_init(r11438);
        mpfr_init(r11439);
        mpfr_init_set_str(r11440, "1", 10, MPFR_RNDN);
        mpfr_init(r11441);
}

double f_dm(double a, double b) {
        mpfr_set_d(r11430, b, MPFR_RNDN);
        mpfr_mul(r11431, r11430, r11430, MPFR_RNDN);
        ;
        mpfr_mul(r11433, r11431, r11432, MPFR_RNDN);
        mpfr_set_d(r11434, a, MPFR_RNDN);
        mpfr_mul(r11435, r11434, r11434, MPFR_RNDN);
        mpfr_add(r11436, r11435, r11431, MPFR_RNDN);
        ;
        mpfr_pow(r11438, r11436, r11437, MPFR_RNDN);
        mpfr_add(r11439, r11433, r11438, MPFR_RNDN);
        ;
        mpfr_sub(r11441, r11439, r11440, MPFR_RNDN);
        return mpfr_get_d(r11441, MPFR_RNDN);
}

