#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 r32434 = a;
        float r32435 = r32434 * r32434;
        float r32436 = b;
        float r32437 = r32436 * r32436;
        float r32438 = r32435 + r32437;
        float r32439 = r32438 * r32438;
        float r32440 = 4.0f;
        float r32441 = r32440 * r32437;
        float r32442 = r32439 + r32441;
        float r32443 = 1.0f;
        float r32444 = r32442 - r32443;
        return r32444;
}

double f_id(double a, double b) {
        double r32445 = a;
        double r32446 = r32445 * r32445;
        double r32447 = b;
        double r32448 = r32447 * r32447;
        double r32449 = r32446 + r32448;
        double r32450 = r32449 * r32449;
        double r32451 = 4.0;
        double r32452 = r32451 * r32448;
        double r32453 = r32450 + r32452;
        double r32454 = 1.0;
        double r32455 = r32453 - r32454;
        return r32455;
}


double f_of(float a, float b) {
        float r32456 = 4.0f;
        float r32457 = a;
        float r32458 = r32457 + r32457;
        float r32459 = r32458 * r32457;
        float r32460 = r32456 + r32459;
        float r32461 = b;
        float r32462 = r32461 * r32461;
        float r32463 = r32460 * r32462;
        float r32464 = pow(r32461, r32456);
        float r32465 = 1.0f;
        float r32466 = r32464 - r32465;
        float r32467 = pow(r32457, r32456);
        float r32468 = r32466 + r32467;
        float r32469 = r32463 + r32468;
        return r32469;
}

double f_od(double a, double b) {
        double r32470 = 4.0;
        double r32471 = a;
        double r32472 = r32471 + r32471;
        double r32473 = r32472 * r32471;
        double r32474 = r32470 + r32473;
        double r32475 = b;
        double r32476 = r32475 * r32475;
        double r32477 = r32474 * r32476;
        double r32478 = pow(r32475, r32470);
        double r32479 = 1.0;
        double r32480 = r32478 - r32479;
        double r32481 = pow(r32471, r32470);
        double r32482 = r32480 + r32481;
        double r32483 = r32477 + r32482;
        return r32483;
}

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 r32484, r32485, r32486, r32487, r32488, r32489, r32490, r32491, r32492, r32493, r32494;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r32484);
        mpfr_init(r32485);
        mpfr_init(r32486);
        mpfr_init(r32487);
        mpfr_init(r32488);
        mpfr_init(r32489);
        mpfr_init_set_str(r32490, "4", 10, MPFR_RNDN);
        mpfr_init(r32491);
        mpfr_init(r32492);
        mpfr_init_set_str(r32493, "1", 10, MPFR_RNDN);
        mpfr_init(r32494);
}

double f_im(double a, double b) {
        mpfr_set_d(r32484, a, MPFR_RNDN);
        mpfr_sqr(r32485, r32484, MPFR_RNDN);
        mpfr_set_d(r32486, b, MPFR_RNDN);
        mpfr_sqr(r32487, r32486, MPFR_RNDN);
        mpfr_add(r32488, r32485, r32487, MPFR_RNDN);
        mpfr_sqr(r32489, r32488, MPFR_RNDN);
        ;
        mpfr_mul(r32491, r32490, r32487, MPFR_RNDN);
        mpfr_add(r32492, r32489, r32491, MPFR_RNDN);
        ;
        mpfr_sub(r32494, r32492, r32493, MPFR_RNDN);
        return mpfr_get_d(r32494, MPFR_RNDN);
}

static mpfr_t r32495, r32496, r32497, r32498, r32499, r32500, r32501, r32502, r32503, r32504, r32505, r32506, r32507, r32508;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r32495, "4", 10, MPFR_RNDN);
        mpfr_init(r32496);
        mpfr_init(r32497);
        mpfr_init(r32498);
        mpfr_init(r32499);
        mpfr_init(r32500);
        mpfr_init(r32501);
        mpfr_init(r32502);
        mpfr_init(r32503);
        mpfr_init_set_str(r32504, "1", 10, MPFR_RNDN);
        mpfr_init(r32505);
        mpfr_init(r32506);
        mpfr_init(r32507);
        mpfr_init(r32508);
}

double f_fm(double a, double b) {
        ;
        mpfr_set_d(r32496, a, MPFR_RNDN);
        mpfr_add(r32497, r32496, r32496, MPFR_RNDN);
        mpfr_mul(r32498, r32497, r32496, MPFR_RNDN);
        mpfr_add(r32499, r32495, r32498, MPFR_RNDN);
        mpfr_set_d(r32500, b, MPFR_RNDN);
        mpfr_sqr(r32501, r32500, MPFR_RNDN);
        mpfr_mul(r32502, r32499, r32501, MPFR_RNDN);
        mpfr_pow(r32503, r32500, r32495, MPFR_RNDN);
        ;
        mpfr_sub(r32505, r32503, r32504, MPFR_RNDN);
        mpfr_pow(r32506, r32496, r32495, MPFR_RNDN);
        mpfr_add(r32507, r32505, r32506, MPFR_RNDN);
        mpfr_add(r32508, r32502, r32507, MPFR_RNDN);
        return mpfr_get_d(r32508, MPFR_RNDN);
}

static mpfr_t r32509, r32510, r32511, r32512, r32513, r32514, r32515, r32516, r32517, r32518, r32519, r32520, r32521, r32522;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r32509, "4", 10, MPFR_RNDN);
        mpfr_init(r32510);
        mpfr_init(r32511);
        mpfr_init(r32512);
        mpfr_init(r32513);
        mpfr_init(r32514);
        mpfr_init(r32515);
        mpfr_init(r32516);
        mpfr_init(r32517);
        mpfr_init_set_str(r32518, "1", 10, MPFR_RNDN);
        mpfr_init(r32519);
        mpfr_init(r32520);
        mpfr_init(r32521);
        mpfr_init(r32522);
}

double f_dm(double a, double b) {
        ;
        mpfr_set_d(r32510, a, MPFR_RNDN);
        mpfr_add(r32511, r32510, r32510, MPFR_RNDN);
        mpfr_mul(r32512, r32511, r32510, MPFR_RNDN);
        mpfr_add(r32513, r32509, r32512, MPFR_RNDN);
        mpfr_set_d(r32514, b, MPFR_RNDN);
        mpfr_sqr(r32515, r32514, MPFR_RNDN);
        mpfr_mul(r32516, r32513, r32515, MPFR_RNDN);
        mpfr_pow(r32517, r32514, r32509, MPFR_RNDN);
        ;
        mpfr_sub(r32519, r32517, r32518, MPFR_RNDN);
        mpfr_pow(r32520, r32510, r32509, MPFR_RNDN);
        mpfr_add(r32521, r32519, r32520, MPFR_RNDN);
        mpfr_add(r32522, r32516, r32521, MPFR_RNDN);
        return mpfr_get_d(r32522, MPFR_RNDN);
}

