#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 r27596 = a;
        float r27597 = k;
        float r27598 = m;
        float r27599 = pow(r27597, r27598);
        float r27600 = r27596 * r27599;
        float r27601 = 1;
        float r27602 = 10;
        float r27603 = r27602 * r27597;
        float r27604 = r27601 + r27603;
        float r27605 = r27597 * r27597;
        float r27606 = r27604 + r27605;
        float r27607 = r27600 / r27606;
        return r27607;
}

double f_id(double a, double k, double m) {
        double r27608 = a;
        double r27609 = k;
        double r27610 = m;
        double r27611 = pow(r27609, r27610);
        double r27612 = r27608 * r27611;
        double r27613 = 1;
        double r27614 = 10;
        double r27615 = r27614 * r27609;
        double r27616 = r27613 + r27615;
        double r27617 = r27609 * r27609;
        double r27618 = r27616 + r27617;
        double r27619 = r27612 / r27618;
        return r27619;
}


double f_of(float a, float k, float m) {
        float r27620 = k;
        float r27621 = m;
        float r27622 = pow(r27620, r27621);
        float r27623 = a;
        float r27624 = r27622 * r27623;
        float r27625 = 1;
        float r27626 = 10;
        float r27627 = r27626 + r27620;
        float r27628 = fma(r27627, r27620, r27625);
        float r27629 = r27625 / r27628;
        float r27630 = r27624 * r27629;
        return r27630;
}

double f_od(double a, double k, double m) {
        double r27631 = k;
        double r27632 = m;
        double r27633 = pow(r27631, r27632);
        double r27634 = a;
        double r27635 = r27633 * r27634;
        double r27636 = 1;
        double r27637 = 10;
        double r27638 = r27637 + r27631;
        double r27639 = fma(r27638, r27631, r27636);
        double r27640 = r27636 / r27639;
        double r27641 = r27635 * r27640;
        return r27641;
}

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 r27642, r27643, r27644, r27645, r27646, r27647, r27648, r27649, r27650, r27651, r27652, r27653;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27642);
        mpfr_init(r27643);
        mpfr_init(r27644);
        mpfr_init(r27645);
        mpfr_init(r27646);
        mpfr_init_set_str(r27647, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27648, "10", 10, MPFR_RNDN);
        mpfr_init(r27649);
        mpfr_init(r27650);
        mpfr_init(r27651);
        mpfr_init(r27652);
        mpfr_init(r27653);
}

double f_im(double a, double k, double m) {
        mpfr_set_d(r27642, a, MPFR_RNDN);
        mpfr_set_d(r27643, k, MPFR_RNDN);
        mpfr_set_d(r27644, m, MPFR_RNDN);
        mpfr_pow(r27645, r27643, r27644, MPFR_RNDN);
        mpfr_mul(r27646, r27642, r27645, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r27649, r27648, r27643, MPFR_RNDN);
        mpfr_add(r27650, r27647, r27649, MPFR_RNDN);
        mpfr_mul(r27651, r27643, r27643, MPFR_RNDN);
        mpfr_add(r27652, r27650, r27651, MPFR_RNDN);
        mpfr_div(r27653, r27646, r27652, MPFR_RNDN);
        return mpfr_get_d(r27653, MPFR_RNDN);
}

static mpfr_t r27654, r27655, r27656, r27657, r27658, r27659, r27660, r27661, r27662, r27663, r27664;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27654);
        mpfr_init(r27655);
        mpfr_init(r27656);
        mpfr_init(r27657);
        mpfr_init(r27658);
        mpfr_init_set_str(r27659, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27660, "10", 10, MPFR_RNDN);
        mpfr_init(r27661);
        mpfr_init(r27662);
        mpfr_init(r27663);
        mpfr_init(r27664);
}

double f_fm(double a, double k, double m) {
        mpfr_set_d(r27654, k, MPFR_RNDN);
        mpfr_set_d(r27655, m, MPFR_RNDN);
        mpfr_pow(r27656, r27654, r27655, MPFR_RNDN);
        mpfr_set_d(r27657, a, MPFR_RNDN);
        mpfr_mul(r27658, r27656, r27657, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27661, r27660, r27654, MPFR_RNDN);
        mpfr_fma(r27662, r27661, r27654, r27659, MPFR_RNDN);
        mpfr_div(r27663, r27659, r27662, MPFR_RNDN);
        mpfr_mul(r27664, r27658, r27663, MPFR_RNDN);
        return mpfr_get_d(r27664, MPFR_RNDN);
}

static mpfr_t r27665, r27666, r27667, r27668, r27669, r27670, r27671, r27672, r27673, r27674, r27675;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27665);
        mpfr_init(r27666);
        mpfr_init(r27667);
        mpfr_init(r27668);
        mpfr_init(r27669);
        mpfr_init_set_str(r27670, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27671, "10", 10, MPFR_RNDN);
        mpfr_init(r27672);
        mpfr_init(r27673);
        mpfr_init(r27674);
        mpfr_init(r27675);
}

double f_dm(double a, double k, double m) {
        mpfr_set_d(r27665, k, MPFR_RNDN);
        mpfr_set_d(r27666, m, MPFR_RNDN);
        mpfr_pow(r27667, r27665, r27666, MPFR_RNDN);
        mpfr_set_d(r27668, a, MPFR_RNDN);
        mpfr_mul(r27669, r27667, r27668, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27672, r27671, r27665, MPFR_RNDN);
        mpfr_fma(r27673, r27672, r27665, r27670, MPFR_RNDN);
        mpfr_div(r27674, r27670, r27673, MPFR_RNDN);
        mpfr_mul(r27675, r27669, r27674, MPFR_RNDN);
        return mpfr_get_d(r27675, MPFR_RNDN);
}

