#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 r33109 = a;
        float r33110 = k;
        float r33111 = m;
        float r33112 = pow(r33110, r33111);
        float r33113 = r33109 * r33112;
        float r33114 = 1;
        float r33115 = 10;
        float r33116 = r33115 * r33110;
        float r33117 = r33114 + r33116;
        float r33118 = r33110 * r33110;
        float r33119 = r33117 + r33118;
        float r33120 = r33113 / r33119;
        return r33120;
}

double f_id(double a, double k, double m) {
        double r33121 = a;
        double r33122 = k;
        double r33123 = m;
        double r33124 = pow(r33122, r33123);
        double r33125 = r33121 * r33124;
        double r33126 = 1;
        double r33127 = 10;
        double r33128 = r33127 * r33122;
        double r33129 = r33126 + r33128;
        double r33130 = r33122 * r33122;
        double r33131 = r33129 + r33130;
        double r33132 = r33125 / r33131;
        return r33132;
}


double f_of(float a, float k, float m) {
        float r33133 = k;
        float r33134 = m;
        float r33135 = pow(r33133, r33134);
        float r33136 = 1;
        float r33137 = r33135 / r33136;
        float r33138 = a;
        float r33139 = 10;
        float r33140 = r33139 + r33133;
        float r33141 = r33140 * r33133;
        float r33142 = r33136 + r33141;
        float r33143 = r33138 / r33142;
        float r33144 = r33137 * r33143;
        return r33144;
}

double f_od(double a, double k, double m) {
        double r33145 = k;
        double r33146 = m;
        double r33147 = pow(r33145, r33146);
        double r33148 = 1;
        double r33149 = r33147 / r33148;
        double r33150 = a;
        double r33151 = 10;
        double r33152 = r33151 + r33145;
        double r33153 = r33152 * r33145;
        double r33154 = r33148 + r33153;
        double r33155 = r33150 / r33154;
        double r33156 = r33149 * r33155;
        return r33156;
}

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 r33157, r33158, r33159, r33160, r33161, r33162, r33163, r33164, r33165, r33166, r33167, r33168;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r33157);
        mpfr_init(r33158);
        mpfr_init(r33159);
        mpfr_init(r33160);
        mpfr_init(r33161);
        mpfr_init_set_str(r33162, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33163, "10", 10, MPFR_RNDN);
        mpfr_init(r33164);
        mpfr_init(r33165);
        mpfr_init(r33166);
        mpfr_init(r33167);
        mpfr_init(r33168);
}

double f_im(double a, double k, double m) {
        mpfr_set_d(r33157, a, MPFR_RNDN);
        mpfr_set_d(r33158, k, MPFR_RNDN);
        mpfr_set_d(r33159, m, MPFR_RNDN);
        mpfr_pow(r33160, r33158, r33159, MPFR_RNDN);
        mpfr_mul(r33161, r33157, r33160, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r33164, r33163, r33158, MPFR_RNDN);
        mpfr_add(r33165, r33162, r33164, MPFR_RNDN);
        mpfr_mul(r33166, r33158, r33158, MPFR_RNDN);
        mpfr_add(r33167, r33165, r33166, MPFR_RNDN);
        mpfr_div(r33168, r33161, r33167, MPFR_RNDN);
        return mpfr_get_d(r33168, MPFR_RNDN);
}

static mpfr_t r33169, r33170, r33171, r33172, r33173, r33174, r33175, r33176, r33177, r33178, r33179, r33180;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r33169);
        mpfr_init(r33170);
        mpfr_init(r33171);
        mpfr_init_set_str(r33172, "1", 10, MPFR_RNDN);
        mpfr_init(r33173);
        mpfr_init(r33174);
        mpfr_init_set_str(r33175, "10", 10, MPFR_RNDN);
        mpfr_init(r33176);
        mpfr_init(r33177);
        mpfr_init(r33178);
        mpfr_init(r33179);
        mpfr_init(r33180);
}

double f_fm(double a, double k, double m) {
        mpfr_set_d(r33169, k, MPFR_RNDN);
        mpfr_set_d(r33170, m, MPFR_RNDN);
        mpfr_pow(r33171, r33169, r33170, MPFR_RNDN);
        ;
        mpfr_div(r33173, r33171, r33172, MPFR_RNDN);
        mpfr_set_d(r33174, a, MPFR_RNDN);
        ;
        mpfr_add(r33176, r33175, r33169, MPFR_RNDN);
        mpfr_mul(r33177, r33176, r33169, MPFR_RNDN);
        mpfr_add(r33178, r33172, r33177, MPFR_RNDN);
        mpfr_div(r33179, r33174, r33178, MPFR_RNDN);
        mpfr_mul(r33180, r33173, r33179, MPFR_RNDN);
        return mpfr_get_d(r33180, MPFR_RNDN);
}

static mpfr_t r33181, r33182, r33183, r33184, r33185, r33186, r33187, r33188, r33189, r33190, r33191, r33192;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r33181);
        mpfr_init(r33182);
        mpfr_init(r33183);
        mpfr_init_set_str(r33184, "1", 10, MPFR_RNDN);
        mpfr_init(r33185);
        mpfr_init(r33186);
        mpfr_init_set_str(r33187, "10", 10, MPFR_RNDN);
        mpfr_init(r33188);
        mpfr_init(r33189);
        mpfr_init(r33190);
        mpfr_init(r33191);
        mpfr_init(r33192);
}

double f_dm(double a, double k, double m) {
        mpfr_set_d(r33181, k, MPFR_RNDN);
        mpfr_set_d(r33182, m, MPFR_RNDN);
        mpfr_pow(r33183, r33181, r33182, MPFR_RNDN);
        ;
        mpfr_div(r33185, r33183, r33184, MPFR_RNDN);
        mpfr_set_d(r33186, a, MPFR_RNDN);
        ;
        mpfr_add(r33188, r33187, r33181, MPFR_RNDN);
        mpfr_mul(r33189, r33188, r33181, MPFR_RNDN);
        mpfr_add(r33190, r33184, r33189, MPFR_RNDN);
        mpfr_div(r33191, r33186, r33190, MPFR_RNDN);
        mpfr_mul(r33192, r33185, r33191, MPFR_RNDN);
        return mpfr_get_d(r33192, MPFR_RNDN);
}

