#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 r36039 = a;
        float r36040 = r36039 * r36039;
        float r36041 = b;
        float r36042 = r36041 * r36041;
        float r36043 = r36040 + r36042;
        float r36044 = 2;
        float r36045 = pow(r36043, r36044);
        float r36046 = 4;
        float r36047 = r36046 * r36042;
        float r36048 = r36045 + r36047;
        float r36049 = 1;
        float r36050 = r36048 - r36049;
        return r36050;
}

double f_id(double a, double b) {
        double r36051 = a;
        double r36052 = r36051 * r36051;
        double r36053 = b;
        double r36054 = r36053 * r36053;
        double r36055 = r36052 + r36054;
        double r36056 = 2;
        double r36057 = pow(r36055, r36056);
        double r36058 = 4;
        double r36059 = r36058 * r36054;
        double r36060 = r36057 + r36059;
        double r36061 = 1;
        double r36062 = r36060 - r36061;
        return r36062;
}


double f_of(float a, float b) {
        float r36063 = a;
        float r36064 = r36063 * r36063;
        float r36065 = b;
        float r36066 = r36065 * r36065;
        float r36067 = r36064 + r36066;
        float r36068 = 2;
        float r36069 = pow(r36067, r36068);
        float r36070 = 4;
        float r36071 = r36070 * r36066;
        float r36072 = r36069 + r36071;
        float r36073 = 1;
        float r36074 = r36072 - r36073;
        return r36074;
}

double f_od(double a, double b) {
        double r36075 = a;
        double r36076 = r36075 * r36075;
        double r36077 = b;
        double r36078 = r36077 * r36077;
        double r36079 = r36076 + r36078;
        double r36080 = 2;
        double r36081 = pow(r36079, r36080);
        double r36082 = 4;
        double r36083 = r36082 * r36078;
        double r36084 = r36081 + r36083;
        double r36085 = 1;
        double r36086 = r36084 - r36085;
        return r36086;
}

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 r36087, r36088, r36089, r36090, r36091, r36092, r36093, r36094, r36095, r36096, r36097, r36098;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r36087);
        mpfr_init(r36088);
        mpfr_init(r36089);
        mpfr_init(r36090);
        mpfr_init(r36091);
        mpfr_init_set_str(r36092, "2", 10, MPFR_RNDN);
        mpfr_init(r36093);
        mpfr_init_set_str(r36094, "4", 10, MPFR_RNDN);
        mpfr_init(r36095);
        mpfr_init(r36096);
        mpfr_init_set_str(r36097, "1", 10, MPFR_RNDN);
        mpfr_init(r36098);
}

double f_im(double a, double b) {
        mpfr_set_d(r36087, a, MPFR_RNDN);
        mpfr_mul(r36088, r36087, r36087, MPFR_RNDN);
        mpfr_set_d(r36089, b, MPFR_RNDN);
        mpfr_mul(r36090, r36089, r36089, MPFR_RNDN);
        mpfr_add(r36091, r36088, r36090, MPFR_RNDN);
        ;
        mpfr_pow(r36093, r36091, r36092, MPFR_RNDN);
        ;
        mpfr_mul(r36095, r36094, r36090, MPFR_RNDN);
        mpfr_add(r36096, r36093, r36095, MPFR_RNDN);
        ;
        mpfr_sub(r36098, r36096, r36097, MPFR_RNDN);
        return mpfr_get_d(r36098, MPFR_RNDN);
}

static mpfr_t r36099, r36100, r36101, r36102, r36103, r36104, r36105, r36106, r36107, r36108, r36109, r36110;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r36099);
        mpfr_init(r36100);
        mpfr_init(r36101);
        mpfr_init(r36102);
        mpfr_init(r36103);
        mpfr_init_set_str(r36104, "2", 10, MPFR_RNDN);
        mpfr_init(r36105);
        mpfr_init_set_str(r36106, "4", 10, MPFR_RNDN);
        mpfr_init(r36107);
        mpfr_init(r36108);
        mpfr_init_set_str(r36109, "1", 10, MPFR_RNDN);
        mpfr_init(r36110);
}

double f_fm(double a, double b) {
        mpfr_set_d(r36099, a, MPFR_RNDN);
        mpfr_mul(r36100, r36099, r36099, MPFR_RNDN);
        mpfr_set_d(r36101, b, MPFR_RNDN);
        mpfr_mul(r36102, r36101, r36101, MPFR_RNDN);
        mpfr_add(r36103, r36100, r36102, MPFR_RNDN);
        ;
        mpfr_pow(r36105, r36103, r36104, MPFR_RNDN);
        ;
        mpfr_mul(r36107, r36106, r36102, MPFR_RNDN);
        mpfr_add(r36108, r36105, r36107, MPFR_RNDN);
        ;
        mpfr_sub(r36110, r36108, r36109, MPFR_RNDN);
        return mpfr_get_d(r36110, MPFR_RNDN);
}

static mpfr_t r36111, r36112, r36113, r36114, r36115, r36116, r36117, r36118, r36119, r36120, r36121, r36122;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r36111);
        mpfr_init(r36112);
        mpfr_init(r36113);
        mpfr_init(r36114);
        mpfr_init(r36115);
        mpfr_init_set_str(r36116, "2", 10, MPFR_RNDN);
        mpfr_init(r36117);
        mpfr_init_set_str(r36118, "4", 10, MPFR_RNDN);
        mpfr_init(r36119);
        mpfr_init(r36120);
        mpfr_init_set_str(r36121, "1", 10, MPFR_RNDN);
        mpfr_init(r36122);
}

double f_dm(double a, double b) {
        mpfr_set_d(r36111, a, MPFR_RNDN);
        mpfr_mul(r36112, r36111, r36111, MPFR_RNDN);
        mpfr_set_d(r36113, b, MPFR_RNDN);
        mpfr_mul(r36114, r36113, r36113, MPFR_RNDN);
        mpfr_add(r36115, r36112, r36114, MPFR_RNDN);
        ;
        mpfr_pow(r36117, r36115, r36116, MPFR_RNDN);
        ;
        mpfr_mul(r36119, r36118, r36114, MPFR_RNDN);
        mpfr_add(r36120, r36117, r36119, MPFR_RNDN);
        ;
        mpfr_sub(r36122, r36120, r36121, MPFR_RNDN);
        return mpfr_get_d(r36122, MPFR_RNDN);
}

