#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 r27323 = a;
        float r27324 = k;
        float r27325 = m;
        float r27326 = pow(r27324, r27325);
        float r27327 = r27323 * r27326;
        float r27328 = 1;
        float r27329 = 10;
        float r27330 = r27329 * r27324;
        float r27331 = r27328 + r27330;
        float r27332 = r27324 * r27324;
        float r27333 = r27331 + r27332;
        float r27334 = r27327 / r27333;
        return r27334;
}

double f_id(double a, double k, double m) {
        double r27335 = a;
        double r27336 = k;
        double r27337 = m;
        double r27338 = pow(r27336, r27337);
        double r27339 = r27335 * r27338;
        double r27340 = 1;
        double r27341 = 10;
        double r27342 = r27341 * r27336;
        double r27343 = r27340 + r27342;
        double r27344 = r27336 * r27336;
        double r27345 = r27343 + r27344;
        double r27346 = r27339 / r27345;
        return r27346;
}


double f_of(float a, float k, float m) {
        float r27347 = m;
        float r27348 = k;
        float r27349 = log(r27348);
        float r27350 = 10;
        float r27351 = r27348 * r27350;
        float r27352 = fma(r27347, r27349, r27351);
        float r27353 = 1.958962871968911e+95;
        bool r27354 = r27352 <= r27353;
        float r27355 = a;
        float r27356 = pow(r27348, r27347);
        float r27357 = r27355 * r27356;
        float r27358 = 1;
        float r27359 = r27350 * r27348;
        float r27360 = r27358 + r27359;
        float r27361 = r27348 * r27348;
        float r27362 = r27360 + r27361;
        float r27363 = r27357 / r27362;
        float r27364 = 1.23149157803416e+288;
        bool r27365 = r27352 <= r27364;
        float r27366 = 4;
        float r27367 = pow(r27348, r27366);
        float r27368 = r27367 / r27356;
        float r27369 = r27355 / r27368;
        float r27370 = 101;
        float r27371 = r27355 / r27348;
        float r27372 = r27371 / r27348;
        float r27373 = r27372 * r27356;
        float r27374 = r27350 / r27348;
        float r27375 = fma(r27373, r27374, r27373);
        float r27376 = fma(r27369, r27370, r27375);
        float r27377 = r27350 + r27348;
        float r27378 = fma(r27377, r27348, r27358);
        float r27379 = sqrt(r27378);
        float r27380 = r27356 / r27379;
        float r27381 = r27355 / r27379;
        float r27382 = r27380 * r27381;
        float r27383 = r27365 ? r27376 : r27382;
        float r27384 = r27354 ? r27363 : r27383;
        return r27384;
}

double f_od(double a, double k, double m) {
        double r27385 = m;
        double r27386 = k;
        double r27387 = log(r27386);
        double r27388 = 10;
        double r27389 = r27386 * r27388;
        double r27390 = fma(r27385, r27387, r27389);
        double r27391 = 1.958962871968911e+95;
        bool r27392 = r27390 <= r27391;
        double r27393 = a;
        double r27394 = pow(r27386, r27385);
        double r27395 = r27393 * r27394;
        double r27396 = 1;
        double r27397 = r27388 * r27386;
        double r27398 = r27396 + r27397;
        double r27399 = r27386 * r27386;
        double r27400 = r27398 + r27399;
        double r27401 = r27395 / r27400;
        double r27402 = 1.23149157803416e+288;
        bool r27403 = r27390 <= r27402;
        double r27404 = 4;
        double r27405 = pow(r27386, r27404);
        double r27406 = r27405 / r27394;
        double r27407 = r27393 / r27406;
        double r27408 = 101;
        double r27409 = r27393 / r27386;
        double r27410 = r27409 / r27386;
        double r27411 = r27410 * r27394;
        double r27412 = r27388 / r27386;
        double r27413 = fma(r27411, r27412, r27411);
        double r27414 = fma(r27407, r27408, r27413);
        double r27415 = r27388 + r27386;
        double r27416 = fma(r27415, r27386, r27396);
        double r27417 = sqrt(r27416);
        double r27418 = r27394 / r27417;
        double r27419 = r27393 / r27417;
        double r27420 = r27418 * r27419;
        double r27421 = r27403 ? r27414 : r27420;
        double r27422 = r27392 ? r27401 : r27421;
        return r27422;
}

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 r27423, r27424, r27425, r27426, r27427, r27428, r27429, r27430, r27431, r27432, r27433, r27434;

void setup_mpfr_f_im() {
        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_im(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);
}

static mpfr_t r27435, r27436, r27437, r27438, 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;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27435);
        mpfr_init(r27436);
        mpfr_init(r27437);
        mpfr_init_set_str(r27438, "10", 10, MPFR_RNDN);
        mpfr_init(r27439);
        mpfr_init(r27440);
        mpfr_init_set_str(r27441, "1.958962871968911e+95", 10, MPFR_RNDN);
        mpfr_init(r27442);
        mpfr_init(r27443);
        mpfr_init(r27444);
        mpfr_init(r27445);
        mpfr_init_set_str(r27446, "1", 10, MPFR_RNDN);
        mpfr_init(r27447);
        mpfr_init(r27448);
        mpfr_init(r27449);
        mpfr_init(r27450);
        mpfr_init(r27451);
        mpfr_init_set_str(r27452, "1.23149157803416e+288", 10, MPFR_RNDN);
        mpfr_init(r27453);
        mpfr_init_set_str(r27454, "4", 10, MPFR_RNDN);
        mpfr_init(r27455);
        mpfr_init(r27456);
        mpfr_init(r27457);
        mpfr_init_set_str(r27458, "101", 10, MPFR_RNDN);
        mpfr_init(r27459);
        mpfr_init(r27460);
        mpfr_init(r27461);
        mpfr_init(r27462);
        mpfr_init(r27463);
        mpfr_init(r27464);
        mpfr_init(r27465);
        mpfr_init(r27466);
        mpfr_init(r27467);
        mpfr_init(r27468);
        mpfr_init(r27469);
        mpfr_init(r27470);
        mpfr_init(r27471);
        mpfr_init(r27472);
}

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

