#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 r11591 = a;
        float r11592 = k;
        float r11593 = m;
        float r11594 = pow(r11592, r11593);
        float r11595 = r11591 * r11594;
        float r11596 = 1;
        float r11597 = 10;
        float r11598 = r11597 * r11592;
        float r11599 = r11596 + r11598;
        float r11600 = r11592 * r11592;
        float r11601 = r11599 + r11600;
        float r11602 = r11595 / r11601;
        return r11602;
}

double f_id(double a, double k, double m) {
        double r11603 = a;
        double r11604 = k;
        double r11605 = m;
        double r11606 = pow(r11604, r11605);
        double r11607 = r11603 * r11606;
        double r11608 = 1;
        double r11609 = 10;
        double r11610 = r11609 * r11604;
        double r11611 = r11608 + r11610;
        double r11612 = r11604 * r11604;
        double r11613 = r11611 + r11612;
        double r11614 = r11607 / r11613;
        return r11614;
}


double f_of(float a, float k, float m) {
        float r11615 = k;
        float r11616 = 5.659800354484786e+48;
        bool r11617 = r11615 <= r11616;
        float r11618 = a;
        float r11619 = m;
        float r11620 = pow(r11615, r11619);
        float r11621 = sqrt(r11620);
        float r11622 = r11618 * r11621;
        float r11623 = r11622 * r11621;
        float r11624 = 1;
        float r11625 = 10;
        float r11626 = r11625 * r11615;
        float r11627 = r11624 + r11626;
        float r11628 = r11615 * r11615;
        float r11629 = r11627 + r11628;
        float r11630 = r11623 / r11629;
        float r11631 = r11620 / r11615;
        float r11632 = r11618 / r11615;
        float r11633 = r11625 / r11615;
        float r11634 = r11633 * r11632;
        float r11635 = r11632 - r11634;
        float r11636 = r11631 * r11635;
        float r11637 = 4;
        float r11638 = pow(r11615, r11637);
        float r11639 = r11620 / r11638;
        float r11640 = 99;
        float r11641 = r11640 * r11618;
        float r11642 = r11639 * r11641;
        float r11643 = r11636 + r11642;
        float r11644 = r11617 ? r11630 : r11643;
        return r11644;
}

double f_od(double a, double k, double m) {
        double r11645 = k;
        double r11646 = 5.659800354484786e+48;
        bool r11647 = r11645 <= r11646;
        double r11648 = a;
        double r11649 = m;
        double r11650 = pow(r11645, r11649);
        double r11651 = sqrt(r11650);
        double r11652 = r11648 * r11651;
        double r11653 = r11652 * r11651;
        double r11654 = 1;
        double r11655 = 10;
        double r11656 = r11655 * r11645;
        double r11657 = r11654 + r11656;
        double r11658 = r11645 * r11645;
        double r11659 = r11657 + r11658;
        double r11660 = r11653 / r11659;
        double r11661 = r11650 / r11645;
        double r11662 = r11648 / r11645;
        double r11663 = r11655 / r11645;
        double r11664 = r11663 * r11662;
        double r11665 = r11662 - r11664;
        double r11666 = r11661 * r11665;
        double r11667 = 4;
        double r11668 = pow(r11645, r11667);
        double r11669 = r11650 / r11668;
        double r11670 = 99;
        double r11671 = r11670 * r11648;
        double r11672 = r11669 * r11671;
        double r11673 = r11666 + r11672;
        double r11674 = r11647 ? r11660 : r11673;
        return r11674;
}

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 r11675, r11676, r11677, r11678, r11679, r11680, r11681, r11682, r11683, r11684, r11685, r11686;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r11675);
        mpfr_init(r11676);
        mpfr_init(r11677);
        mpfr_init(r11678);
        mpfr_init(r11679);
        mpfr_init_set_str(r11680, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r11681, "10", 10, MPFR_RNDN);
        mpfr_init(r11682);
        mpfr_init(r11683);
        mpfr_init(r11684);
        mpfr_init(r11685);
        mpfr_init(r11686);
}

