#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 r27283 = a;
        float r27284 = k;
        float r27285 = m;
        float r27286 = pow(r27284, r27285);
        float r27287 = r27283 * r27286;
        float r27288 = 1;
        float r27289 = 10;
        float r27290 = r27289 * r27284;
        float r27291 = r27288 + r27290;
        float r27292 = r27284 * r27284;
        float r27293 = r27291 + r27292;
        float r27294 = r27287 / r27293;
        return r27294;
}

double f_id(double a, double k, double m) {
        double r27295 = a;
        double r27296 = k;
        double r27297 = m;
        double r27298 = pow(r27296, r27297);
        double r27299 = r27295 * r27298;
        double r27300 = 1;
        double r27301 = 10;
        double r27302 = r27301 * r27296;
        double r27303 = r27300 + r27302;
        double r27304 = r27296 * r27296;
        double r27305 = r27303 + r27304;
        double r27306 = r27299 / r27305;
        return r27306;
}


double f_of(float a, float k, float m) {
        float r27307 = k;
        float r27308 = log(r27307);
        float r27309 = a;
        float r27310 = m;
        float r27311 = r27309 * r27310;
        float r27312 = r27308 * r27311;
        float r27313 = r27312 + r27309;
        float r27314 = 1;
        float r27315 = 10;
        float r27316 = r27315 + r27307;
        float r27317 = r27316 * r27307;
        float r27318 = r27314 + r27317;
        float r27319 = r27313 / r27318;
        float r27320 = -1.332932409217441e-302;
        bool r27321 = r27319 <= r27320;
        float r27322 = pow(r27307, r27310);
        float r27323 = r27309 * r27322;
        float r27324 = r27315 * r27307;
        float r27325 = r27314 + r27324;
        float r27326 = r27307 * r27307;
        float r27327 = r27325 + r27326;
        float r27328 = r27323 / r27327;
        float r27329 = 4.096510593335e-310;
        bool r27330 = r27319 <= r27329;
        float r27331 = r27309 / r27307;
        float r27332 = r27331 / r27307;
        float r27333 = r27315 / r27307;
        float r27334 = r27333 + r27314;
        float r27335 = r27332 * r27334;
        float r27336 = 99;
        float r27337 = r27336 * r27309;
        float r27338 = 4;
        float r27339 = pow(r27307, r27338);
        float r27340 = r27337 / r27339;
        float r27341 = r27335 + r27340;
        float r27342 = r27341 * r27322;
        float r27343 = r27309 / r27318;
        float r27344 = r27322 * r27343;
        float r27345 = r27330 ? r27342 : r27344;
        float r27346 = r27321 ? r27328 : r27345;
        return r27346;
}

double f_od(double a, double k, double m) {
        double r27347 = k;
        double r27348 = log(r27347);
        double r27349 = a;
        double r27350 = m;
        double r27351 = r27349 * r27350;
        double r27352 = r27348 * r27351;
        double r27353 = r27352 + r27349;
        double r27354 = 1;
        double r27355 = 10;
        double r27356 = r27355 + r27347;
        double r27357 = r27356 * r27347;
        double r27358 = r27354 + r27357;
        double r27359 = r27353 / r27358;
        double r27360 = -1.332932409217441e-302;
        bool r27361 = r27359 <= r27360;
        double r27362 = pow(r27347, r27350);
        double r27363 = r27349 * r27362;
        double r27364 = r27355 * r27347;
        double r27365 = r27354 + r27364;
        double r27366 = r27347 * r27347;
        double r27367 = r27365 + r27366;
        double r27368 = r27363 / r27367;
        double r27369 = 4.096510593335e-310;
        bool r27370 = r27359 <= r27369;
        double r27371 = r27349 / r27347;
        double r27372 = r27371 / r27347;
        double r27373 = r27355 / r27347;
        double r27374 = r27373 + r27354;
        double r27375 = r27372 * r27374;
        double r27376 = 99;
        double r27377 = r27376 * r27349;
        double r27378 = 4;
        double r27379 = pow(r27347, r27378);
        double r27380 = r27377 / r27379;
        double r27381 = r27375 + r27380;
        double r27382 = r27381 * r27362;
        double r27383 = r27349 / r27358;
        double r27384 = r27362 * r27383;
        double r27385 = r27370 ? r27382 : r27384;
        double r27386 = r27361 ? r27368 : r27385;
        return r27386;
}

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 r27387, r27388, r27389, r27390, r27391, r27392, r27393, r27394, r27395, r27396, r27397, r27398;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r27387);
        mpfr_init(r27388);
        mpfr_init(r27389);
        mpfr_init(r27390);
        mpfr_init(r27391);
        mpfr_init_set_str(r27392, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27393, "10", 10, MPFR_RNDN);
        mpfr_init(r27394);
        mpfr_init(r27395);
        mpfr_init(r27396);
        mpfr_init(r27397);
        mpfr_init(r27398);
}