static mpfr_t r27473, r27474, r27475, r27476, r27477, r27478, r27479, r27480, r27481, r27482, r27483, r27484, r27485, r27486, r27487, r27488, r27489, r27490, r27491, r27492, r27493, r27494, r27495, r27496, r27497, r27498, r27499, r27500, r27501, r27502, r27503, r27504, r27505, r27506, r27507, r27508, r27509, r27510;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r27473);
        mpfr_init(r27474);
        mpfr_init(r27475);
        mpfr_init_set_str(r27476, "10", 10, MPFR_RNDN);
        mpfr_init(r27477);
        mpfr_init(r27478);
        mpfr_init_set_str(r27479, "1.958962871968911e+95", 10, MPFR_RNDN);
        mpfr_init(r27480);
        mpfr_init(r27481);
        mpfr_init(r27482);
        mpfr_init(r27483);
        mpfr_init_set_str(r27484, "1", 10, MPFR_RNDN);
        mpfr_init(r27485);
        mpfr_init(r27486);
        mpfr_init(r27487);
        mpfr_init(r27488);
        mpfr_init(r27489);
        mpfr_init_set_str(r27490, "1.23149157803416e+288", 10, MPFR_RNDN);
        mpfr_init(r27491);
        mpfr_init_set_str(r27492, "4", 10, MPFR_RNDN);
        mpfr_init(r27493);
        mpfr_init(r27494);
        mpfr_init(r27495);
        mpfr_init_set_str(r27496, "101", 10, MPFR_RNDN);
        mpfr_init(r27497);
        mpfr_init(r27498);
        mpfr_init(r27499);
        mpfr_init(r27500);
        mpfr_init(r27501);
        mpfr_init(r27502);
        mpfr_init(r27503);
        mpfr_init(r27504);
        mpfr_init(r27505);
        mpfr_init(r27506);
        mpfr_init(r27507);
        mpfr_init(r27508);
        mpfr_init(r27509);
        mpfr_init(r27510);
}

double f_dm(double a, double k, double m) {
        mpfr_set_d(r27473, m, MPFR_RNDN);
        mpfr_set_d(r27474, k, MPFR_RNDN);
        mpfr_log(r27475, r27474, MPFR_RNDN);
        ;
        mpfr_mul(r27477, r27474, r27476, MPFR_RNDN);
        mpfr_fma(r27478, r27473, r27475, r27477, MPFR_RNDN);
        ;
        mpfr_set_si(r27480, mpfr_cmp(r27478, r27479) <= 0, MPFR_RNDN);
        mpfr_set_d(r27481, a, MPFR_RNDN);
        mpfr_pow(r27482, r27474, r27473, MPFR_RNDN);
        mpfr_mul(r27483, r27481, r27482, MPFR_RNDN);
        ;
        mpfr_mul(r27485, r27476, r27474, MPFR_RNDN);
        mpfr_add(r27486, r27484, r27485, MPFR_RNDN);
        mpfr_mul(r27487, r27474, r27474, MPFR_RNDN);
        mpfr_add(r27488, r27486, r27487, MPFR_RNDN);
        mpfr_div(r27489, r27483, r27488, MPFR_RNDN);
        ;
        mpfr_set_si(r27491, mpfr_cmp(r27478, r27490) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r27493, r27474, r27492, MPFR_RNDN);
        mpfr_div(r27494, r27493, r27482, MPFR_RNDN);
        mpfr_div(r27495, r27481, r27494, MPFR_RNDN);
        ;
        mpfr_div(r27497, r27481, r27474, MPFR_RNDN);
        mpfr_div(r27498, r27497, r27474, MPFR_RNDN);
        mpfr_mul(r27499, r27498, r27482, MPFR_RNDN);
        mpfr_div(r27500, r27476, r27474, MPFR_RNDN);
        mpfr_fma(r27501, r27499, r27500, r27499, MPFR_RNDN);
        mpfr_fma(r27502, r27495, r27496, r27501, MPFR_RNDN);
        mpfr_add(r27503, r27476, r27474, MPFR_RNDN);
        mpfr_fma(r27504, r27503, r27474, r27484, MPFR_RNDN);
        mpfr_sqrt(r27505, r27504, MPFR_RNDN);
        mpfr_div(r27506, r27482, r27505, MPFR_RNDN);
        mpfr_div(r27507, r27481, r27505, MPFR_RNDN);
        mpfr_mul(r27508, r27506, r27507, MPFR_RNDN);
        if (mpfr_get_si(r27491, MPFR_RNDN)) { mpfr_set(r27509, r27502, MPFR_RNDN); } else { mpfr_set(r27509, r27508, MPFR_RNDN); };
        if (mpfr_get_si(r27480, MPFR_RNDN)) { mpfr_set(r27510, r27489, MPFR_RNDN); } else { mpfr_set(r27510, r27509, MPFR_RNDN); };
        return mpfr_get_d(r27510, MPFR_RNDN);
}

