#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 r33530 = a;
        float r33531 = k;
        float r33532 = m;
        float r33533 = pow(r33531, r33532);
        float r33534 = r33530 * r33533;
        float r33535 = 1;
        float r33536 = 10;
        float r33537 = r33536 * r33531;
        float r33538 = r33535 + r33537;
        float r33539 = r33531 * r33531;
        float r33540 = r33538 + r33539;
        float r33541 = r33534 / r33540;
        return r33541;
}

double f_id(double a, double k, double m) {
        double r33542 = a;
        double r33543 = k;
        double r33544 = m;
        double r33545 = pow(r33543, r33544);
        double r33546 = r33542 * r33545;
        double r33547 = 1;
        double r33548 = 10;
        double r33549 = r33548 * r33543;
        double r33550 = r33547 + r33549;
        double r33551 = r33543 * r33543;
        double r33552 = r33550 + r33551;
        double r33553 = r33546 / r33552;
        return r33553;
}


double f_of(float a, float k, float m) {
        float r33554 = k;
        float r33555 = m;
        float r33556 = pow(r33554, r33555);
        float r33557 = 1;
        float r33558 = r33556 / r33557;
        float r33559 = a;
        float r33560 = 10;
        float r33561 = r33560 + r33554;
        float r33562 = r33561 * r33554;
        float r33563 = r33557 + r33562;
        float r33564 = r33559 / r33563;
        float r33565 = r33558 * r33564;
        return r33565;
}

double f_od(double a, double k, double m) {
        double r33566 = k;
        double r33567 = m;
        double r33568 = pow(r33566, r33567);
        double r33569 = 1;
        double r33570 = r33568 / r33569;
        double r33571 = a;
        double r33572 = 10;
        double r33573 = r33572 + r33566;
        double r33574 = r33573 * r33566;
        double r33575 = r33569 + r33574;
        double r33576 = r33571 / r33575;
        double r33577 = r33570 * r33576;
        return r33577;
}

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 r33578, r33579, r33580, r33581, r33582, r33583, r33584, r33585, r33586, r33587, r33588, r33589;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r33578);
        mpfr_init(r33579);
        mpfr_init(r33580);
        mpfr_init(r33581);
        mpfr_init(r33582);
        mpfr_init_set_str(r33583, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r33584, "10", 10, MPFR_RNDN);
        mpfr_init(r33585);
        mpfr_init(r33586);
        mpfr_init(r33587);
        mpfr_init(r33588);
        mpfr_init(r33589);
}

double f_im(double a, double k, double m) {
        mpfr_set_d(r33578, a, MPFR_RNDN);
        mpfr_set_d(r33579, k, MPFR_RNDN);
        mpfr_set_d(r33580, m, MPFR_RNDN);
        mpfr_pow(r33581, r33579, r33580, MPFR_RNDN);
        mpfr_mul(r33582, r33578, r33581, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r33585, r33584, r33579, MPFR_RNDN);
        mpfr_add(r33586, r33583, r33585, MPFR_RNDN);
        mpfr_mul(r33587, r33579, r33579, MPFR_RNDN);
        mpfr_add(r33588, r33586, r33587, MPFR_RNDN);
        mpfr_div(r33589, r33582, r33588, MPFR_RNDN);
        return mpfr_get_d(r33589, MPFR_RNDN);
}

static mpfr_t r33590, r33591, r33592, r33593, r33594, r33595, r33596, r33597, r33598, r33599, r33600, r33601;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r33590);
        mpfr_init(r33591);
        mpfr_init(r33592);
        mpfr_init_set_str(r33593, "1", 10, MPFR_RNDN);
        mpfr_init(r33594);
        mpfr_init(r33595);
        mpfr_init_set_str(r33596, "10", 10, MPFR_RNDN);
        mpfr_init(r33597);
        mpfr_init(r33598);
        mpfr_init(r33599);
        mpfr_init(r33600);
        mpfr_init(r33601);
}

double f_fm(double a, double k, double m) {
        mpfr_set_d(r33590, k, MPFR_RNDN);
        mpfr_set_d(r33591, m, MPFR_RNDN);
        mpfr_pow(r33592, r33590, r33591, MPFR_RNDN);
        ;
        mpfr_div(r33594, r33592, r33593, MPFR_RNDN);
        mpfr_set_d(r33595, a, MPFR_RNDN);
        ;
        mpfr_add(r33597, r33596, r33590, MPFR_RNDN);
        mpfr_mul(r33598, r33597, r33590, MPFR_RNDN);
        mpfr_add(r33599, r33593, r33598, MPFR_RNDN);
        mpfr_div(r33600, r33595, r33599, MPFR_RNDN);
        mpfr_mul(r33601, r33594, r33600, MPFR_RNDN);
        return mpfr_get_d(r33601, MPFR_RNDN);
}

static mpfr_t r33602, r33603, r33604, r33605, r33606, r33607, r33608, r33609, r33610, r33611, r33612, r33613;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r33602);
        mpfr_init(r33603);
        mpfr_init(r33604);
        mpfr_init_set_str(r33605, "1", 10, MPFR_RNDN);
        mpfr_init(r33606);
        mpfr_init(r33607);
        mpfr_init_set_str(r33608, "10", 10, MPFR_RNDN);
        mpfr_init(r33609);
        mpfr_init(r33610);
        mpfr_init(r33611);
        mpfr_init(r33612);
        mpfr_init(r33613);
}

double f_dm(double a, double k, double m) {
        mpfr_set_d(r33602, k, MPFR_RNDN);
        mpfr_set_d(r33603, m, MPFR_RNDN);
        mpfr_pow(r33604, r33602, r33603, MPFR_RNDN);
        ;
        mpfr_div(r33606, r33604, r33605, MPFR_RNDN);
        mpfr_set_d(r33607, a, MPFR_RNDN);
        ;
        mpfr_add(r33609, r33608, r33602, MPFR_RNDN);
        mpfr_mul(r33610, r33609, r33602, MPFR_RNDN);
        mpfr_add(r33611, r33605, r33610, MPFR_RNDN);
        mpfr_div(r33612, r33607, r33611, MPFR_RNDN);
        mpfr_mul(r33613, r33606, r33612, MPFR_RNDN);
        return mpfr_get_d(r33613, MPFR_RNDN);
}

