#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 r11455 = a;
        float r11456 = k;
        float r11457 = m;
        float r11458 = pow(r11456, r11457);
        float r11459 = r11455 * r11458;
        float r11460 = 1;
        float r11461 = 10;
        float r11462 = r11461 * r11456;
        float r11463 = r11460 + r11462;
        float r11464 = r11456 * r11456;
        float r11465 = r11463 + r11464;
        float r11466 = r11459 / r11465;
        return r11466;
}

double f_id(double a, double k, double m) {
        double r11467 = a;
        double r11468 = k;
        double r11469 = m;
        double r11470 = pow(r11468, r11469);
        double r11471 = r11467 * r11470;
        double r11472 = 1;
        double r11473 = 10;
        double r11474 = r11473 * r11468;
        double r11475 = r11472 + r11474;
        double r11476 = r11468 * r11468;
        double r11477 = r11475 + r11476;
        double r11478 = r11471 / r11477;
        return r11478;
}


double f_of(float a, float k, float m) {
        float r11479 = k;
        float r11480 = 6.810503467121912e+50;
        bool r11481 = r11479 <= r11480;
        float r11482 = a;
        float r11483 = m;
        float r11484 = pow(r11479, r11483);
        float r11485 = sqrt(r11484);
        float r11486 = r11482 * r11485;
        float r11487 = r11486 * r11485;
        float r11488 = 1;
        float r11489 = 10;
        float r11490 = r11489 * r11479;
        float r11491 = r11488 + r11490;
        float r11492 = r11479 * r11479;
        float r11493 = r11491 + r11492;
        float r11494 = r11487 / r11493;
        float r11495 = exp(r11483);
        float r11496 = log(r11479);
        float r11497 = pow(r11495, r11496);
        float r11498 = 4;
        float r11499 = pow(r11479, r11498);
        float r11500 = r11482 / r11499;
        float r11501 = r11497 * r11500;
        float r11502 = 99;
        float r11503 = r11497 / r11479;
        float r11504 = r11482 / r11479;
        float r11505 = r11489 / r11479;
        float r11506 = r11505 * r11504;
        float r11507 = r11504 - r11506;
        float r11508 = r11503 * r11507;
        float r11509 = fma(r11501, r11502, r11508);
        float r11510 = r11481 ? r11494 : r11509;
        return r11510;
}

double f_od(double a, double k, double m) {
        double r11511 = k;
        double r11512 = 6.810503467121912e+50;
        bool r11513 = r11511 <= r11512;
        double r11514 = a;
        double r11515 = m;
        double r11516 = pow(r11511, r11515);
        double r11517 = sqrt(r11516);
        double r11518 = r11514 * r11517;
        double r11519 = r11518 * r11517;
        double r11520 = 1;
        double r11521 = 10;
        double r11522 = r11521 * r11511;
        double r11523 = r11520 + r11522;
        double r11524 = r11511 * r11511;
        double r11525 = r11523 + r11524;
        double r11526 = r11519 / r11525;
        double r11527 = exp(r11515);
        double r11528 = log(r11511);
        double r11529 = pow(r11527, r11528);
        double r11530 = 4;
        double r11531 = pow(r11511, r11530);
        double r11532 = r11514 / r11531;
        double r11533 = r11529 * r11532;
        double r11534 = 99;
        double r11535 = r11529 / r11511;
        double r11536 = r11514 / r11511;
        double r11537 = r11521 / r11511;
        double r11538 = r11537 * r11536;
        double r11539 = r11536 - r11538;
        double r11540 = r11535 * r11539;
        double r11541 = fma(r11533, r11534, r11540);
        double r11542 = r11513 ? r11526 : r11541;
        return r11542;
}

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 r11543, r11544, r11545, r11546, r11547, r11548, r11549, r11550, r11551, r11552, r11553, r11554;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11543);
        mpfr_init(r11544);
        mpfr_init(r11545);
        mpfr_init(r11546);
        mpfr_init(r11547);
        mpfr_init_set_str(r11548, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r11549, "10", 10, MPFR_RNDN);
        mpfr_init(r11550);
        mpfr_init(r11551);
        mpfr_init(r11552);
        mpfr_init(r11553);
        mpfr_init(r11554);
}