double f_im(double a, double k, double m) {
        mpfr_set_d(r27387, a, MPFR_RNDN);
        mpfr_set_d(r27388, k, MPFR_RNDN);
        mpfr_set_d(r27389, m, MPFR_RNDN);
        mpfr_pow(r27390, r27388, r27389, MPFR_RNDN);
        mpfr_mul(r27391, r27387, r27390, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r27394, r27393, r27388, MPFR_RNDN);
        mpfr_add(r27395, r27392, r27394, MPFR_RNDN);
        mpfr_mul(r27396, r27388, r27388, MPFR_RNDN);
        mpfr_add(r27397, r27395, r27396, MPFR_RNDN);
        mpfr_div(r27398, r27391, r27397, MPFR_RNDN);
        return mpfr_get_d(r27398, MPFR_RNDN);
}

static mpfr_t r27399, r27400, r27401, r27402, r27403, r27404, r27405, r27406, r27407, r27408, r27409, r27410, r27411, r27412, r27413, r27414, r27415, r27416, r27417, r27418, r27419, r27420, r27421, r27422, r27423, r27424, r27425, r27426, r27427, r27428, r27429, r27430, r27431, r27432, r27433, r27434, r27435, r27436, r27437, r27438;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27399);
        mpfr_init(r27400);
        mpfr_init(r27401);
        mpfr_init(r27402);
        mpfr_init(r27403);
        mpfr_init(r27404);
        mpfr_init(r27405);
        mpfr_init_set_str(r27406, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27407, "10", 10, MPFR_RNDN);
        mpfr_init(r27408);
        mpfr_init(r27409);
        mpfr_init(r27410);
        mpfr_init(r27411);
        mpfr_init_set_str(r27412, "-1.332932409217441e-302", 10, MPFR_RNDN);
        mpfr_init(r27413);
        mpfr_init(r27414);
        mpfr_init(r27415);
        mpfr_init(r27416);
        mpfr_init(r27417);
        mpfr_init(r27418);
        mpfr_init(r27419);
        mpfr_init(r27420);
        mpfr_init_set_str(r27421, "4.096510593335e-310", 10, MPFR_RNDN);
        mpfr_init(r27422);
        mpfr_init(r27423);
        mpfr_init(r27424);
        mpfr_init(r27425);
        mpfr_init(r27426);
        mpfr_init(r27427);
        mpfr_init_set_str(r27428, "99", 10, MPFR_RNDN);
        mpfr_init(r27429);
        mpfr_init_set_str(r27430, "4", 10, MPFR_RNDN);
        mpfr_init(r27431);
        mpfr_init(r27432);
        mpfr_init(r27433);
        mpfr_init(r27434);
        mpfr_init(r27435);
        mpfr_init(r27436);
        mpfr_init(r27437);
        mpfr_init(r27438);
}

