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

char *name = "Falkner and Boettcher, Appendix A";

double f_if(float a, float k, float m) {
        float r11384 = a;
        float r11385 = k;
        float r11386 = m;
        float r11387 = pow(r11385, r11386);
        float r11388 = r11384 * r11387;
        float r11389 = 1;
        float r11390 = 10;
        float r11391 = r11390 * r11385;
        float r11392 = r11389 + r11391;
        float r11393 = r11385 * r11385;
        float r11394 = r11392 + r11393;
        float r11395 = r11388 / r11394;
        return r11395;
}

double f_id(double a, double k, double m) {
        double r11396 = a;
        double r11397 = k;
        double r11398 = m;
        double r11399 = pow(r11397, r11398);
        double r11400 = r11396 * r11399;
        double r11401 = 1;
        double r11402 = 10;
        double r11403 = r11402 * r11397;
        double r11404 = r11401 + r11403;
        double r11405 = r11397 * r11397;
        double r11406 = r11404 + r11405;
        double r11407 = r11400 / r11406;
        return r11407;
}


double f_of(float a, float k, float m) {
        float r11408 = 99;
        float r11409 = a;
        float r11410 = r11408 * r11409;
        float r11411 = k;
        float r11412 = 4;
        float r11413 = pow(r11411, r11412);
        float r11414 = r11410 / r11413;
        float r11415 = m;
        float r11416 = pow(r11411, r11415);
        float r11417 = r11414 * r11416;
        float r11418 = r11416 / r11411;
        float r11419 = 10;
        float r11420 = r11419 / r11411;
        float r11421 = r11409 / r11411;
        float r11422 = r11420 * r11421;
        float r11423 = r11422 - r11421;
        float r11424 = r11418 * r11423;
        float r11425 = r11417 - r11424;
        float r11426 = -7.998481467270114e-108;
        bool r11427 = r11425 <= r11426;
        float r11428 = cbrt(r11416);
        float r11429 = r11428 * r11428;
        float r11430 = r11428 * r11409;
        float r11431 = r11429 * r11430;
        float r11432 = 1;
        float r11433 = r11419 + r11411;
        float r11434 = r11411 * r11433;
        float r11435 = r11432 + r11434;
        float r11436 = r11431 / r11435;
        float r11437 = 9.264873509848405e-262;
        bool r11438 = r11425 <= r11437;
        float r11439 = r11438 ? r11425 : r11436;
        float r11440 = r11427 ? r11436 : r11439;
        return r11440;
}

double f_od(double a, double k, double m) {
        double r11441 = 99;
        double r11442 = a;
        double r11443 = r11441 * r11442;
        double r11444 = k;
        double r11445 = 4;
        double r11446 = pow(r11444, r11445);
        double r11447 = r11443 / r11446;
        double r11448 = m;
        double r11449 = pow(r11444, r11448);
        double r11450 = r11447 * r11449;
        double r11451 = r11449 / r11444;
        double r11452 = 10;
        double r11453 = r11452 / r11444;
        double r11454 = r11442 / r11444;
        double r11455 = r11453 * r11454;
        double r11456 = r11455 - r11454;
        double r11457 = r11451 * r11456;
        double r11458 = r11450 - r11457;
        double r11459 = -7.998481467270114e-108;
        bool r11460 = r11458 <= r11459;
        double r11461 = cbrt(r11449);
        double r11462 = r11461 * r11461;
        double r11463 = r11461 * r11442;
        double r11464 = r11462 * r11463;
        double r11465 = 1;
        double r11466 = r11452 + r11444;
        double r11467 = r11444 * r11466;
        double r11468 = r11465 + r11467;
        double r11469 = r11464 / r11468;
        double r11470 = 9.264873509848405e-262;
        bool r11471 = r11458 <= r11470;
        double r11472 = r11471 ? r11458 : r11469;
        double r11473 = r11460 ? r11469 : r11472;
        return r11473;
}

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 r11474, r11475, r11476, r11477, r11478, r11479, r11480, r11481, r11482, r11483, r11484, r11485;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11474);
        mpfr_init(r11475);
        mpfr_init(r11476);
        mpfr_init(r11477);
        mpfr_init(r11478);
        mpfr_init_set_str(r11479, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r11480, "10", 10, MPFR_RNDN);
        mpfr_init(r11481);
        mpfr_init(r11482);
        mpfr_init(r11483);
        mpfr_init(r11484);
        mpfr_init(r11485);
}

