#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 r10234 = a;
        float r10235 = r10234 * r10234;
        float r10236 = b;
        float r10237 = r10236 * r10236;
        float r10238 = r10235 + r10237;
        float r10239 = 2.0f;
        float r10240 = pow(r10238, r10239);
        float r10241 = 4.0f;
        float r10242 = 1.0f;
        float r10243 = r10242 + r10234;
        float r10244 = r10235 * r10243;
        float r10245 = 3.0f;
        float r10246 = r10245 * r10234;
        float r10247 = r10242 - r10246;
        float r10248 = r10237 * r10247;
        float r10249 = r10244 + r10248;
        float r10250 = r10241 * r10249;
        float r10251 = r10240 + r10250;
        float r10252 = r10251 - r10242;
        return r10252;
}

double f_id(double a, double b) {
        double r10253 = a;
        double r10254 = r10253 * r10253;
        double r10255 = b;
        double r10256 = r10255 * r10255;
        double r10257 = r10254 + r10256;
        double r10258 = 2.0;
        double r10259 = pow(r10257, r10258);
        double r10260 = 4.0;
        double r10261 = 1.0;
        double r10262 = r10261 + r10253;
        double r10263 = r10254 * r10262;
        double r10264 = 3.0;
        double r10265 = r10264 * r10253;
        double r10266 = r10261 - r10265;
        double r10267 = r10256 * r10266;
        double r10268 = r10263 + r10267;
        double r10269 = r10260 * r10268;
        double r10270 = r10259 + r10269;
        double r10271 = r10270 - r10261;
        return r10271;
}


double f_of(float a, float b) {
        float r10272 = 4.0f;
        float r10273 = a;
        float r10274 = r10273 * r10273;
        float r10275 = 1.0f;
        float r10276 = r10273 + r10275;
        float r10277 = r10274 * r10276;
        float r10278 = b;
        float r10279 = r10278 * r10278;
        float r10280 = 3.0f;
        float r10281 = r10280 * r10273;
        float r10282 = r10275 - r10281;
        float r10283 = r10279 * r10282;
        float r10284 = r10277 + r10283;
        float r10285 = cbrt(r10284);
        float r10286 = r10285 * r10285;
        float r10287 = r10285 * r10286;
        float r10288 = r10272 * r10287;
        float r10289 = r10274 + r10279;
        float r10290 = 2.0f;
        float r10291 = pow(r10289, r10290);
        float r10292 = r10288 + r10291;
        float r10293 = r10292 - r10275;
        return r10293;
}

double f_od(double a, double b) {
        double r10294 = 4.0;
        double r10295 = a;
        double r10296 = r10295 * r10295;
        double r10297 = 1.0;
        double r10298 = r10295 + r10297;
        double r10299 = r10296 * r10298;
        double r10300 = b;
        double r10301 = r10300 * r10300;
        double r10302 = 3.0;
        double r10303 = r10302 * r10295;
        double r10304 = r10297 - r10303;
        double r10305 = r10301 * r10304;
        double r10306 = r10299 + r10305;
        double r10307 = cbrt(r10306);
        double r10308 = r10307 * r10307;
        double r10309 = r10307 * r10308;
        double r10310 = r10294 * r10309;
        double r10311 = r10296 + r10301;
        double r10312 = 2.0;
        double r10313 = pow(r10311, r10312);
        double r10314 = r10310 + r10313;
        double r10315 = r10314 - r10297;
        return r10315;
}

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 r10316, r10317, r10318, r10319, r10320, r10321, r10322, r10323, r10324, r10325, r10326, r10327, r10328, r10329, r10330, r10331, r10332, r10333, r10334;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r10316);
        mpfr_init(r10317);
        mpfr_init(r10318);
        mpfr_init(r10319);
        mpfr_init(r10320);
        mpfr_init_set_str(r10321, "2", 10, MPFR_RNDN);
        mpfr_init(r10322);
        mpfr_init_set_str(r10323, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r10324, "1", 10, MPFR_RNDN);
        mpfr_init(r10325);
        mpfr_init(r10326);
        mpfr_init_set_str(r10327, "3", 10, MPFR_RNDN);
        mpfr_init(r10328);
        mpfr_init(r10329);
        mpfr_init(r10330);
        mpfr_init(r10331);
        mpfr_init(r10332);
        mpfr_init(r10333);
        mpfr_init(r10334);
}

double f_im(double a, double b) {
        mpfr_set_d(r10316, a, MPFR_RNDN);
        mpfr_mul(r10317, r10316, r10316, MPFR_RNDN);
        mpfr_set_d(r10318, b, MPFR_RNDN);
        mpfr_mul(r10319, r10318, r10318, MPFR_RNDN);
        mpfr_add(r10320, r10317, r10319, MPFR_RNDN);
        ;
        mpfr_pow(r10322, r10320, r10321, MPFR_RNDN);
        ;
        ;
        mpfr_add(r10325, r10324, r10316, MPFR_RNDN);
        mpfr_mul(r10326, r10317, r10325, MPFR_RNDN);
        ;
        mpfr_mul(r10328, r10327, r10316, MPFR_RNDN);
        mpfr_sub(r10329, r10324, r10328, MPFR_RNDN);
        mpfr_mul(r10330, r10319, r10329, MPFR_RNDN);
        mpfr_add(r10331, r10326, r10330, MPFR_RNDN);
        mpfr_mul(r10332, r10323, r10331, MPFR_RNDN);
        mpfr_add(r10333, r10322, r10332, MPFR_RNDN);
        mpfr_sub(r10334, r10333, r10324, MPFR_RNDN);
        return mpfr_get_d(r10334, MPFR_RNDN);
}