double f_im(double a, double k, double m) {
        mpfr_set_d(r11675, a, MPFR_RNDN);
        mpfr_set_d(r11676, k, MPFR_RNDN);
        mpfr_set_d(r11677, m, MPFR_RNDN);
        mpfr_pow(r11678, r11676, r11677, MPFR_RNDN);
        mpfr_mul(r11679, r11675, r11678, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r11682, r11681, r11676, MPFR_RNDN);
        mpfr_add(r11683, r11680, r11682, MPFR_RNDN);
        mpfr_mul(r11684, r11676, r11676, MPFR_RNDN);
        mpfr_add(r11685, r11683, r11684, MPFR_RNDN);
        mpfr_div(r11686, r11679, r11685, MPFR_RNDN);
        return mpfr_get_d(r11686, MPFR_RNDN);
}

static mpfr_t r11687, r11688, r11689, r11690, r11691, r11692, r11693, r11694, r11695, r11696, r11697, r11698, r11699, r11700, r11701, r11702, r11703, r11704, r11705, r11706, r11707, r11708, r11709, r11710, r11711, r11712, r11713, r11714, r11715, r11716;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11687);
        mpfr_init_set_str(r11688, "5.659800354484786e+48", 10, MPFR_RNDN);
        mpfr_init(r11689);
        mpfr_init(r11690);
        mpfr_init(r11691);
        mpfr_init(r11692);
        mpfr_init(r11693);
        mpfr_init(r11694);
        mpfr_init(r11695);
        mpfr_init_set_str(r11696, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r11697, "10", 10, MPFR_RNDN);
        mpfr_init(r11698);
        mpfr_init(r11699);
        mpfr_init(r11700);
        mpfr_init(r11701);
        mpfr_init(r11702);
        mpfr_init(r11703);
        mpfr_init(r11704);
        mpfr_init(r11705);
        mpfr_init(r11706);
        mpfr_init(r11707);
        mpfr_init(r11708);
        mpfr_init_set_str(r11709, "4", 10, MPFR_RNDN);
        mpfr_init(r11710);
        mpfr_init(r11711);
        mpfr_init_set_str(r11712, "99", 10, MPFR_RNDN);
        mpfr_init(r11713);
        mpfr_init(r11714);
        mpfr_init(r11715);
        mpfr_init(r11716);
}

double f_fm(double a, double k, double m) {
        mpfr_set_d(r11687, k, MPFR_RNDN);
        ;
        mpfr_set_si(r11689, mpfr_cmp(r11687, r11688) <= 0, MPFR_RNDN);
        mpfr_set_d(r11690, a, MPFR_RNDN);
        mpfr_set_d(r11691, m, MPFR_RNDN);
        mpfr_pow(r11692, r11687, r11691, MPFR_RNDN);
        mpfr_sqrt(r11693, r11692, MPFR_RNDN);
        mpfr_mul(r11694, r11690, r11693, MPFR_RNDN);
        mpfr_mul(r11695, r11694, r11693, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r11698, r11697, r11687, MPFR_RNDN);
        mpfr_add(r11699, r11696, r11698, MPFR_RNDN);
        mpfr_mul(r11700, r11687, r11687, MPFR_RNDN);
        mpfr_add(r11701, r11699, r11700, MPFR_RNDN);
        mpfr_div(r11702, r11695, r11701, MPFR_RNDN);
        mpfr_div(r11703, r11692, r11687, MPFR_RNDN);
        mpfr_div(r11704, r11690, r11687, MPFR_RNDN);
        mpfr_div(r11705, r11697, r11687, MPFR_RNDN);
        mpfr_mul(r11706, r11705, r11704, MPFR_RNDN);
        mpfr_sub(r11707, r11704, r11706, MPFR_RNDN);
        mpfr_mul(r11708, r11703, r11707, MPFR_RNDN);
        ;
        mpfr_pow(r11710, r11687, r11709, MPFR_RNDN);
        mpfr_div(r11711, r11692, r11710, MPFR_RNDN);
        ;
        mpfr_mul(r11713, r11712, r11690, MPFR_RNDN);
        mpfr_mul(r11714, r11711, r11713, MPFR_RNDN);
        mpfr_add(r11715, r11708, r11714, MPFR_RNDN);
        if (mpfr_get_si(r11689, MPFR_RNDN)) { mpfr_set(r11716, r11702, MPFR_RNDN); } else { mpfr_set(r11716, r11715, MPFR_RNDN); };
        return mpfr_get_d(r11716, MPFR_RNDN);
}