double f_im(double a, double k, double m) {
        mpfr_set_d(r11474, a, MPFR_RNDN);
        mpfr_set_d(r11475, k, MPFR_RNDN);
        mpfr_set_d(r11476, m, MPFR_RNDN);
        mpfr_pow(r11477, r11475, r11476, MPFR_RNDN);
        mpfr_mul(r11478, r11474, r11477, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r11481, r11480, r11475, MPFR_RNDN);
        mpfr_add(r11482, r11479, r11481, MPFR_RNDN);
        mpfr_mul(r11483, r11475, r11475, MPFR_RNDN);
        mpfr_add(r11484, r11482, r11483, MPFR_RNDN);
        mpfr_div(r11485, r11478, r11484, MPFR_RNDN);
        return mpfr_get_d(r11485, MPFR_RNDN);
}

static mpfr_t r11486, r11487, r11488, r11489, r11490, r11491, r11492, r11493, r11494, r11495, r11496, r11497, r11498, r11499, r11500, r11501, r11502, r11503, r11504, r11505, r11506, r11507, r11508, r11509, r11510, r11511, r11512, r11513, r11514, r11515, r11516, r11517, r11518;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r11486, "99", 10, MPFR_RNDN);
        mpfr_init(r11487);
        mpfr_init(r11488);
        mpfr_init(r11489);
        mpfr_init_set_str(r11490, "4", 10, MPFR_RNDN);
        mpfr_init(r11491);
        mpfr_init(r11492);
        mpfr_init(r11493);
        mpfr_init(r11494);
        mpfr_init(r11495);
        mpfr_init(r11496);
        mpfr_init_set_str(r11497, "10", 10, MPFR_RNDN);
        mpfr_init(r11498);
        mpfr_init(r11499);
        mpfr_init(r11500);
        mpfr_init(r11501);
        mpfr_init(r11502);
        mpfr_init(r11503);
        mpfr_init_set_str(r11504, "-7.998481467270114e-108", 10, MPFR_RNDN);
        mpfr_init(r11505);
        mpfr_init(r11506);
        mpfr_init(r11507);
        mpfr_init(r11508);
        mpfr_init(r11509);
        mpfr_init_set_str(r11510, "1", 10, MPFR_RNDN);
        mpfr_init(r11511);
        mpfr_init(r11512);
        mpfr_init(r11513);
        mpfr_init(r11514);
        mpfr_init_set_str(r11515, "9.264873509848405e-262", 10, MPFR_RNDN);
        mpfr_init(r11516);
        mpfr_init(r11517);
        mpfr_init(r11518);
}

double f_fm(double a, double k, double m) {
        ;
        mpfr_set_d(r11487, a, MPFR_RNDN);
        mpfr_mul(r11488, r11486, r11487, MPFR_RNDN);
        mpfr_set_d(r11489, k, MPFR_RNDN);
        ;
        mpfr_pow(r11491, r11489, r11490, MPFR_RNDN);
        mpfr_div(r11492, r11488, r11491, MPFR_RNDN);
        mpfr_set_d(r11493, m, MPFR_RNDN);
        mpfr_pow(r11494, r11489, r11493, MPFR_RNDN);
        mpfr_mul(r11495, r11492, r11494, MPFR_RNDN);
        mpfr_div(r11496, r11494, r11489, MPFR_RNDN);
        ;
        mpfr_div(r11498, r11497, r11489, MPFR_RNDN);
        mpfr_div(r11499, r11487, r11489, MPFR_RNDN);
        mpfr_mul(r11500, r11498, r11499, MPFR_RNDN);
        mpfr_sub(r11501, r11500, r11499, MPFR_RNDN);
        mpfr_mul(r11502, r11496, r11501, MPFR_RNDN);
        mpfr_sub(r11503, r11495, r11502, MPFR_RNDN);
        ;
        mpfr_set_si(r11505, mpfr_cmp(r11503, r11504) <= 0, MPFR_RNDN);
        mpfr_cbrt(r11506, r11494, MPFR_RNDN);
        mpfr_mul(r11507, r11506, r11506, MPFR_RNDN);
        mpfr_mul(r11508, r11506, r11487, MPFR_RNDN);
        mpfr_mul(r11509, r11507, r11508, MPFR_RNDN);
        ;
        mpfr_add(r11511, r11497, r11489, MPFR_RNDN);
        mpfr_mul(r11512, r11489, r11511, MPFR_RNDN);
        mpfr_add(r11513, r11510, r11512, MPFR_RNDN);
        mpfr_div(r11514, r11509, r11513, MPFR_RNDN);
        ;
        mpfr_set_si(r11516, mpfr_cmp(r11503, r11515) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r11516, MPFR_RNDN)) { mpfr_set(r11517, r11503, MPFR_RNDN); } else { mpfr_set(r11517, r11514, MPFR_RNDN); };
        if (mpfr_get_si(r11505, MPFR_RNDN)) { mpfr_set(r11518, r11514, MPFR_RNDN); } else { mpfr_set(r11518, r11517, MPFR_RNDN); };
        return mpfr_get_d(r11518, MPFR_RNDN);
}