double f_im(double a, double k, double m) {
        mpfr_set_d(r11543, a, MPFR_RNDN);
        mpfr_set_d(r11544, k, MPFR_RNDN);
        mpfr_set_d(r11545, m, MPFR_RNDN);
        mpfr_pow(r11546, r11544, r11545, MPFR_RNDN);
        mpfr_mul(r11547, r11543, r11546, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r11550, r11549, r11544, MPFR_RNDN);
        mpfr_add(r11551, r11548, r11550, MPFR_RNDN);
        mpfr_mul(r11552, r11544, r11544, MPFR_RNDN);
        mpfr_add(r11553, r11551, r11552, MPFR_RNDN);
        mpfr_div(r11554, r11547, r11553, MPFR_RNDN);
        return mpfr_get_d(r11554, MPFR_RNDN);
}

static mpfr_t r11555, r11556, r11557, r11558, r11559, r11560, r11561, r11562, r11563, r11564, r11565, r11566, r11567, r11568, r11569, r11570, r11571, r11572, r11573, r11574, r11575, r11576, r11577, r11578, r11579, r11580, r11581, r11582, r11583, r11584, r11585, r11586;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11555);
        mpfr_init_set_str(r11556, "6.810503467121912e+50", 10, MPFR_RNDN);
        mpfr_init(r11557);
        mpfr_init(r11558);
        mpfr_init(r11559);
        mpfr_init(r11560);
        mpfr_init(r11561);
        mpfr_init(r11562);
        mpfr_init(r11563);
        mpfr_init_set_str(r11564, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r11565, "10", 10, MPFR_RNDN);
        mpfr_init(r11566);
        mpfr_init(r11567);
        mpfr_init(r11568);
        mpfr_init(r11569);
        mpfr_init(r11570);
        mpfr_init(r11571);
        mpfr_init(r11572);
        mpfr_init(r11573);
        mpfr_init_set_str(r11574, "4", 10, MPFR_RNDN);
        mpfr_init(r11575);
        mpfr_init(r11576);
        mpfr_init(r11577);
        mpfr_init_set_str(r11578, "99", 10, MPFR_RNDN);
        mpfr_init(r11579);
        mpfr_init(r11580);
        mpfr_init(r11581);
        mpfr_init(r11582);
        mpfr_init(r11583);
        mpfr_init(r11584);
        mpfr_init(r11585);
        mpfr_init(r11586);
}

double f_fm(double a, double k, double m) {
        mpfr_set_d(r11555, k, MPFR_RNDN);
        ;
        mpfr_set_si(r11557, mpfr_cmp(r11555, r11556) <= 0, MPFR_RNDN);
        mpfr_set_d(r11558, a, MPFR_RNDN);
        mpfr_set_d(r11559, m, MPFR_RNDN);
        mpfr_pow(r11560, r11555, r11559, MPFR_RNDN);
        mpfr_sqrt(r11561, r11560, MPFR_RNDN);
        mpfr_mul(r11562, r11558, r11561, MPFR_RNDN);
        mpfr_mul(r11563, r11562, r11561, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r11566, r11565, r11555, MPFR_RNDN);
        mpfr_add(r11567, r11564, r11566, MPFR_RNDN);
        mpfr_mul(r11568, r11555, r11555, MPFR_RNDN);
        mpfr_add(r11569, r11567, r11568, MPFR_RNDN);
        mpfr_div(r11570, r11563, r11569, MPFR_RNDN);
        mpfr_exp(r11571, r11559, MPFR_RNDN);
        mpfr_log(r11572, r11555, MPFR_RNDN);
        mpfr_pow(r11573, r11571, r11572, MPFR_RNDN);
        ;
        mpfr_pow(r11575, r11555, r11574, MPFR_RNDN);
        mpfr_div(r11576, r11558, r11575, MPFR_RNDN);
        mpfr_mul(r11577, r11573, r11576, MPFR_RNDN);
        ;
        mpfr_div(r11579, r11573, r11555, MPFR_RNDN);
        mpfr_div(r11580, r11558, r11555, MPFR_RNDN);
        mpfr_div(r11581, r11565, r11555, MPFR_RNDN);
        mpfr_mul(r11582, r11581, r11580, MPFR_RNDN);
        mpfr_sub(r11583, r11580, r11582, MPFR_RNDN);
        mpfr_mul(r11584, r11579, r11583, MPFR_RNDN);
        mpfr_fma(r11585, r11577, r11578, r11584, MPFR_RNDN);
        if (mpfr_get_si(r11557, MPFR_RNDN)) { mpfr_set(r11586, r11570, MPFR_RNDN); } else { mpfr_set(r11586, r11585, MPFR_RNDN); };
        return mpfr_get_d(r11586, MPFR_RNDN);
}