static mpfr_t r11717, r11718, r11719, r11720, r11721, r11722, r11723, r11724, r11725, r11726, r11727, r11728, r11729, r11730, r11731, r11732, r11733, r11734, r11735, r11736, r11737, r11738, r11739, r11740, r11741, r11742, r11743, r11744, r11745, r11746;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r11717);
        mpfr_init_set_str(r11718, "5.659800354484786e+48", 10, MPFR_RNDN);
        mpfr_init(r11719);
        mpfr_init(r11720);
        mpfr_init(r11721);
        mpfr_init(r11722);
        mpfr_init(r11723);
        mpfr_init(r11724);
        mpfr_init(r11725);
        mpfr_init_set_str(r11726, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r11727, "10", 10, MPFR_RNDN);
        mpfr_init(r11728);
        mpfr_init(r11729);
        mpfr_init(r11730);
        mpfr_init(r11731);
        mpfr_init(r11732);
        mpfr_init(r11733);
        mpfr_init(r11734);
        mpfr_init(r11735);
        mpfr_init(r11736);
        mpfr_init(r11737);
        mpfr_init(r11738);
        mpfr_init_set_str(r11739, "4", 10, MPFR_RNDN);
        mpfr_init(r11740);
        mpfr_init(r11741);
        mpfr_init_set_str(r11742, "99", 10, MPFR_RNDN);
        mpfr_init(r11743);
        mpfr_init(r11744);
        mpfr_init(r11745);
        mpfr_init(r11746);
}

double f_dm(double a, double k, double m) {
        mpfr_set_d(r11717, k, MPFR_RNDN);
        ;
        mpfr_set_si(r11719, mpfr_cmp(r11717, r11718) <= 0, MPFR_RNDN);
        mpfr_set_d(r11720, a, MPFR_RNDN);
        mpfr_set_d(r11721, m, MPFR_RNDN);
        mpfr_pow(r11722, r11717, r11721, MPFR_RNDN);
        mpfr_sqrt(r11723, r11722, MPFR_RNDN);
        mpfr_mul(r11724, r11720, r11723, MPFR_RNDN);
        mpfr_mul(r11725, r11724, r11723, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r11728, r11727, r11717, MPFR_RNDN);
        mpfr_add(r11729, r11726, r11728, MPFR_RNDN);
        mpfr_mul(r11730, r11717, r11717, MPFR_RNDN);
        mpfr_add(r11731, r11729, r11730, MPFR_RNDN);
        mpfr_div(r11732, r11725, r11731, MPFR_RNDN);
        mpfr_div(r11733, r11722, r11717, MPFR_RNDN);
        mpfr_div(r11734, r11720, r11717, MPFR_RNDN);
        mpfr_div(r11735, r11727, r11717, MPFR_RNDN);
        mpfr_mul(r11736, r11735, r11734, MPFR_RNDN);
        mpfr_sub(r11737, r11734, r11736, MPFR_RNDN);
        mpfr_mul(r11738, r11733, r11737, MPFR_RNDN);
        ;
        mpfr_pow(r11740, r11717, r11739, MPFR_RNDN);
        mpfr_div(r11741, r11722, r11740, MPFR_RNDN);
        ;
        mpfr_mul(r11743, r11742, r11720, MPFR_RNDN);
        mpfr_mul(r11744, r11741, r11743, MPFR_RNDN);
        mpfr_add(r11745, r11738, r11744, MPFR_RNDN);
        if (mpfr_get_si(r11719, MPFR_RNDN)) { mpfr_set(r11746, r11732, MPFR_RNDN); } else { mpfr_set(r11746, r11745, MPFR_RNDN); };
        return mpfr_get_d(r11746, MPFR_RNDN);
}

