#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 r36307 = a;
        float r36308 = r36307 * r36307;
        float r36309 = b;
        float r36310 = r36309 * r36309;
        float r36311 = r36308 + r36310;
        float r36312 = 2;
        float r36313 = pow(r36311, r36312);
        float r36314 = 4;
        float r36315 = r36314 * r36310;
        float r36316 = r36313 + r36315;
        float r36317 = 1;
        float r36318 = r36316 - r36317;
        return r36318;
}

double f_id(double a, double b) {
        double r36319 = a;
        double r36320 = r36319 * r36319;
        double r36321 = b;
        double r36322 = r36321 * r36321;
        double r36323 = r36320 + r36322;
        double r36324 = 2;
        double r36325 = pow(r36323, r36324);
        double r36326 = 4;
        double r36327 = r36326 * r36322;
        double r36328 = r36325 + r36327;
        double r36329 = 1;
        double r36330 = r36328 - r36329;
        return r36330;
}


double f_of(float a, float b) {
        float r36331 = a;
        float r36332 = r36331 * r36331;
        float r36333 = b;
        float r36334 = r36333 * r36333;
        float r36335 = r36332 + r36334;
        float r36336 = 2;
        float r36337 = pow(r36335, r36336);
        float r36338 = 4;
        float r36339 = r36338 * r36334;
        float r36340 = r36337 + r36339;
        float r36341 = 1;
        float r36342 = r36340 - r36341;
        return r36342;
}

double f_od(double a, double b) {
        double r36343 = a;
        double r36344 = r36343 * r36343;
        double r36345 = b;
        double r36346 = r36345 * r36345;
        double r36347 = r36344 + r36346;
        double r36348 = 2;
        double r36349 = pow(r36347, r36348);
        double r36350 = 4;
        double r36351 = r36350 * r36346;
        double r36352 = r36349 + r36351;
        double r36353 = 1;
        double r36354 = r36352 - r36353;
        return r36354;
}

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 r36355, r36356, r36357, r36358, r36359, r36360, r36361, r36362, r36363, r36364, r36365, r36366;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r36355);
        mpfr_init(r36356);
        mpfr_init(r36357);
        mpfr_init(r36358);
        mpfr_init(r36359);
        mpfr_init_set_str(r36360, "2", 10, MPFR_RNDN);
        mpfr_init(r36361);
        mpfr_init_set_str(r36362, "4", 10, MPFR_RNDN);
        mpfr_init(r36363);
        mpfr_init(r36364);
        mpfr_init_set_str(r36365, "1", 10, MPFR_RNDN);
        mpfr_init(r36366);
}

double f_im(double a, double b) {
        mpfr_set_d(r36355, a, MPFR_RNDN);
        mpfr_mul(r36356, r36355, r36355, MPFR_RNDN);
        mpfr_set_d(r36357, b, MPFR_RNDN);
        mpfr_mul(r36358, r36357, r36357, MPFR_RNDN);
        mpfr_add(r36359, r36356, r36358, MPFR_RNDN);
        ;
        mpfr_pow(r36361, r36359, r36360, MPFR_RNDN);
        ;
        mpfr_mul(r36363, r36362, r36358, MPFR_RNDN);
        mpfr_add(r36364, r36361, r36363, MPFR_RNDN);
        ;
        mpfr_sub(r36366, r36364, r36365, MPFR_RNDN);
        return mpfr_get_d(r36366, MPFR_RNDN);
}

static mpfr_t r36367, r36368, r36369, r36370, r36371, r36372, r36373, r36374, r36375, r36376, r36377, r36378;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r36367);
        mpfr_init(r36368);
        mpfr_init(r36369);
        mpfr_init(r36370);
        mpfr_init(r36371);
        mpfr_init_set_str(r36372, "2", 10, MPFR_RNDN);
        mpfr_init(r36373);
        mpfr_init_set_str(r36374, "4", 10, MPFR_RNDN);
        mpfr_init(r36375);
        mpfr_init(r36376);
        mpfr_init_set_str(r36377, "1", 10, MPFR_RNDN);
        mpfr_init(r36378);
}

double f_fm(double a, double b) {
        mpfr_set_d(r36367, a, MPFR_RNDN);
        mpfr_mul(r36368, r36367, r36367, MPFR_RNDN);
        mpfr_set_d(r36369, b, MPFR_RNDN);
        mpfr_mul(r36370, r36369, r36369, MPFR_RNDN);
        mpfr_add(r36371, r36368, r36370, MPFR_RNDN);
        ;
        mpfr_pow(r36373, r36371, r36372, MPFR_RNDN);
        ;
        mpfr_mul(r36375, r36374, r36370, MPFR_RNDN);
        mpfr_add(r36376, r36373, r36375, MPFR_RNDN);
        ;
        mpfr_sub(r36378, r36376, r36377, MPFR_RNDN);
        return mpfr_get_d(r36378, MPFR_RNDN);
}

static mpfr_t r36379, r36380, r36381, r36382, r36383, r36384, r36385, r36386, r36387, r36388, r36389, r36390;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r36379);
        mpfr_init(r36380);
        mpfr_init(r36381);
        mpfr_init(r36382);
        mpfr_init(r36383);
        mpfr_init_set_str(r36384, "2", 10, MPFR_RNDN);
        mpfr_init(r36385);
        mpfr_init_set_str(r36386, "4", 10, MPFR_RNDN);
        mpfr_init(r36387);
        mpfr_init(r36388);
        mpfr_init_set_str(r36389, "1", 10, MPFR_RNDN);
        mpfr_init(r36390);
}

double f_dm(double a, double b) {
        mpfr_set_d(r36379, a, MPFR_RNDN);
        mpfr_mul(r36380, r36379, r36379, MPFR_RNDN);
        mpfr_set_d(r36381, b, MPFR_RNDN);
        mpfr_mul(r36382, r36381, r36381, MPFR_RNDN);
        mpfr_add(r36383, r36380, r36382, MPFR_RNDN);
        ;
        mpfr_pow(r36385, r36383, r36384, MPFR_RNDN);
        ;
        mpfr_mul(r36387, r36386, r36382, MPFR_RNDN);
        mpfr_add(r36388, r36385, r36387, MPFR_RNDN);
        ;
        mpfr_sub(r36390, r36388, r36389, MPFR_RNDN);
        return mpfr_get_d(r36390, MPFR_RNDN);
}

