#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 r27351 = a;
        float r27352 = k;
        float r27353 = m;
        float r27354 = pow(r27352, r27353);
        float r27355 = r27351 * r27354;
        float r27356 = 1;
        float r27357 = 10;
        float r27358 = r27357 * r27352;
        float r27359 = r27356 + r27358;
        float r27360 = r27352 * r27352;
        float r27361 = r27359 + r27360;
        float r27362 = r27355 / r27361;
        return r27362;
}

double f_id(double a, double k, double m) {
        double r27363 = a;
        double r27364 = k;
        double r27365 = m;
        double r27366 = pow(r27364, r27365);
        double r27367 = r27363 * r27366;
        double r27368 = 1;
        double r27369 = 10;
        double r27370 = r27369 * r27364;
        double r27371 = r27368 + r27370;
        double r27372 = r27364 * r27364;
        double r27373 = r27371 + r27372;
        double r27374 = r27367 / r27373;
        return r27374;
}


double f_of(float a, float k, float m) {
        float r27375 = a;
        float r27376 = k;
        float r27377 = m;
        float r27378 = pow(r27376, r27377);
        float r27379 = r27375 * r27378;
        float r27380 = 1;
        float r27381 = 10;
        float r27382 = r27381 * r27376;
        float r27383 = r27380 + r27382;
        float r27384 = r27376 * r27376;
        float r27385 = r27383 + r27384;
        float r27386 = r27379 / r27385;
        return r27386;
}

double f_od(double a, double k, double m) {
        double r27387 = a;
        double r27388 = k;
        double r27389 = m;
        double r27390 = pow(r27388, r27389);
        double r27391 = r27387 * r27390;
        double r27392 = 1;
        double r27393 = 10;
        double r27394 = r27393 * r27388;
        double r27395 = r27392 + r27394;
        double r27396 = r27388 * r27388;
        double r27397 = r27395 + r27396;
        double r27398 = r27391 / r27397;
        return r27398;
}

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 r27399, r27400, r27401, r27402, r27403, r27404, r27405, r27406, r27407, r27408, r27409, r27410;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27399);
        mpfr_init(r27400);
        mpfr_init(r27401);
        mpfr_init(r27402);
        mpfr_init(r27403);
        mpfr_init_set_str(r27404, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27405, "10", 10, MPFR_RNDN);
        mpfr_init(r27406);
        mpfr_init(r27407);
        mpfr_init(r27408);
        mpfr_init(r27409);
        mpfr_init(r27410);
}

double f_im(double a, double k, double m) {
        mpfr_set_d(r27399, a, MPFR_RNDN);
        mpfr_set_d(r27400, k, MPFR_RNDN);
        mpfr_set_d(r27401, m, MPFR_RNDN);
        mpfr_pow(r27402, r27400, r27401, MPFR_RNDN);
        mpfr_mul(r27403, r27399, r27402, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r27406, r27405, r27400, MPFR_RNDN);
        mpfr_add(r27407, r27404, r27406, MPFR_RNDN);
        mpfr_mul(r27408, r27400, r27400, MPFR_RNDN);
        mpfr_add(r27409, r27407, r27408, MPFR_RNDN);
        mpfr_div(r27410, r27403, r27409, MPFR_RNDN);
        return mpfr_get_d(r27410, MPFR_RNDN);
}

static mpfr_t r27411, r27412, r27413, r27414, r27415, r27416, r27417, r27418, r27419, r27420, r27421, r27422;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27411);
        mpfr_init(r27412);
        mpfr_init(r27413);
        mpfr_init(r27414);
        mpfr_init(r27415);
        mpfr_init_set_str(r27416, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27417, "10", 10, MPFR_RNDN);
        mpfr_init(r27418);
        mpfr_init(r27419);
        mpfr_init(r27420);
        mpfr_init(r27421);
        mpfr_init(r27422);
}

double f_fm(double a, double k, double m) {
        mpfr_set_d(r27411, a, MPFR_RNDN);
        mpfr_set_d(r27412, k, MPFR_RNDN);
        mpfr_set_d(r27413, m, MPFR_RNDN);
        mpfr_pow(r27414, r27412, r27413, MPFR_RNDN);
        mpfr_mul(r27415, r27411, r27414, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r27418, r27417, r27412, MPFR_RNDN);
        mpfr_add(r27419, r27416, r27418, MPFR_RNDN);
        mpfr_mul(r27420, r27412, r27412, MPFR_RNDN);
        mpfr_add(r27421, r27419, r27420, MPFR_RNDN);
        mpfr_div(r27422, r27415, r27421, MPFR_RNDN);
        return mpfr_get_d(r27422, MPFR_RNDN);
}

static mpfr_t r27423, r27424, r27425, r27426, r27427, r27428, r27429, r27430, r27431, r27432, r27433, r27434;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27423);
        mpfr_init(r27424);
        mpfr_init(r27425);
        mpfr_init(r27426);
        mpfr_init(r27427);
        mpfr_init_set_str(r27428, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27429, "10", 10, MPFR_RNDN);
        mpfr_init(r27430);
        mpfr_init(r27431);
        mpfr_init(r27432);
        mpfr_init(r27433);
        mpfr_init(r27434);
}

double f_dm(double a, double k, double m) {
        mpfr_set_d(r27423, a, MPFR_RNDN);
        mpfr_set_d(r27424, k, MPFR_RNDN);
        mpfr_set_d(r27425, m, MPFR_RNDN);
        mpfr_pow(r27426, r27424, r27425, MPFR_RNDN);
        mpfr_mul(r27427, r27423, r27426, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r27430, r27429, r27424, MPFR_RNDN);
        mpfr_add(r27431, r27428, r27430, MPFR_RNDN);
        mpfr_mul(r27432, r27424, r27424, MPFR_RNDN);
        mpfr_add(r27433, r27431, r27432, MPFR_RNDN);
        mpfr_div(r27434, r27427, r27433, MPFR_RNDN);
        return mpfr_get_d(r27434, MPFR_RNDN);
}

