#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Bouland and Aaronson, Equation (25)";

double f_if(float a, float b) {
        float r27133 = a;
        float r27134 = r27133 * r27133;
        float r27135 = b;
        float r27136 = r27135 * r27135;
        float r27137 = r27134 + r27136;
        float r27138 = 2;
        float r27139 = pow(r27137, r27138);
        float r27140 = 4;
        float r27141 = 1;
        float r27142 = r27141 + r27133;
        float r27143 = r27134 * r27142;
        float r27144 = 3;
        float r27145 = r27144 * r27133;
        float r27146 = r27141 - r27145;
        float r27147 = r27136 * r27146;
        float r27148 = r27143 + r27147;
        float r27149 = r27140 * r27148;
        float r27150 = r27139 + r27149;
        float r27151 = r27150 - r27141;
        return r27151;
}

double f_id(double a, double b) {
        double r27152 = a;
        double r27153 = r27152 * r27152;
        double r27154 = b;
        double r27155 = r27154 * r27154;
        double r27156 = r27153 + r27155;
        double r27157 = 2;
        double r27158 = pow(r27156, r27157);
        double r27159 = 4;
        double r27160 = 1;
        double r27161 = r27160 + r27152;
        double r27162 = r27153 * r27161;
        double r27163 = 3;
        double r27164 = r27163 * r27152;
        double r27165 = r27160 - r27164;
        double r27166 = r27155 * r27165;
        double r27167 = r27162 + r27166;
        double r27168 = r27159 * r27167;
        double r27169 = r27158 + r27168;
        double r27170 = r27169 - r27160;
        return r27170;
}


double f_of(float a, float b) {
        float r27171 = b;
        float r27172 = a;
        float r27173 = r27172 * r27172;
        float r27174 = fma(r27171, r27171, r27173);
        float r27175 = hypot(r27171, r27172);
        float r27176 = r27175 * r27175;
        float r27177 = fma(r27172, r27172, r27172);
        float r27178 = r27171 * r27171;
        float r27179 = fma(r27172, r27177, r27178);
        float r27180 = 4;
        float r27181 = 1;
        float r27182 = -r27181;
        float r27183 = fma(r27179, r27180, r27182);
        float r27184 = fma(r27174, r27176, r27183);
        return r27184;
}

double f_od(double a, double b) {
        double r27185 = b;
        double r27186 = a;
        double r27187 = r27186 * r27186;
        double r27188 = fma(r27185, r27185, r27187);
        double r27189 = hypot(r27185, r27186);
        double r27190 = r27189 * r27189;
        double r27191 = fma(r27186, r27186, r27186);
        double r27192 = r27185 * r27185;
        double r27193 = fma(r27186, r27191, r27192);
        double r27194 = 4;
        double r27195 = 1;
        double r27196 = -r27195;
        double r27197 = fma(r27193, r27194, r27196);
        double r27198 = fma(r27188, r27190, r27197);
        return r27198;
}

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 r27199, r27200, r27201, r27202, r27203, r27204, r27205, r27206, r27207, r27208, r27209, r27210, r27211, r27212, r27213, r27214, r27215, r27216, r27217;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27199);
        mpfr_init(r27200);
        mpfr_init(r27201);
        mpfr_init(r27202);
        mpfr_init(r27203);
        mpfr_init_set_str(r27204, "2", 10, MPFR_RNDN);
        mpfr_init(r27205);
        mpfr_init_set_str(r27206, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r27207, "1", 10, MPFR_RNDN);
        mpfr_init(r27208);
        mpfr_init(r27209);
        mpfr_init_set_str(r27210, "3", 10, MPFR_RNDN);
        mpfr_init(r27211);
        mpfr_init(r27212);
        mpfr_init(r27213);
        mpfr_init(r27214);
        mpfr_init(r27215);
        mpfr_init(r27216);
        mpfr_init(r27217);
}