static mpfr_t r10335, r10336, r10337, r10338, r10339, r10340, r10341, r10342, r10343, r10344, r10345, r10346, r10347, r10348, r10349, r10350, r10351, r10352, r10353, r10354, r10355, r10356;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r10335, "4", 10, MPFR_RNDN);
        mpfr_init(r10336);
        mpfr_init(r10337);
        mpfr_init_set_str(r10338, "1", 10, MPFR_RNDN);
        mpfr_init(r10339);
        mpfr_init(r10340);
        mpfr_init(r10341);
        mpfr_init(r10342);
        mpfr_init_set_str(r10343, "3", 10, MPFR_RNDN);
        mpfr_init(r10344);
        mpfr_init(r10345);
        mpfr_init(r10346);
        mpfr_init(r10347);
        mpfr_init(r10348);
        mpfr_init(r10349);
        mpfr_init(r10350);
        mpfr_init(r10351);
        mpfr_init(r10352);
        mpfr_init_set_str(r10353, "2", 10, MPFR_RNDN);
        mpfr_init(r10354);
        mpfr_init(r10355);
        mpfr_init(r10356);
}

double f_fm(double a, double b) {
        ;
        mpfr_set_d(r10336, a, MPFR_RNDN);
        mpfr_mul(r10337, r10336, r10336, MPFR_RNDN);
        ;
        mpfr_add(r10339, r10336, r10338, MPFR_RNDN);
        mpfr_mul(r10340, r10337, r10339, MPFR_RNDN);
        mpfr_set_d(r10341, b, MPFR_RNDN);
        mpfr_mul(r10342, r10341, r10341, MPFR_RNDN);
        ;
        mpfr_mul(r10344, r10343, r10336, MPFR_RNDN);
        mpfr_sub(r10345, r10338, r10344, MPFR_RNDN);
        mpfr_mul(r10346, r10342, r10345, MPFR_RNDN);
        mpfr_add(r10347, r10340, r10346, MPFR_RNDN);
        mpfr_cbrt(r10348, r10347, MPFR_RNDN);
        mpfr_mul(r10349, r10348, r10348, MPFR_RNDN);
        mpfr_mul(r10350, r10348, r10349, MPFR_RNDN);
        mpfr_mul(r10351, r10335, r10350, MPFR_RNDN);
        mpfr_add(r10352, r10337, r10342, MPFR_RNDN);
        ;
        mpfr_pow(r10354, r10352, r10353, MPFR_RNDN);
        mpfr_add(r10355, r10351, r10354, MPFR_RNDN);
        mpfr_sub(r10356, r10355, r10338, MPFR_RNDN);
        return mpfr_get_d(r10356, MPFR_RNDN);
}

static mpfr_t r10357, r10358, r10359, r10360, r10361, r10362, r10363, r10364, r10365, r10366, r10367, r10368, r10369, r10370, r10371, r10372, r10373, r10374, r10375, r10376, r10377, r10378;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r10357, "4", 10, MPFR_RNDN);
        mpfr_init(r10358);
        mpfr_init(r10359);
        mpfr_init_set_str(r10360, "1", 10, MPFR_RNDN);
        mpfr_init(r10361);
        mpfr_init(r10362);
        mpfr_init(r10363);
        mpfr_init(r10364);
        mpfr_init_set_str(r10365, "3", 10, MPFR_RNDN);
        mpfr_init(r10366);
        mpfr_init(r10367);
        mpfr_init(r10368);
        mpfr_init(r10369);
        mpfr_init(r10370);
        mpfr_init(r10371);
        mpfr_init(r10372);
        mpfr_init(r10373);
        mpfr_init(r10374);
        mpfr_init_set_str(r10375, "2", 10, MPFR_RNDN);
        mpfr_init(r10376);
        mpfr_init(r10377);
        mpfr_init(r10378);
}

double f_dm(double a, double b) {
        ;
        mpfr_set_d(r10358, a, MPFR_RNDN);
        mpfr_mul(r10359, r10358, r10358, MPFR_RNDN);
        ;
        mpfr_add(r10361, r10358, r10360, MPFR_RNDN);
        mpfr_mul(r10362, r10359, r10361, MPFR_RNDN);
        mpfr_set_d(r10363, b, MPFR_RNDN);
        mpfr_mul(r10364, r10363, r10363, MPFR_RNDN);
        ;
        mpfr_mul(r10366, r10365, r10358, MPFR_RNDN);
        mpfr_sub(r10367, r10360, r10366, MPFR_RNDN);
        mpfr_mul(r10368, r10364, r10367, MPFR_RNDN);
        mpfr_add(r10369, r10362, r10368, MPFR_RNDN);
        mpfr_cbrt(r10370, r10369, MPFR_RNDN);
        mpfr_mul(r10371, r10370, r10370, MPFR_RNDN);
        mpfr_mul(r10372, r10370, r10371, MPFR_RNDN);
        mpfr_mul(r10373, r10357, r10372, MPFR_RNDN);
        mpfr_add(r10374, r10359, r10364, MPFR_RNDN);
        ;
        mpfr_pow(r10376, r10374, r10375, MPFR_RNDN);
        mpfr_add(r10377, r10373, r10376, MPFR_RNDN);
        mpfr_sub(r10378, r10377, r10360, MPFR_RNDN);
        return mpfr_get_d(r10378, MPFR_RNDN);
}