static mpfr_t r11519, r11520, r11521, r11522, r11523, r11524, r11525, r11526, r11527, r11528, r11529, r11530, r11531, r11532, r11533, r11534, r11535, r11536, r11537, r11538, r11539, r11540, r11541, r11542, r11543, r11544, r11545, r11546, r11547, r11548, r11549, r11550, r11551;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r11519, "99", 10, MPFR_RNDN);
        mpfr_init(r11520);
        mpfr_init(r11521);
        mpfr_init(r11522);
        mpfr_init_set_str(r11523, "4", 10, MPFR_RNDN);
        mpfr_init(r11524);
        mpfr_init(r11525);
        mpfr_init(r11526);
        mpfr_init(r11527);
        mpfr_init(r11528);
        mpfr_init(r11529);
        mpfr_init_set_str(r11530, "10", 10, MPFR_RNDN);
        mpfr_init(r11531);
        mpfr_init(r11532);
        mpfr_init(r11533);
        mpfr_init(r11534);
        mpfr_init(r11535);
        mpfr_init(r11536);
        mpfr_init_set_str(r11537, "-7.998481467270114e-108", 10, MPFR_RNDN);
        mpfr_init(r11538);
        mpfr_init(r11539);
        mpfr_init(r11540);
        mpfr_init(r11541);
        mpfr_init(r11542);
        mpfr_init_set_str(r11543, "1", 10, MPFR_RNDN);
        mpfr_init(r11544);
        mpfr_init(r11545);
        mpfr_init(r11546);
        mpfr_init(r11547);
        mpfr_init_set_str(r11548, "9.264873509848405e-262", 10, MPFR_RNDN);
        mpfr_init(r11549);
        mpfr_init(r11550);
        mpfr_init(r11551);
}

double f_dm(double a, double k, double m) {
        ;
        mpfr_set_d(r11520, a, MPFR_RNDN);
        mpfr_mul(r11521, r11519, r11520, MPFR_RNDN);
        mpfr_set_d(r11522, k, MPFR_RNDN);
        ;
        mpfr_pow(r11524, r11522, r11523, MPFR_RNDN);
        mpfr_div(r11525, r11521, r11524, MPFR_RNDN);
        mpfr_set_d(r11526, m, MPFR_RNDN);
        mpfr_pow(r11527, r11522, r11526, MPFR_RNDN);
        mpfr_mul(r11528, r11525, r11527, MPFR_RNDN);
        mpfr_div(r11529, r11527, r11522, MPFR_RNDN);
        ;
        mpfr_div(r11531, r11530, r11522, MPFR_RNDN);
        mpfr_div(r11532, r11520, r11522, MPFR_RNDN);
        mpfr_mul(r11533, r11531, r11532, MPFR_RNDN);
        mpfr_sub(r11534, r11533, r11532, MPFR_RNDN);
        mpfr_mul(r11535, r11529, r11534, MPFR_RNDN);
        mpfr_sub(r11536, r11528, r11535, MPFR_RNDN);
        ;
        mpfr_set_si(r11538, mpfr_cmp(r11536, r11537) <= 0, MPFR_RNDN);
        mpfr_cbrt(r11539, r11527, MPFR_RNDN);
        mpfr_mul(r11540, r11539, r11539, MPFR_RNDN);
        mpfr_mul(r11541, r11539, r11520, MPFR_RNDN);
        mpfr_mul(r11542, r11540, r11541, MPFR_RNDN);
        ;
        mpfr_add(r11544, r11530, r11522, MPFR_RNDN);
        mpfr_mul(r11545, r11522, r11544, MPFR_RNDN);
        mpfr_add(r11546, r11543, r11545, MPFR_RNDN);
        mpfr_div(r11547, r11542, r11546, MPFR_RNDN);
        ;
        mpfr_set_si(r11549, mpfr_cmp(r11536, r11548) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r11549, MPFR_RNDN)) { mpfr_set(r11550, r11536, MPFR_RNDN); } else { mpfr_set(r11550, r11547, MPFR_RNDN); };
        if (mpfr_get_si(r11538, MPFR_RNDN)) { mpfr_set(r11551, r11547, MPFR_RNDN); } else { mpfr_set(r11551, r11550, MPFR_RNDN); };
        return mpfr_get_d(r11551, MPFR_RNDN);
}

