#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 r27176 = a;
        float r27177 = k;
        float r27178 = m;
        float r27179 = pow(r27177, r27178);
        float r27180 = r27176 * r27179;
        float r27181 = 1;
        float r27182 = 10;
        float r27183 = r27182 * r27177;
        float r27184 = r27181 + r27183;
        float r27185 = r27177 * r27177;
        float r27186 = r27184 + r27185;
        float r27187 = r27180 / r27186;
        return r27187;
}

double f_id(double a, double k, double m) {
        double r27188 = a;
        double r27189 = k;
        double r27190 = m;
        double r27191 = pow(r27189, r27190);
        double r27192 = r27188 * r27191;
        double r27193 = 1;
        double r27194 = 10;
        double r27195 = r27194 * r27189;
        double r27196 = r27193 + r27195;
        double r27197 = r27189 * r27189;
        double r27198 = r27196 + r27197;
        double r27199 = r27192 / r27198;
        return r27199;
}


double f_of(float a, float k, float m) {
        float r27200 = k;
        float r27201 = m;
        float r27202 = pow(r27200, r27201);
        float r27203 = a;
        float r27204 = 10;
        float r27205 = r27204 + r27200;
        float r27206 = 1;
        float r27207 = fma(r27205, r27200, r27206);
        float r27208 = r27203 / r27207;
        float r27209 = r27202 * r27208;
        return r27209;
}

double f_od(double a, double k, double m) {
        double r27210 = k;
        double r27211 = m;
        double r27212 = pow(r27210, r27211);
        double r27213 = a;
        double r27214 = 10;
        double r27215 = r27214 + r27210;
        double r27216 = 1;
        double r27217 = fma(r27215, r27210, r27216);
        double r27218 = r27213 / r27217;
        double r27219 = r27212 * r27218;
        return r27219;
}

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 r27220, r27221, r27222, r27223, r27224, r27225, r27226, r27227, r27228, r27229, r27230, r27231;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27220);
        mpfr_init(r27221);
        mpfr_init(r27222);
        mpfr_init(r27223);
        mpfr_init(r27224);
        mpfr_init_set_str(r27225, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27226, "10", 10, MPFR_RNDN);
        mpfr_init(r27227);
        mpfr_init(r27228);
        mpfr_init(r27229);
        mpfr_init(r27230);
        mpfr_init(r27231);
}

double f_im(double a, double k, double m) {
        mpfr_set_d(r27220, a, MPFR_RNDN);
        mpfr_set_d(r27221, k, MPFR_RNDN);
        mpfr_set_d(r27222, m, MPFR_RNDN);
        mpfr_pow(r27223, r27221, r27222, MPFR_RNDN);
        mpfr_mul(r27224, r27220, r27223, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r27227, r27226, r27221, MPFR_RNDN);
        mpfr_add(r27228, r27225, r27227, MPFR_RNDN);
        mpfr_mul(r27229, r27221, r27221, MPFR_RNDN);
        mpfr_add(r27230, r27228, r27229, MPFR_RNDN);
        mpfr_div(r27231, r27224, r27230, MPFR_RNDN);
        return mpfr_get_d(r27231, MPFR_RNDN);
}

static mpfr_t r27232, r27233, r27234, r27235, r27236, r27237, r27238, r27239, r27240, r27241;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27232);
        mpfr_init(r27233);
        mpfr_init(r27234);
        mpfr_init(r27235);
        mpfr_init_set_str(r27236, "10", 10, MPFR_RNDN);
        mpfr_init(r27237);
        mpfr_init_set_str(r27238, "1", 10, MPFR_RNDN);
        mpfr_init(r27239);
        mpfr_init(r27240);
        mpfr_init(r27241);
}

double f_fm(double a, double k, double m) {
        mpfr_set_d(r27232, k, MPFR_RNDN);
        mpfr_set_d(r27233, m, MPFR_RNDN);
        mpfr_pow(r27234, r27232, r27233, MPFR_RNDN);
        mpfr_set_d(r27235, a, MPFR_RNDN);
        ;
        mpfr_add(r27237, r27236, r27232, MPFR_RNDN);
        ;
        mpfr_fma(r27239, r27237, r27232, r27238, MPFR_RNDN);
        mpfr_div(r27240, r27235, r27239, MPFR_RNDN);
        mpfr_mul(r27241, r27234, r27240, MPFR_RNDN);
        return mpfr_get_d(r27241, MPFR_RNDN);
}

static mpfr_t r27242, r27243, r27244, r27245, r27246, r27247, r27248, r27249, r27250, r27251;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27242);
        mpfr_init(r27243);
        mpfr_init(r27244);
        mpfr_init(r27245);
        mpfr_init_set_str(r27246, "10", 10, MPFR_RNDN);
        mpfr_init(r27247);
        mpfr_init_set_str(r27248, "1", 10, MPFR_RNDN);
        mpfr_init(r27249);
        mpfr_init(r27250);
        mpfr_init(r27251);
}

double f_dm(double a, double k, double m) {
        mpfr_set_d(r27242, k, MPFR_RNDN);
        mpfr_set_d(r27243, m, MPFR_RNDN);
        mpfr_pow(r27244, r27242, r27243, MPFR_RNDN);
        mpfr_set_d(r27245, a, MPFR_RNDN);
        ;
        mpfr_add(r27247, r27246, r27242, MPFR_RNDN);
        ;
        mpfr_fma(r27249, r27247, r27242, r27248, MPFR_RNDN);
        mpfr_div(r27250, r27245, r27249, MPFR_RNDN);
        mpfr_mul(r27251, r27244, r27250, MPFR_RNDN);
        return mpfr_get_d(r27251, MPFR_RNDN);
}