static mpfr_t r11587, r11588, r11589, r11590, r11591, r11592, r11593, r11594, r11595, r11596, r11597, r11598, r11599, r11600, r11601, r11602, r11603, r11604, r11605, r11606, r11607, r11608, r11609, r11610, r11611, r11612, r11613, r11614, r11615, r11616, r11617, r11618;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11587);
        mpfr_init_set_str(r11588, "6.810503467121912e+50", 10, MPFR_RNDN);
        mpfr_init(r11589);
        mpfr_init(r11590);
        mpfr_init(r11591);
        mpfr_init(r11592);
        mpfr_init(r11593);
        mpfr_init(r11594);
        mpfr_init(r11595);
        mpfr_init_set_str(r11596, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r11597, "10", 10, MPFR_RNDN);
        mpfr_init(r11598);
        mpfr_init(r11599);
        mpfr_init(r11600);
        mpfr_init(r11601);
        mpfr_init(r11602);
        mpfr_init(r11603);
        mpfr_init(r11604);
        mpfr_init(r11605);
        mpfr_init_set_str(r11606, "4", 10, MPFR_RNDN);
        mpfr_init(r11607);
        mpfr_init(r11608);
        mpfr_init(r11609);
        mpfr_init_set_str(r11610, "99", 10, MPFR_RNDN);
        mpfr_init(r11611);
        mpfr_init(r11612);
        mpfr_init(r11613);
        mpfr_init(r11614);
        mpfr_init(r11615);
        mpfr_init(r11616);
        mpfr_init(r11617);
        mpfr_init(r11618);
}

double f_dm(double a, double k, double m) {
        mpfr_set_d(r11587, k, MPFR_RNDN);
        ;
        mpfr_set_si(r11589, mpfr_cmp(r11587, r11588) <= 0, MPFR_RNDN);
        mpfr_set_d(r11590, a, MPFR_RNDN);
        mpfr_set_d(r11591, m, MPFR_RNDN);
        mpfr_pow(r11592, r11587, r11591, MPFR_RNDN);
        mpfr_sqrt(r11593, r11592, MPFR_RNDN);
        mpfr_mul(r11594, r11590, r11593, MPFR_RNDN);
        mpfr_mul(r11595, r11594, r11593, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r11598, r11597, r11587, MPFR_RNDN);
        mpfr_add(r11599, r11596, r11598, MPFR_RNDN);
        mpfr_mul(r11600, r11587, r11587, MPFR_RNDN);
        mpfr_add(r11601, r11599, r11600, MPFR_RNDN);
        mpfr_div(r11602, r11595, r11601, MPFR_RNDN);
        mpfr_exp(r11603, r11591, MPFR_RNDN);
        mpfr_log(r11604, r11587, MPFR_RNDN);
        mpfr_pow(r11605, r11603, r11604, MPFR_RNDN);
        ;
        mpfr_pow(r11607, r11587, r11606, MPFR_RNDN);
        mpfr_div(r11608, r11590, r11607, MPFR_RNDN);
        mpfr_mul(r11609, r11605, r11608, MPFR_RNDN);
        ;
        mpfr_div(r11611, r11605, r11587, MPFR_RNDN);
        mpfr_div(r11612, r11590, r11587, MPFR_RNDN);
        mpfr_div(r11613, r11597, r11587, MPFR_RNDN);
        mpfr_mul(r11614, r11613, r11612, MPFR_RNDN);
        mpfr_sub(r11615, r11612, r11614, MPFR_RNDN);
        mpfr_mul(r11616, r11611, r11615, MPFR_RNDN);
        mpfr_fma(r11617, r11609, r11610, r11616, MPFR_RNDN);
        if (mpfr_get_si(r11589, MPFR_RNDN)) { mpfr_set(r11618, r11602, MPFR_RNDN); } else { mpfr_set(r11618, r11617, MPFR_RNDN); };
        return mpfr_get_d(r11618, MPFR_RNDN);
}