double f_fm(double a, double k, double m) {
        mpfr_set_d(r27399, k, MPFR_RNDN);
        mpfr_log(r27400, r27399, MPFR_RNDN);
        mpfr_set_d(r27401, a, MPFR_RNDN);
        mpfr_set_d(r27402, m, MPFR_RNDN);
        mpfr_mul(r27403, r27401, r27402, MPFR_RNDN);
        mpfr_mul(r27404, r27400, r27403, MPFR_RNDN);
        mpfr_add(r27405, r27404, r27401, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27408, r27407, r27399, MPFR_RNDN);
        mpfr_mul(r27409, r27408, r27399, MPFR_RNDN);
        mpfr_add(r27410, r27406, r27409, MPFR_RNDN);
        mpfr_div(r27411, r27405, r27410, MPFR_RNDN);
        ;
        mpfr_set_si(r27413, mpfr_cmp(r27411, r27412) <= 0, MPFR_RNDN);
        mpfr_pow(r27414, r27399, r27402, MPFR_RNDN);
        mpfr_mul(r27415, r27401, r27414, MPFR_RNDN);
        mpfr_mul(r27416, r27407, r27399, MPFR_RNDN);
        mpfr_add(r27417, r27406, r27416, MPFR_RNDN);
        mpfr_mul(r27418, r27399, r27399, MPFR_RNDN);
        mpfr_add(r27419, r27417, r27418, MPFR_RNDN);
        mpfr_div(r27420, r27415, r27419, MPFR_RNDN);
        ;
        mpfr_set_si(r27422, mpfr_cmp(r27411, r27421) <= 0, MPFR_RNDN);
        mpfr_div(r27423, r27401, r27399, MPFR_RNDN);
        mpfr_div(r27424, r27423, r27399, MPFR_RNDN);
        mpfr_div(r27425, r27407, r27399, MPFR_RNDN);
        mpfr_add(r27426, r27425, r27406, MPFR_RNDN);
        mpfr_mul(r27427, r27424, r27426, MPFR_RNDN);
        ;
        mpfr_mul(r27429, r27428, r27401, MPFR_RNDN);
        ;
        mpfr_pow(r27431, r27399, r27430, MPFR_RNDN);
        mpfr_div(r27432, r27429, r27431, MPFR_RNDN);
        mpfr_add(r27433, r27427, r27432, MPFR_RNDN);
        mpfr_mul(r27434, r27433, r27414, MPFR_RNDN);
        mpfr_div(r27435, r27401, r27410, MPFR_RNDN);
        mpfr_mul(r27436, r27414, r27435, MPFR_RNDN);
        if (mpfr_get_si(r27422, MPFR_RNDN)) { mpfr_set(r27437, r27434, MPFR_RNDN); } else { mpfr_set(r27437, r27436, MPFR_RNDN); };
        if (mpfr_get_si(r27413, MPFR_RNDN)) { mpfr_set(r27438, r27420, MPFR_RNDN); } else { mpfr_set(r27438, r27437, MPFR_RNDN); };
        return mpfr_get_d(r27438, MPFR_RNDN);
}

static mpfr_t r27439, r27440, r27441, r27442, r27443, r27444, r27445, r27446, r27447, r27448, r27449, r27450, r27451, r27452, r27453, r27454, r27455, r27456, r27457, r27458, r27459, r27460, r27461, r27462, r27463, r27464, r27465, r27466, r27467, r27468, r27469, r27470, r27471, r27472, r27473, r27474, r27475, r27476, r27477, r27478;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27439);
        mpfr_init(r27440);
        mpfr_init(r27441);
        mpfr_init(r27442);
        mpfr_init(r27443);
        mpfr_init(r27444);
        mpfr_init(r27445);
        mpfr_init_set_str(r27446, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27447, "10", 10, MPFR_RNDN);
        mpfr_init(r27448);
        mpfr_init(r27449);
        mpfr_init(r27450);
        mpfr_init(r27451);
        mpfr_init_set_str(r27452, "-1.332932409217441e-302", 10, MPFR_RNDN);
        mpfr_init(r27453);
        mpfr_init(r27454);
        mpfr_init(r27455);
        mpfr_init(r27456);
        mpfr_init(r27457);
        mpfr_init(r27458);
        mpfr_init(r27459);
        mpfr_init(r27460);
        mpfr_init_set_str(r27461, "4.096510593335e-310", 10, MPFR_RNDN);
        mpfr_init(r27462);
        mpfr_init(r27463);
        mpfr_init(r27464);
        mpfr_init(r27465);
        mpfr_init(r27466);
        mpfr_init(r27467);
        mpfr_init_set_str(r27468, "99", 10, MPFR_RNDN);
        mpfr_init(r27469);
        mpfr_init_set_str(r27470, "4", 10, MPFR_RNDN);
        mpfr_init(r27471);
        mpfr_init(r27472);
        mpfr_init(r27473);
        mpfr_init(r27474);
        mpfr_init(r27475);
        mpfr_init(r27476);
        mpfr_init(r27477);
        mpfr_init(r27478);
}

