#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 r30464895 = a;
        float r30464896 = k;
        float r30464897 = m;
        float r30464898 = pow(r30464896, r30464897);
        float r30464899 = r30464895 * r30464898;
        float r30464900 = 1;
        float r30464901 = 10;
        float r30464902 = r30464901 * r30464896;
        float r30464903 = r30464900 + r30464902;
        float r30464904 = r30464896 * r30464896;
        float r30464905 = r30464903 + r30464904;
        float r30464906 = r30464899 / r30464905;
        return r30464906;
}

double f_id(double a, double k, double m) {
        double r30464907 = a;
        double r30464908 = k;
        double r30464909 = m;
        double r30464910 = pow(r30464908, r30464909);
        double r30464911 = r30464907 * r30464910;
        double r30464912 = 1;
        double r30464913 = 10;
        double r30464914 = r30464913 * r30464908;
        double r30464915 = r30464912 + r30464914;
        double r30464916 = r30464908 * r30464908;
        double r30464917 = r30464915 + r30464916;
        double r30464918 = r30464911 / r30464917;
        return r30464918;
}


double f_of(float a, float k, float m) {
        float r30464919 = k;
        float r30464920 = m;
        float r30464921 = pow(r30464919, r30464920);
        float r30464922 = 1;
        float r30464923 = a;
        float r30464924 = r30464922 / r30464923;
        float r30464925 = r30464919 / r30464923;
        float r30464926 = 10;
        float r30464927 = r30464926 + r30464919;
        float r30464928 = r30464925 * r30464927;
        float r30464929 = r30464924 + r30464928;
        float r30464930 = r30464921 / r30464929;
        return r30464930;
}

double f_od(double a, double k, double m) {
        double r30464931 = k;
        double r30464932 = m;
        double r30464933 = pow(r30464931, r30464932);
        double r30464934 = 1;
        double r30464935 = a;
        double r30464936 = r30464934 / r30464935;
        double r30464937 = r30464931 / r30464935;
        double r30464938 = 10;
        double r30464939 = r30464938 + r30464931;
        double r30464940 = r30464937 * r30464939;
        double r30464941 = r30464936 + r30464940;
        double r30464942 = r30464933 / r30464941;
        return r30464942;
}

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 r30464943, r30464944, r30464945, r30464946, r30464947, r30464948, r30464949, r30464950, r30464951, r30464952, r30464953, r30464954;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r30464943);
        mpfr_init(r30464944);
        mpfr_init(r30464945);
        mpfr_init(r30464946);
        mpfr_init(r30464947);
        mpfr_init_set_str(r30464948, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r30464949, "10", 10, MPFR_RNDN);
        mpfr_init(r30464950);
        mpfr_init(r30464951);
        mpfr_init(r30464952);
        mpfr_init(r30464953);
        mpfr_init(r30464954);
}

double f_im(double a, double k, double m) {
        mpfr_set_d(r30464943, a, MPFR_RNDN);
        mpfr_set_d(r30464944, k, MPFR_RNDN);
        mpfr_set_d(r30464945, m, MPFR_RNDN);
        mpfr_pow(r30464946, r30464944, r30464945, MPFR_RNDN);
        mpfr_mul(r30464947, r30464943, r30464946, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r30464950, r30464949, r30464944, MPFR_RNDN);
        mpfr_add(r30464951, r30464948, r30464950, MPFR_RNDN);
        mpfr_mul(r30464952, r30464944, r30464944, MPFR_RNDN);
        mpfr_add(r30464953, r30464951, r30464952, MPFR_RNDN);
        mpfr_div(r30464954, r30464947, r30464953, MPFR_RNDN);
        return mpfr_get_d(r30464954, MPFR_RNDN);
}

static mpfr_t r30464955, r30464956, r30464957, r30464958, r30464959, r30464960, r30464961, r30464962, r30464963, r30464964, r30464965, r30464966;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r30464955);
        mpfr_init(r30464956);
        mpfr_init(r30464957);
        mpfr_init_set_str(r30464958, "1", 10, MPFR_RNDN);
        mpfr_init(r30464959);
        mpfr_init(r30464960);
        mpfr_init(r30464961);
        mpfr_init_set_str(r30464962, "10", 10, MPFR_RNDN);
        mpfr_init(r30464963);
        mpfr_init(r30464964);
        mpfr_init(r30464965);
        mpfr_init(r30464966);
}

double f_fm(double a, double k, double m) {
        mpfr_set_d(r30464955, k, MPFR_RNDN);
        mpfr_set_d(r30464956, m, MPFR_RNDN);
        mpfr_pow(r30464957, r30464955, r30464956, MPFR_RNDN);
        ;
        mpfr_set_d(r30464959, a, MPFR_RNDN);
        mpfr_div(r30464960, r30464958, r30464959, MPFR_RNDN);
        mpfr_div(r30464961, r30464955, r30464959, MPFR_RNDN);
        ;
        mpfr_add(r30464963, r30464962, r30464955, MPFR_RNDN);
        mpfr_mul(r30464964, r30464961, r30464963, MPFR_RNDN);
        mpfr_add(r30464965, r30464960, r30464964, MPFR_RNDN);
        mpfr_div(r30464966, r30464957, r30464965, MPFR_RNDN);
        return mpfr_get_d(r30464966, MPFR_RNDN);
}

static mpfr_t r30464967, r30464968, r30464969, r30464970, r30464971, r30464972, r30464973, r30464974, r30464975, r30464976, r30464977, r30464978;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r30464967);
        mpfr_init(r30464968);
        mpfr_init(r30464969);
        mpfr_init_set_str(r30464970, "1", 10, MPFR_RNDN);
        mpfr_init(r30464971);
        mpfr_init(r30464972);
        mpfr_init(r30464973);
        mpfr_init_set_str(r30464974, "10", 10, MPFR_RNDN);
        mpfr_init(r30464975);
        mpfr_init(r30464976);
        mpfr_init(r30464977);
        mpfr_init(r30464978);
}

double f_dm(double a, double k, double m) {
        mpfr_set_d(r30464967, k, MPFR_RNDN);
        mpfr_set_d(r30464968, m, MPFR_RNDN);
        mpfr_pow(r30464969, r30464967, r30464968, MPFR_RNDN);
        ;
        mpfr_set_d(r30464971, a, MPFR_RNDN);
        mpfr_div(r30464972, r30464970, r30464971, MPFR_RNDN);
        mpfr_div(r30464973, r30464967, r30464971, MPFR_RNDN);
        ;
        mpfr_add(r30464975, r30464974, r30464967, MPFR_RNDN);
        mpfr_mul(r30464976, r30464973, r30464975, MPFR_RNDN);
        mpfr_add(r30464977, r30464972, r30464976, MPFR_RNDN);
        mpfr_div(r30464978, r30464969, r30464977, MPFR_RNDN);
        return mpfr_get_d(r30464978, MPFR_RNDN);
}