double f_im(double a, double b) {
        mpfr_set_d(r27199, a, MPFR_RNDN);
        mpfr_mul(r27200, r27199, r27199, MPFR_RNDN);
        mpfr_set_d(r27201, b, MPFR_RNDN);
        mpfr_mul(r27202, r27201, r27201, MPFR_RNDN);
        mpfr_add(r27203, r27200, r27202, MPFR_RNDN);
        ;
        mpfr_pow(r27205, r27203, r27204, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27208, r27207, r27199, MPFR_RNDN);
        mpfr_mul(r27209, r27200, r27208, MPFR_RNDN);
        ;
        mpfr_mul(r27211, r27210, r27199, MPFR_RNDN);
        mpfr_sub(r27212, r27207, r27211, MPFR_RNDN);
        mpfr_mul(r27213, r27202, r27212, MPFR_RNDN);
        mpfr_add(r27214, r27209, r27213, MPFR_RNDN);
        mpfr_mul(r27215, r27206, r27214, MPFR_RNDN);
        mpfr_add(r27216, r27205, r27215, MPFR_RNDN);
        mpfr_sub(r27217, r27216, r27207, MPFR_RNDN);
        return mpfr_get_d(r27217, MPFR_RNDN);
}

static mpfr_t r27218, r27219, r27220, r27221, r27222, r27223, r27224, r27225, r27226, r27227, r27228, r27229, r27230, r27231;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27218);
        mpfr_init(r27219);
        mpfr_init(r27220);
        mpfr_init(r27221);
        mpfr_init(r27222);
        mpfr_init(r27223);
        mpfr_init(r27224);
        mpfr_init(r27225);
        mpfr_init(r27226);
        mpfr_init_set_str(r27227, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r27228, "1", 10, MPFR_RNDN);
        mpfr_init(r27229);
        mpfr_init(r27230);
        mpfr_init(r27231);
}

double f_fm(double a, double b) {
        mpfr_set_d(r27218, b, MPFR_RNDN);
        mpfr_set_d(r27219, a, MPFR_RNDN);
        mpfr_mul(r27220, r27219, r27219, MPFR_RNDN);
        mpfr_fma(r27221, r27218, r27218, r27220, MPFR_RNDN);
        mpfr_hypot(r27222, r27218, r27219, MPFR_RNDN);
        mpfr_mul(r27223, r27222, r27222, MPFR_RNDN);
        mpfr_fma(r27224, r27219, r27219, r27219, MPFR_RNDN);
        mpfr_mul(r27225, r27218, r27218, MPFR_RNDN);
        mpfr_fma(r27226, r27219, r27224, r27225, MPFR_RNDN);
        ;
        ;
        mpfr_neg(r27229, r27228, MPFR_RNDN);
        mpfr_fma(r27230, r27226, r27227, r27229, MPFR_RNDN);
        mpfr_fma(r27231, r27221, r27223, r27230, MPFR_RNDN);
        return mpfr_get_d(r27231, MPFR_RNDN);
}

static mpfr_t r27232, r27233, r27234, r27235, r27236, r27237, r27238, r27239, r27240, r27241, r27242, r27243, r27244, r27245;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27232);
        mpfr_init(r27233);
        mpfr_init(r27234);
        mpfr_init(r27235);
        mpfr_init(r27236);
        mpfr_init(r27237);
        mpfr_init(r27238);
        mpfr_init(r27239);
        mpfr_init(r27240);
        mpfr_init_set_str(r27241, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r27242, "1", 10, MPFR_RNDN);
        mpfr_init(r27243);
        mpfr_init(r27244);
        mpfr_init(r27245);
}

double f_dm(double a, double b) {
        mpfr_set_d(r27232, b, MPFR_RNDN);
        mpfr_set_d(r27233, a, MPFR_RNDN);
        mpfr_mul(r27234, r27233, r27233, MPFR_RNDN);
        mpfr_fma(r27235, r27232, r27232, r27234, MPFR_RNDN);
        mpfr_hypot(r27236, r27232, r27233, MPFR_RNDN);
        mpfr_mul(r27237, r27236, r27236, MPFR_RNDN);
        mpfr_fma(r27238, r27233, r27233, r27233, MPFR_RNDN);
        mpfr_mul(r27239, r27232, r27232, MPFR_RNDN);
        mpfr_fma(r27240, r27233, r27238, r27239, MPFR_RNDN);
        ;
        ;
        mpfr_neg(r27243, r27242, MPFR_RNDN);
        mpfr_fma(r27244, r27240, r27241, r27243, MPFR_RNDN);
        mpfr_fma(r27245, r27235, r27237, r27244, MPFR_RNDN);
        return mpfr_get_d(r27245, MPFR_RNDN);
}