double f_dm(double a, double k, double m) {
        mpfr_set_d(r27439, k, MPFR_RNDN);
        mpfr_log(r27440, r27439, MPFR_RNDN);
        mpfr_set_d(r27441, a, MPFR_RNDN);
        mpfr_set_d(r27442, m, MPFR_RNDN);
        mpfr_mul(r27443, r27441, r27442, MPFR_RNDN);
        mpfr_mul(r27444, r27440, r27443, MPFR_RNDN);
        mpfr_add(r27445, r27444, r27441, MPFR_RNDN);
        ;
        ;
        mpfr_add(r27448, r27447, r27439, MPFR_RNDN);
        mpfr_mul(r27449, r27448, r27439, MPFR_RNDN);
        mpfr_add(r27450, r27446, r27449, MPFR_RNDN);
        mpfr_div(r27451, r27445, r27450, MPFR_RNDN);
        ;
        mpfr_set_si(r27453, mpfr_cmp(r27451, r27452) <= 0, MPFR_RNDN);
        mpfr_pow(r27454, r27439, r27442, MPFR_RNDN);
        mpfr_mul(r27455, r27441, r27454, MPFR_RNDN);
        mpfr_mul(r27456, r27447, r27439, MPFR_RNDN);
        mpfr_add(r27457, r27446, r27456, MPFR_RNDN);
        mpfr_mul(r27458, r27439, r27439, MPFR_RNDN);
        mpfr_add(r27459, r27457, r27458, MPFR_RNDN);
        mpfr_div(r27460, r27455, r27459, MPFR_RNDN);
        ;
        mpfr_set_si(r27462, mpfr_cmp(r27451, r27461) <= 0, MPFR_RNDN);
        mpfr_div(r27463, r27441, r27439, MPFR_RNDN);
        mpfr_div(r27464, r27463, r27439, MPFR_RNDN);
        mpfr_div(r27465, r27447, r27439, MPFR_RNDN);
        mpfr_add(r27466, r27465, r27446, MPFR_RNDN);
        mpfr_mul(r27467, r27464, r27466, MPFR_RNDN);
        ;
        mpfr_mul(r27469, r27468, r27441, MPFR_RNDN);
        ;
        mpfr_pow(r27471, r27439, r27470, MPFR_RNDN);
        mpfr_div(r27472, r27469, r27471, MPFR_RNDN);
        mpfr_add(r27473, r27467, r27472, MPFR_RNDN);
        mpfr_mul(r27474, r27473, r27454, MPFR_RNDN);
        mpfr_div(r27475, r27441, r27450, MPFR_RNDN);
        mpfr_mul(r27476, r27454, r27475, MPFR_RNDN);
        if (mpfr_get_si(r27462, MPFR_RNDN)) { mpfr_set(r27477, r27474, MPFR_RNDN); } else { mpfr_set(r27477, r27476, MPFR_RNDN); };
        if (mpfr_get_si(r27453, MPFR_RNDN)) { mpfr_set(r27478, r27460, MPFR_RNDN); } else { mpfr_set(r27478, r27477, MPFR_RNDN); };
        return mpfr_get_d(r27478, MPFR_RNDN);
}

